您的位置:首页 > 其它

标题栏添加控件

2011-09-23 17:30 92 查看
using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Drawing.Drawing2D;

using System.Runtime.InteropServices;

using System.Diagnostics;

namespace 標題欄繪圖

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

[DllImport("User32.dll")]

private static extern IntPtr GetWindowDC(IntPtr hwnd);

[DllImport("User32.dll")]

private static extern int ReleaseDC(IntPtr hwnd, IntPtr hdc);

[DllImport("Kernel32.dll")]

private static extern int GetLastError();

//标题栏按钮的矩形区域。

Rectangle m_rect = new Rectangle(205, 6, 20, 20);

protected override void WndProc(ref Message m)

{

base.WndProc(ref m);

switch (m.Msg)

{

case 0x86://WM_NCACTIVATE

goto case 0x85;

case 0x85://WM_NCPAINT

{

IntPtr hDC = GetWindowDC(m.HWnd);

//把DC转换为.NET的Graphics就可以很方便地使用Framework提供的绘图功能了

Graphics gs = Graphics.FromHdc(hDC);

gs.FillRectangle(new LinearGradientBrush(m_rect, Color.Pink, Color.Purple, LinearGradientMode.BackwardDiagonal), m_rect);

StringFormat strFmt = new StringFormat();

strFmt.Alignment = StringAlignment.Center;

strFmt.LineAlignment = StringAlignment.Center;

gs.DrawString("√", this.Font, Brushes.BlanchedAlmond, m_rect, strFmt);

gs.Dispose();

//释放GDI资源

ReleaseDC(m.HWnd, hDC);

break;

}

case 0xA1://WM_NCLBUTTONDOWN

{

Point mousePoint = new Point((int)m.LParam);

mousePoint.Offset(-this.Left, -this.Top);

if (m_rect.Contains(mousePoint))

{

MessageBox.Show("hello");

}

break;

}

}

}

//在窗口大小改变时及时更新按钮的区域。

private void Form1_SizeChanged(object sender, System.EventArgs e)

{

m_rect.X = this.Bounds.Width - 95;

m_rect.Y = 6;

m_rect.Width = m_rect.Height = 20;

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: