如何设置WinForm的标题栏高度? 做一个自定义界面的窗体,标题栏用图片来绘制。但是有的系统里标题栏的高度太小,画上图片后太难看。并且也放不下自定义的关闭按钮。怎么做可以设置它的高度? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 form类型设为None,相应的事件,自己添加。 如果把边框设置为NONE,标题栏是画上了,但是如果窗体里有菜单的话就不行了。所以这个办法 不行。我现在的做法是得到窗体的Graphics,而不是客户区的,这样就可以在标题栏上面画图,从而把它覆盖,因为有标题栏,所以菜单的显示还算正常。但是如果图片的高度大于标题栏时,菜单的显示还是会有问题。所以目前只有一个办法就是设置标题栏的高度等于图片的高度。 form类型设为None,在上面加一个dock为top的panel作为标题栏试试改变panel的大小 可以讲讲你是怎么获得窗体的Graphics的吗?OnPaint里面只是Client的 To isaacyh(发现自己啥都不懂回头学C++) :但是要放菜单的话,就不行啦。To coolksj(coolksj):调API [DllImport("User32.dll", CharSet=CharSet.Auto)] public static extern IntPtr GetWindowDC(IntPtr hWnd); IntPtr hDC = GetWindowDC(this.Handle); Graphics gra = Graphics.FromHdc(hDC); gra.DrawImageUnscaled(bmp,0,0); gra.Dispose(); 不要使用MainMenu,用浮动菜单ContextMenu,窗体设为None,应该就没问题了阿 窗体设为none,按钮+ContextMenu可以实现菜单,然后你就想怎么画都行了 TO Jim3(Jim) :现在就是用缩放来实现的。但是缩放后的界面效果和预想的不太一样,所以就想找点别的办法 看到一个API函数SystemParametersInfo可以改变标题栏高度用SPI_SETNONCLIENTMETRICS参数不过改变的好像是整个系统的,你试一下吧 有一个初步的解决方案了,就是截获WM_NCCALCSIZE消息,指定客户区的大小。 看到一个API函数SystemParametersInfo可以改变标题栏高度用SPI_SETNONCLIENTMETRICS参数不过改变的好像是整个系统的,你试一下吧 谢谢大家了,现在想通过截获WM_NCCALCSIZE消息来自定义客户区的大小从而实现目的。只是在写的时候又遇到些问题http://community.csdn.net/Expert/topic/3840/3840346.xml?temp=.8963282请大家继续帮忙啊! iyond(伊飏) 帮你做了一下试验,截取WM_NCCALCSIZE,修改NCCALCSIZE_PARAMS,并没有用. 他的确可以让Client改变,但无法改变Title To coolksj(coolksj) :谢谢了。但是虽然它不能改变TITLE,但是只要能改变客户区就可以了。因为我可以把客户区往下挪,这样就等于改变了标题栏的高度(因为标题栏是我自己画的)。另外,你用VB是怎么写的? 我是用form类型设为None,在上面加一个dock为top的panel作为标题栏的办法实现的外观还不错,可是怎么实现窗体的拖拽呢?望高手点解~~ 谢谢了~ 因为还是改变不了标题栏,所以放弃了。现在我基本上完成了一个可以动态设置皮肤的自定义窗体http://my.hevnet.cn/iyond/posts/7354.aspx因为是第一个版本,所以错误和不足肯定不少,请大家指正。 增加:双击标题栏改变窗体状态 恢复默认皮肤功能Demo下载地址:http://bbs.hevnet.cn/UploadFile/2005-3/200531122253976.rar datagirdview 失去焦点 怎么让窗体隐藏后不在Alt+Tab中显示 Socket 多线程问题 c#基础问题,请求帮忙! 重发:如何登陆后才能查看网页? 对路径 的访问被拒绝 关于String字符操作取值的问题 ADO.net速度慢的问题 C# Winfrom 多个Form窗体之间切换过程中实现过渡效果 电脑文件管控系统设计与实现 如何用vb.net表述下列这段代码? C#中如何处理WM_NCCALCSIZE消息?
我现在的做法是得到窗体的Graphics,而不是客户区的,这样就可以在标题栏上面画图,从而把它覆盖,因为有标题栏,所以菜单的显示还算正常。
但是如果图片的高度大于标题栏时,菜单的显示还是会有问题。
所以目前只有一个办法就是设置标题栏的高度等于图片的高度。
改变panel的大小
To coolksj(coolksj):调API
[DllImport("User32.dll", CharSet=CharSet.Auto)]
public static extern IntPtr GetWindowDC(IntPtr hWnd); IntPtr hDC = GetWindowDC(this.Handle);
Graphics gra = Graphics.FromHdc(hDC); gra.DrawImageUnscaled(bmp,0,0);
gra.Dispose();
用SPI_SETNONCLIENTMETRICS参数不过改变的好像是整个系统的,你试一下吧
用SPI_SETNONCLIENTMETRICS参数不过改变的好像是整个系统的,你试一下吧
帮你做了一下试验,截取WM_NCCALCSIZE,修改NCCALCSIZE_PARAMS,并没有用.
他的确可以让Client改变,但无法改变Title
谢谢了。但是虽然它不能改变TITLE,但是只要能改变客户区就可以了。因为我可以把客户区往下挪,这样就等于改变了标题栏的高度(因为标题栏是我自己画的)。另外,你用VB是怎么写的?
http://my.hevnet.cn/iyond/posts/7354.aspx
因为是第一个版本,所以错误和不足肯定不少,请大家指正。
恢复默认皮肤功能Demo下载地址:http://bbs.hevnet.cn/UploadFile/2005-3/200531122253976.rar