所有者绘制菜单的自定义背景

时间:2010-09-17 08:24:46

标签: c++ winapi

我使用mfc绘制自定义菜单,除了它周围有一个讨厌的边框。我如何摆脱边界或划过它?

例如:

(边缘周围的白色边框)

编辑:

我知道它只剩下三个小时,但下面没有任何工作。我使用以下代码尝试了它们:

    HWND hwnd = m_pParent->getBrowserHWND();
    uint32 style = GetWindowLong(hwnd, GWL_STYLE);

    SetWindowLong(hwnd, GWL_STYLE, style&~WS_BORDER);
    SetWindowPos(hwnd, 0, 0, 0, 0, 0, SWP_FRAMECHANGED);

    HookHwnd hook(hwnd);
    int res = TrackPopupMenu((HMENU)menu.GetHMenu(), TPM_LEFTALIGN|TPM_RIGHTBUTTON|TPM_RETURNCMD|TPM_RECURSE, xPos, yPos, 0, hwnd, NULL);

    SetWindowLong(hwnd, GWL_STYLE, style);

2 个答案:

答案 0 :(得分:1)

实际上,对于freefallr的建议,它可能只是一个简单的WS_BORDER。

尝试使用以下方法将其删除:

ModifyStyle( WS_BORDER, 0, SWP_FRAMECHANGED );

答案 1 :(得分:0)

我只使用WTL进行UI编码,自从我看过MFC已经有好几年了,但它也非常接近Windows API。您可以检查菜单的创建标志。

调用GetWindowLong,具体来说,检查GWL_EXSTYLE是否为WS_EX_CLIENTEDGE;这个可能是导致问题的原因。您可以随时将其输出并调用SetWindowLong并重新绘制菜单以进行测试。

希望这有一些帮助!

更新: 我想知道框架是否没有更新。尝试:

ModifyStyleEx(WS_EX_CLIENTEDGE,0,SWP_FRAMECHANGED);