c++ - 纯 Win32 C++ 中的自定义菜单边框(无 WTL、MFC 等)

标签 c++ windows winapi menu ownerdrawn

仅使用 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/

相关文章:

c - 如何将控制台的输入转换为与输入密码完全不同的方式

c++ - 如何在 C++ 中为 Windows 7 x64 的特定文件提取 "Date column"值

c - 如何设置 l2tp 预共享 key ?

c++ - 在 C++ 中抛出后会调用析构函数吗?

c++ Interlocked Ops 在 WinXP 上

windows - WIC 'Copy Pixels' 调用后预乘像素

function - 如何正确地将 Win32 类对象传递给函数

c# - 与 C++/Win32 中的错误代码相比,为什么异常在 C#/.NET 编程中如此流行?

c++ - 从 ifstream 读取不会读取空格

c++ - 简单的 C++ vector 用法