社区
C#
帖子详情
如何重绘winform的窗体边框?
afafaf_2008
2008-12-28 11:47:37
我并不想把窗体的边框设为none再去加图片按钮什么的,只是想重绘蓝色的标题栏和那几个最大化最小化关闭按钮,哪位知道的告诉我怎么做啊?还有如果还想重绘窗体左右和下面的边框又怎么做?
...全文
1179
10
打赏
收藏
如何重绘winform的窗体边框?
我并不想把窗体的边框设为none再去加图片按钮什么的,只是想重绘蓝色的标题栏和那几个最大化最小化关闭按钮,哪位知道的告诉我怎么做啊?还有如果还想重绘窗体左右和下面的边框又怎么做?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用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
打赏
举报
回复
参考
http://www.cnblogs.com/volnet/articles/cpp_ondraw.html
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
可以研究一下。
winform
自定义
窗体
,
重绘
标题栏,自定义控件学习
winform
自定义
窗体
,
重绘
标题栏 虽然现在都在说
winform
窗体
太丑了,但是我也能尽量让桌面应用程序漂亮那么一点点 话不多说,先上图
重绘
标题栏 先将原生
窗体
设置成无
边框
,FormBoderStyle设置成None 然后添加一个panpel控件设置成
窗体
的的标题栏 然后添加四个Label控件充当标题和最小化最大化关闭按钮。 此时界面的原型就出来了。 完善
窗体
当然原型出来了,肯定会让其它...
实现
Winform
应用中的无
边框
窗体
设计
本文还有配套的精品资源,点击获取 简介:本文详细介绍了如何在
Winform
应用中创建无
边框
窗体
,包括理解
窗体
类和修改 属性。实现无
边框
窗体
时,需要自定义
窗体
的拖动、大小调整等交互功能。本文还探讨了如何处理键盘交互和自定义窗口消息,以及如何确保
窗体
在调整大小时的
重绘
,以便开发者能够根据项目需求创建具有特定界面布局和功能的
窗体
。
窗体
类在
Winform
应用程序中扮演着基础架构的角色。它是一个容器,可以放置各种控件(如按钮、文本框等),用于构建
WinForm
开发过程中的一些小功能记录
记录下一些
Winform
小功能的用法,免得每次都去找资料
C# 更改
窗体
样式
本文介绍了在
WinForm
项目中实现不规则
窗体
的方法。通过Bitmap类加载图片并使用MakeTransparent方法将指定颜色设为透明,配合重写OnPaint方法实现
窗体
自定义绘制。关键点包括:1)使用Bitmap处理图像透明;2)重写OnPaint进行
窗体
绘制;3)调用基类方法确保Paint事件触发。文中提供了完整代码示例,展示了如何创建透明背景的异形
窗体
,并添加关闭功能。该方法适用于需要特殊形状
窗体
的提醒或数据展示场景。
CSkin源码解析:
WinForm
自定义控件与换肤机制从入门到实践
桌面应用开发中,界面观感直接影响产品交付质量。
WinForm
作为成熟的GUI框架,功能强大但默认控件视觉呈现往往停留在传统风格。为了在不改变现有架构的前提下提升交互体验,开发者需要借助自定义控件技术。GDI+绘图、双缓冲机制、控件状态管理是自绘控件的底层基础,而皮肤机制则通过全局颜色对象实现主题的动态切换。这类技术广泛应用于上位机、工业软件和桌面工具的开发,能有效解决界面老旧与开发效率之间的矛盾。CSkin作为一款经典的
WinForm
UI库,通过控件派生与
重绘
机制,允许开发者以低迁移成本实现现代感界面。本
C#
111,128
社区成员
642,536
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章