读书人

c#怎么重绘窗口

发布时间: 2012-05-23 13:44:13 作者: rapoo

c#如何重绘窗口
c#如何重绘窗口

[解决办法]
参考如下代码

C# code
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;    }} 

读书人网 >C#

热点推荐