环境:VS2005 C# WinForm重载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;
    }
}