繁体   English   中英

C ++ CMenu绘制不正确(非自定义)

[英]C++ CMenu Drawing Incorrectly (Non-custom)

我目前正在尝试做一些简单的事情:

CMenu menu;
menu.LoadMenu(IDR_MENU_IMAGE);
CPoint pt;
GetCursorPos(&pt); 
menu.TrackPopupMenu(TPM_RIGHTBUTTON, pt.x, pt.y, this);

右键单击时,得到以下图像。 但是,菜单已加载。 当我将光标移到菜单下时,您可以看到它很好地填充了子菜单。 它可以通过我这样动态加载的任何菜单执行此操作。 我试图创建一个指针(CMenu *),但仍然继续遇到此问题。

点无所谓(我输入任意点)。

有问题的“ this”是派生的CView *类。 我单击一个HWND对象,但我也尝试使用该对象的CWnd :: FromHandle()进行单击,并让该对象处理它,但仍然存在相同的问题。

我的顶级菜单结构和所有其他菜单都起作用-仅在这种特殊情况下。

我并不是真的想派生一个C ++ CMenu类,以便在原始菜单实际上应该可以正常工作时覆盖MeasureItem函数,并且在其他版本中可以正常工作。

救命?

在此处输入图片说明

使用GetSubMenu(0)获取弹出句柄:

CMenu menu;
menu.LoadMenu(IDR_MENU_IMAGE);
CMenu *submenu = menu.GetSubMenu(0);
if (submenu)
    submenu->TrackPopupMenu(TPM_RIGHTBUTTON, pt.x, pt.y, this);

在资源编辑器中类似于以下内容创建IDR_MENU_IMAGE位置:

IDR_MENU_IMAGE MENU
BEGIN
    POPUP "File"
    BEGIN
        MENUITEM "New",                         ID_FILE_NEW
        MENUITEM "Open",                        ID_FILE_OPEN
        MENUITEM "Save",                        ID_FILE_SAVE
        MENUITEM "Save As ...",                 ID_FILE_SAVEAS
    END
END

结果:

在此处输入图片说明

请注意,如果只有一个“菜单栏”并且没有弹出窗口,则此方法将无效。 以下菜单无法创建为弹出菜单:

IDR_MENU_IMAGE MENU //no popup menu!
BEGIN
    MENUITEM "A", IDA
    MENUITEM "B", IDB
    MENUITEM "C", IDC
END


您还可以如下创建弹出菜单:

 CMenu menu; menu.CreatePopupMenu(); menu.AppendMenu(MF_STRING, ID_FILE_NEW, "New"); menu.TrackPopupMenu(TPM_RIGHTBUTTON, px, py, this); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM