如何设置标题栏高度?

KingStarSolo 2009-05-19 04:16:47
我在FORM类中重写WindowProc

在WindowProc里用GetWindowDC截取了WM_NCPAINT信息

并且重绘了标题栏



但是问题来了 发现我画的标题栏没有原来的标题栏那么高

所以客户区和非客户区之间有一小段透明区域

现在我想修改标题栏的高度使其适应我画上去的标题栏!

请高手指教!
...全文
3129 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyserver 2009-05-22
  • 打赏
  • 举报
回复
如果要改变标题栏大小或客户区大小,那么可以在WM_NCCALCSIZE消息里进行设置,lParam参数表示的是有关矩形,具体意义如下:
Private Type WINDOWPOS
hwnd As Long
hWndInsertAfter As Long
x As Long
y As Long
cx As Long
cy As Long
flags As Long
End Type
Private Type NCCALCSIZE_PARAMS
rgrc(0 To 2) As RECT '0为改变后的坐标,1为改变前的坐标,2为客户区的坐标
lppos As Long 'WINDOWPOS
End Type
问题是,自绘了标题栏后,原来的大部分标题栏消息都需要自己处理,否则是没用的。
最简单的还是设置无标题栏,然后在客户区绘制一个假的标题栏。
mybelta2 2009-05-22
  • 打赏
  • 举报
回复
mark
KingStarSolo 2009-05-22
  • 打赏
  • 举报
回复
OK

明白了

结贴散分
Tiger_Zhao 2009-05-22
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 Gary87517 的回复:]
晕啊··可能你们误会我意思·了··

我是想要改变···标题栏的大小··

或者是客户区向上挪 或者想下挪···
[/Quote]
说了老半天了,WM_NCCALCSIZE 中给出调整后的客户区。
KingStarSolo 2009-05-21
  • 打赏
  • 举报
回复
晕啊··可能你们误会我意思·了··

我是想要改变···标题栏的大小··

或者是客户区向上挪 或者想下挪···

Tiger_Zhao 2009-05-21
  • 打赏
  • 举报
回复
那么你要响应 WM_NCCALCSIZE,按照你的标题栏大小计算出客户区范围。
lyserver 2009-05-21
  • 打赏
  • 举报
回复
其实原因在于你只计算了标题栏本身的高度,而没有计算边框的高度,所以才出现透明区域,需要加上边框高度,获得边框高度可以用GetSystemMetrics(SM_CYBORDER)。
KingStarSolo 2009-05-21
  • 打赏
  • 举报
回复
还是不能明白···

计算出来··具体的操作干些什么··
Tiger_Zhao 2009-05-21
  • 打赏
  • 举报
回复
具体说明看MSDN帮助。
原则在 WM_NCCALCSIZE 中,传入 Window 的 RECT,你根据边界、标题栏等信息计算出客户区的 RECT。
这样系统才能将客户区的图像绘制在合适的位置,而不是比你期望的位置要底。
KingStarSolo 2009-05-21
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 Tiger_Zhao 的回复:]
那么你要响应 WM_NCCALCSIZE,按照你的标题栏大小计算出客户区范围。
[/Quote]


OK···能说的详细点么?

我试下···
KingStarSolo 2009-05-20
  • 打赏
  • 举报
回复
DrawCaption 这个API --C#--或者VB2005 里怎么用?


给点示例也行行!
Tiger_Zhao 2009-05-20
  • 打赏
  • 举报
回复
用 GetSystemMetrics(SM_CYCAPTION) 取得标题栏高度,按这个高度来进行重绘。
KingStarSolo 2009-05-20
  • 打赏
  • 举报
回复
我的是改变标题栏的大小

而不是我去适应它的大小


PctGL 2009-05-20
  • 打赏
  • 举报
回复

利用 WindowRect 和 ClientRect 也能得到标题栏或者说非客户端的尺寸
不过, 如果窗口有菜单, 菜单也算是标题栏区域的

Tiger_Zhao 2009-05-20
  • 打赏
  • 举报
回复
你在 WM_NCPAINT 中如何重绘的标题栏?
总要确定一个高度吧。改用 GetSystemMetrics(SM_CYCAPTION),是像素单位。
weiyulin 2009-05-20
  • 打赏
  • 举报
回复


都是高手些,进来学习学习
我是一道光_ 2009-05-20
  • 打赏
  • 举报
回复
支持~
KingStarSolo 2009-05-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 Tiger_Zhao 的回复:]
用 GetSystemMetrics(SM_CYCAPTION) 取得标题栏高度,按这个高度来进行重绘。
[/Quote]


能讲得具体一点么?
KingStarSolo 2009-05-19
  • 打赏
  • 举报
回复
顶起

1,488

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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