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* class。我正在单击一个 HWND 对象,但我也尝试获取我正在单击的这个特定对象的 CWnd::FromHandle() 并让该对象处理它,但我仍然遇到同样的问题。
我的顶级菜单结构和所有其他菜单都有效 - 仅在这种特殊情况下。
我真的不想派生一个 C++ CMenu class 只是为了在原始菜单实际工作时覆盖 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
结果:
请注意,如果只有 "menu bar" 并且没有弹出窗口,这将不起作用。无法将以下菜单创建为弹出菜单:
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, p.x, p.y, this);
我目前正在尝试做一些简单的事情:
CMenu menu;
menu.LoadMenu(IDR_MENU_IMAGE);
CPoint pt;
GetCursorPos(&pt);
menu.TrackPopupMenu(TPM_RIGHTBUTTON, pt.x, pt.y, this);
当我右击时,我得到下图。但是,菜单已加载;当我将光标向下移动到菜单时,您可以看到它很好地填充了子菜单。它使用我像这样动态加载的任何菜单来执行此操作。我试图创建一个指针 (CMenu*),但问题仍然存在。
点数无关紧要(我输入任意点数)。
有问题的 "this" 是派生的 CView* class。我正在单击一个 HWND 对象,但我也尝试获取我正在单击的这个特定对象的 CWnd::FromHandle() 并让该对象处理它,但我仍然遇到同样的问题。
我的顶级菜单结构和所有其他菜单都有效 - 仅在这种特殊情况下。
我真的不想派生一个 C++ CMenu class 只是为了在原始菜单实际工作时覆盖 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
结果:
请注意,如果只有 "menu bar" 并且没有弹出窗口,这将不起作用。无法将以下菜单创建为弹出菜单:
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, p.x, p.y, this);