关于C#:所有者绘制菜单的自定义背景

Custom back ground for owner drawn menu

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

例如:

(边缘周围的白色边框)

编辑:

我知道只剩下三个小时了,但是下面所有的事情都没有。我已经使用以下代码尝试了它们:

1
2
3
4
5
6
7
8
9
10
    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);


实际上,根据freefaller的建议,它很可能只是一个简单的WS_BORDER。

尝试使用以下命令将其删除:

1
ModifyStyle( WS_BORDER, 0, SWP_FRAMECHANGED );


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

调用GetWindowLong,具体地说,检查GWL_EXSTYLE中的WS_EX_CLIENTEDGE;这可能是造成您问题的原因。您可以始终对其进行OR运算,然后调用SetWindowLong并重新绘制菜单进行测试。

希望这对您有所帮助!

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

ModifyStyleEx(WS_EX_CLIENTEDGE,0,SWP_FRAMECHANGED);