(*难度)诚信请教高手!--如何调整菜单栏 MenuBar 位置?

时间:2022-05-20 12:19:12
修改对话框的外观,增加了皮肤后,如果修改NCClient区域的顶部高度等,菜单栏不会自动匹配到相应高度的位置,

猜测是微软内部制定了高度,不知道如何重新匹配。。

但是Skin++等皮肤软件却可以实现,请高手,前辈们指教。

最好有代码或demo。。

8 个解决方案

#1


一般做法是用一个工具栏来实现菜单,再把窗口的菜单设为空(SetMenu(NULL),让窗口不会自己的菜单),工具栏根据窗口的菜单创建工具栏按钮,工具栏的按钮自绘成一级菜单的样式,点工具栏按钮时弹出子菜单。CodeProject上有这个源码。www.softui.net

#2


SoftUI,谢谢你,能粘贴上CodePrject的源码链接页面吗?我也在上面找过,找不到,

关键字搜索不出来,谢谢了,我也帮你打一下你的Logo,呵呵。。。


www.softui.net  , (a good choice of your life)..晕。。。

#3


http://www.codeproject.com/menu/DrOwnerDrawnMenu.asp

#4


http://www.codeproject.com/docking/sizablerebar.asp
这个代码很不错,它不光只是处理了菜单,你还能从中学到其它东西。(光搜索菜单关键字可能很难找到:))

#5


用Spy++看了一下skin++处理后的菜单,它是没有toobar等控件去承载的,

会不会处理方式他们更优秀呢?如果可以不改变原先的属性,或许更好。希望继续探讨,

当然了,贴是一定结的,看看能不能有更好的方案!



谢谢 jiangsheng 蒋晟 跟 SoftUI 先。


 
   

#6


换肤所用的方法比较复杂,即要在非客户区实现自绘又要不让MS的代码绘制还要保证消息的正常路由,处理很麻烦(主要这些定制是MS没有提供资料的,去看泄露的Win2000的代码,MS对窗口的绘制方面比没有使用它提供给我们用的API和消息,而是一套没有暴露的他们自己专用的函数,这样要实现换肤想简单的HOOK那些绘制函数都没用),但还是有处理的办法,毕竟市场上的换肤界面还是有不少,只是时间和复杂度的问题,如果不是专业做界面库,建议用“次完美”一点的方法,再说市面上的换肤界面库也见得是很完美,毕竟不是MS提供的功能,而是采取一些非常“别扭”的方式去实现的。SoftUI现在正准备加入对标准界面的换肤,敬请期待。

#7


3Q,no matter what.结贴吧,呵呵

#8


我也正被这个问所难倒,原本我以为系统画菜单栏是从GetMenuBarInfo中获取的rect,于是我将这个函数HOOK了在里面修改了它的位置,但不起作用.
我又尝试HOOK GetMenuItemRect函数在里面修改了位置但还是无效,系统在在绘制菜单栏与菜单项的时跟本没有从这两个函数取rect.

#1


一般做法是用一个工具栏来实现菜单,再把窗口的菜单设为空(SetMenu(NULL),让窗口不会自己的菜单),工具栏根据窗口的菜单创建工具栏按钮,工具栏的按钮自绘成一级菜单的样式,点工具栏按钮时弹出子菜单。CodeProject上有这个源码。www.softui.net

#2


SoftUI,谢谢你,能粘贴上CodePrject的源码链接页面吗?我也在上面找过,找不到,

关键字搜索不出来,谢谢了,我也帮你打一下你的Logo,呵呵。。。


www.softui.net  , (a good choice of your life)..晕。。。

#3


http://www.codeproject.com/menu/DrOwnerDrawnMenu.asp

#4


http://www.codeproject.com/docking/sizablerebar.asp
这个代码很不错,它不光只是处理了菜单,你还能从中学到其它东西。(光搜索菜单关键字可能很难找到:))

#5


用Spy++看了一下skin++处理后的菜单,它是没有toobar等控件去承载的,

会不会处理方式他们更优秀呢?如果可以不改变原先的属性,或许更好。希望继续探讨,

当然了,贴是一定结的,看看能不能有更好的方案!



谢谢 jiangsheng 蒋晟 跟 SoftUI 先。


 
   

#6


换肤所用的方法比较复杂,即要在非客户区实现自绘又要不让MS的代码绘制还要保证消息的正常路由,处理很麻烦(主要这些定制是MS没有提供资料的,去看泄露的Win2000的代码,MS对窗口的绘制方面比没有使用它提供给我们用的API和消息,而是一套没有暴露的他们自己专用的函数,这样要实现换肤想简单的HOOK那些绘制函数都没用),但还是有处理的办法,毕竟市场上的换肤界面还是有不少,只是时间和复杂度的问题,如果不是专业做界面库,建议用“次完美”一点的方法,再说市面上的换肤界面库也见得是很完美,毕竟不是MS提供的功能,而是采取一些非常“别扭”的方式去实现的。SoftUI现在正准备加入对标准界面的换肤,敬请期待。

#7


3Q,no matter what.结贴吧,呵呵

#8


我也正被这个问所难倒,原本我以为系统画菜单栏是从GetMenuBarInfo中获取的rect,于是我将这个函数HOOK了在里面修改了它的位置,但不起作用.
我又尝试HOOK GetMenuItemRect函数在里面修改了位置但还是无效,系统在在绘制菜单栏与菜单项的时跟本没有从这两个函数取rect.