109,892
社区成员




[StructLayout(LayoutKind.Sequential)]
public class TRACKMOUSEEVENT
{
public int cbSize;
public int dwFlags;
public IntPtr hwndTrack;
public int dwHoverTime;
public TRACKMOUSEEVENT()
{
this.cbSize = Marshal.SizeOf(typeof(TRACKMOUSEEVENT));
this.dwHoverTime = 400;
}
}
[DllImport("user32.dll")]
private static extern IntPtr GetWindowDC(IntPtr hWnd);
[DllImport("user32.dll")]
private static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
[DllImport("comctl32.dll", ExactSpelling = true)]
private static extern bool _TrackMouseEvent(TRACKMOUSEEVENT tme);
private const int WM_NCPAINT = 0x0085;
private const int WM_NCACTIVATE = 0x0086;
private const int WM_NCLBUTTONDOWN = 0x00A1;
private const int WM_NCMOUSEMOVE = 0x00A0;
private const int WM_NCMOUSELEVEL = 0x02A2;
private const int WM_NCMOUSEHOVER = 0x02A0;
private const int TME_NONCLIENT = 0x00000010;
private bool TrackMouseEvent(TRACKMOUSEEVENT lpEventTrack)
{
if (lpEventTrack.dwFlags == TME_NONCLIENT)
{
/*画出标题栏关闭按钮*/
IntPtr hDC4 = GetWindowDC(lpEventTrack.hwndTrack);
//把DC转换为.NET的Graphics就可以很方便地使用Framework提供的绘图功能了
Graphics gs4 = Graphics.FromHdc(hDC4);
Image img4 = Image.FromFile("close_norm.png");
//显示背景图片
gs4.DrawImage(img4, 50, 5);
// MessageBox.Show("fengzanfeng");
return true;
}
return true;
}
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
// Rectangle vRectangle = new Rectangle((Width - 75) / 2, 3, 75, 25);
Rectangle vRectangle = new Rectangle(0, 0, 800, 30);
Rectangle vRectangleCloseBtn = new Rectangle(50, 5, 64, 19);
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);
/*画出标题栏ICON*/
Size si = new Size(SystemInformation.CaptionButtonSize.Width, SystemInformation.CaptionButtonSize.Height);
IntPtr hDC = GetWindowDC(m.HWnd);
//把DC转换为.NET的Graphics就可以很方便地使用Framework提供的绘图功能了
Graphics gs = Graphics.FromHdc(hDC);
Image img = Image.FromFile("abc.png");
//显示背景图片
gs.DrawImage(img, 5, 5);
/*画出标题栏关闭按钮*/
IntPtr hDC1 = GetWindowDC(m.HWnd);
//把DC转换为.NET的Graphics就可以很方便地使用Framework提供的绘图功能了
Graphics gs1 = Graphics.FromHdc(hDC);
Image img1 = Image.FromFile("close_norm.png");
//显示背景图片
gs.DrawImage(img1, 50, 5);
break;
//case WM_NCLBUTTONDOWN:
// Point vPoint = new Point((int)m.LParam);
// vPoint.Offset(-Left, -Top);
// if (vRectangle.Contains(vPoint))
// MessageBox.Show(vPoint.ToString());
// break;
case WM_NCMOUSEMOVE:
Point vPoint1 = new Point((int)m.LParam);
vPoint1.Offset(-Left, -Top);
if (vRectangleCloseBtn.Contains(vPoint1))
{
IntPtr hDC2 = GetWindowDC(m.HWnd);
//把DC转换为.NET的Graphics就可以很方便地使用Framework提供的绘图功能了
Graphics gs2 = Graphics.FromHdc(hDC2);
Image img2 = Image.FromFile("close_over.png");
//显示背景图片
gs2.DrawImage(img2, 50, 5);
TRACKMOUSEEVENT event1 = new TRACKMOUSEEVENT();
event1.dwFlags = TME_NONCLIENT;
event1.hwndTrack = (IntPtr)this.Handle;
event1.dwHoverTime = 400;
event1.cbSize = 100;
TrackMouseEvent(event1);
}
break;
case WM_NCMOUSELEVEL:
Point vPoint2 = new Point((int)m.LParam);
vPoint2.Offset(-Left, -Top);
if (vRectangleCloseBtn.Contains(vPoint2))
{
IntPtr hDC3 = GetWindowDC(m.HWnd);
//把DC转换为.NET的Graphics就可以很方便地使用Framework提供的绘图功能了
Graphics gs3 = Graphics.FromHdc(hDC3);
Image img3 = Image.FromFile("close_norm.png");
//显示背景图片
gs3.DrawImage(img3, 50, 5);
}
break;
}
}