纯Win32 C++中的自定义菜单边框(没有WTL,MFC等)

AP.*_*AP. 6 c++ windows winapi menu ownerdrawn

仅使用Win32 C++(没有WTL或MFC或任何其他第三方库),如何获得自定义菜单边框?

我能够拥有物品,但边界在非客户区域,我无法找到改变它们的方法.

有办法吗?

And*_*ers 4

不管你如何实现它,它都会有点麻烦。

一种选择是忘记 HMENU,并使用自定义的始终位于顶部的窗口构建您自己的菜单。这可能是太多的工作,你永远不会让一切都完美。我突然想到你必须处理 LTR 与 RTL、可访问性、可配置设置(如阴影和菜单动画(滑动/淡入淡出))。可能SetMenu对 HWND 所做的一些事情您无法通过这样的 hack 来复制,但您可以通过在 rebar 中实现它来回避这个问题。

如果你想继续使用 HMENU,那么你必须使用SetWindowsHookEx来查找菜单 HWND。菜单类是#32768. 然后,您可以对窗口进行子类化并覆盖 WM_NC* 和 WM_PRINT* 消息。这篇 Codeproject 文章还提供了有关您需要处理的未记录消息 (0x01e5) 的信息。