仅使用 Win32 C++(没有 WTL 或 MFC 或任何其他第三方库),如何获得自定义菜单边框?
我能够拥有这些项目,但边界位于非客户区域,我无法找到改变它们的方法。
有办法吗?
最佳答案
无论您如何实现它,都会有点麻烦。
一种选择是忘记 HMENU,并使用自定义的总在最前面的窗口构建您自己的菜单。这可能是太多的工作,你永远不会得到完美的一切。就在我的脑海中,你必须处理 LTR 与 RTL、可访问性、可配置设置,如阴影和菜单动画(滑动/淡入淡出)。 SetMenu
对 HWND 所做的事情可能无法用这样的 hack 复制,但您可以通过 implementing it in a rebar 回避该问题。 .
如果你想继续使用 HMENU,那么你必须使用 SetWindowsHookEx找到菜单 HWND。菜单类是 #32768
.然后你可以 subclass窗口并覆盖 WM_NC* 和 WM_PRINT* 消息。 This Codeproject article还有关于您需要处理的未记录消息 (0x01e5) 的信息。
关于c++ - 纯 Win32 C++ 中的自定义菜单边框(无 WTL、MFC 等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20806664/