C# WinForm 重绘标题栏的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# WinForm 重绘标题栏的问题相关的知识,希望对你有一定的参考价值。

问题背景:
C# vs2013 winform窗体程序
需要对在标题栏上重绘一张图片,重载了
protected override void WndProc(ref Message m)

base.WndProc(ref m);
switch (m.Msg)

//... ...
case Win32API.WM_NCPAINT:
case Win32API.WM_NCACTIVATE:
//重绘操作,在标题栏中画一张图片上去
break;
//... ...


在WndProc函数中,截获 WM_NCPAINT和WM_NCACTIVATE消息,实现标题栏的重绘。
问题:
实际运行过程中发现:
程序运行之后,并没有马上就有重绘效果。
只有当电脑桌面上的另外一个窗体覆盖了这个窗体,才能引起重绘;
而当改变窗体大小,最小化之后还原等操作之后,标题栏又会恢复的原来的样子。
问题:
这是怎么回事,怎么解决。
补充,
将重绘操作写到窗体Paint方法中即可。

参考技术A for(j=0;j<9;j++)
for(i=0;i<9-j;i++)
改成!
for(j=0;j<10;j++)
for(i=0;i<10-j;i++)

如何改变winform(c#)标题栏的颜色

对,只有设置winform formborder为none,自己设计自己的标题栏及窗口边框
或者使用API,或者第三方皮肤控件更改标题栏等样式
参考技术A winform(c#)标题栏的颜色是根据系统的配色来显示的,如果要改的话需要将原始的标题栏隐藏,然后自己写个标题栏套在窗体外面。网上能找到一些类似的例子,也有写好的配色控件。 参考技术B 隐藏窗体边框,自己写panel置顶,涉及panel颜色即可,最小化等按钮可以使用图片 参考技术C 自己写个就行了

以上是关于C# WinForm 重绘标题栏的问题的主要内容,如果未能解决你的问题,请参考以下文章

C# winform 获取标题栏,状态栏,菜单栏的高度

如何改变winform(c#)标题栏的颜色

C# winform 窗体怎么隐藏标题栏,不显示标题栏啊

C# WinForm开发 需要一个类似office 2007 菜单栏的控件

更改 WinForm 中标题栏的颜色

怎么样让winform标题栏的文字居中?