如何重绘winform的窗体边框?

afafaf_2008 2008-12-28 11:47:37
我并不想把窗体的边框设为none再去加图片按钮什么的,只是想重绘蓝色的标题栏和那几个最大化最小化关闭按钮,哪位知道的告诉我怎么做啊?还有如果还想重绘窗体左右和下面的边框又怎么做?
...全文
1121 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
datiankuo 2010-07-05
  • 打赏
  • 举报
回复
dssssssssssssssssssssssssssssssssssssss
xu_2007 2008-12-29
  • 打赏
  • 举报
回复
5楼朋友说的方法会闪烁吗?
haha0369 2008-12-29
  • 打赏
  • 举报
回复
研究一下
特别 2008-12-28
  • 打赏
  • 举报
回复
mark
wuyq11 2008-12-28
  • 打赏
  • 举报
回复
wangping_li 2008-12-28
  • 打赏
  • 举报
回复
重载WndProc,然后处理WM_NCCALCSIZE和WM_NCPAINT来重画非用户区(标题栏

参考:
http://9iyou.com/Program_Data/cshap-130392.html
killer_liqiao 2008-12-28
  • 打赏
  • 举报
回复
...
hxp930 2008-12-28
  • 打赏
  • 举报
回复
下面的代码实现了你想要的一部分功能

[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;
}
lalac 2008-12-28
  • 打赏
  • 举报
回复
override WndProc,重写WM_NCPAINT消息
a12321321321312321 2008-12-28
  • 打赏
  • 举报
回复
http://www.cnblogs.com/volnet/articles/cpp_ondraw.html
可以研究一下。

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧