响应WM_NCPAINT画边框,求示例!
环境:VS2005 C# WinForm
重载WndProc处理WM_NCPAINT,网上有示例,但都只是画了个标题栏。我想连边框也画,但不幸的是,窗口加载后,边框大部分竟然未能画出来(只有一部分着上了色,其余皆黑)。但用鼠标变化下窗口位置后,边框就正常地显示出来了。
下面代码是重画标题栏的,求哪位大虾给改进一下,使它能连边框也画出来。随便色彩形状,只要是能在窗口加载后按代码里的显示出来就行。
重载WndProc处理WM_NCPAINT,网上有示例,但都只是画了个标题栏。我想连边框也画,但不幸的是,窗口加载后,边框大部分竟然未能画出来(只有一部分着上了色,其余皆黑)。但用鼠标变化下窗口位置后,边框就正常地显示出来了。
下面代码是重画标题栏的,求哪位大虾给改进一下,使它能连边框也画出来。随便色彩形状,只要是能在窗口加载后按代码里的显示出来就行。
using System.Runtime.InteropServices;
using System.Drawing.Drawing2D;
[DllImport("user32.dll")]
private static extern IntPtr GetWindowDC(IntPtr hWnd);
[DllImport("user32.dll")]
private static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
private const int WM_NCPAINT = 0x0085;
private const int WM_NCACTIVATE = 0x0086;
private const int WM_NCLBUTTONDOWN = 0x00A1;
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
Rectangle vRectangle = new Rectangle((Width - 75) / 2, 3, 75, 25);
switch (m.Msg)
{
case WM_NCPAINT:
case WM_NCACTIVATE:
IntPtr vHandle = GetWindowDC(m.HWnd);
Graphics vGraphics = Graphics.FromHdc(vHandle);
vGraphics.FillRectangle(new LinearGradientBrush(vRectangle,
Color.Pink, Color.Purple, LinearGradientMode.BackwardDiagonal),
vRectangle);
StringFormat vStringFormat = new StringFormat();
vStringFormat.Alignment = StringAlignment.Center;
vStringFormat.LineAlignment = StringAlignment.Center;
vGraphics.DrawString("About", Font, Brushes.BlanchedAlmond,
vRectangle, vStringFormat);
vGraphics.Dispose();
ReleaseDC(m.HWnd, vHandle);
break;
case WM_NCLBUTTONDOWN:
Point vPoint = new Point((int)m.LParam);
vPoint.Offset(-Left, -Top);
if (vRectangle.Contains(vPoint))
MessageBox.Show(vPoint.ToString());
break;
}
}
...全文
相关推荐
MFC自绘窗口的边框和标题
MFC自绘窗口的边框和标题,绝对实用的自绘窗口,不改变窗口属性的情况下自绘窗口,边框,标题,客户区和非客户区。
MFC单文档无边框窗口:自绘标题栏与WM_NCPAINT实战
在Windows桌面开发中,无边框窗口实现常用于自定义界面风格,其核心原理是移除系统标题栏样式,通过WM_NCCALCSIZE将非客户区归零,再借助WM_NCPAINT或客户区双缓冲自绘标题栏,并利用WM_NCHITTEST处理拖动、缩放与按钮命中。这种技术方案能显著提升界面一致性与视觉体验,广泛应用于图像编辑器、播放器、IDE等需要深度定制UI的场景。图像边框与标题栏和状态栏的个性化需求,正是MFC单文档框架下无边框改造的典型驱动力。
MFC 边框美化 MFCUI.zip
修改窗口边框颜色,可以在标题栏添加按钮来替换工具栏,demo使用VS2008,SDI单文档,修改了CmainFram的边框颜色,其他窗口也可以一参考修改
计算机软件-编程源码-ComboBox自画示例.zip
计算机软件-编程源码-ComboBox自画示例.zip
WM_PAINT 消息
对 MSDN 上 WM_PAINT 消息的详细翻译。 隶属于 Platform SDK Windows GDI 绘图消息。 后续会更新别消息-对MSDN的翻译。


