gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:43:31 31 4
gpt4 key购买 nike

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

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 函数,而原始菜单实际上应该可以工作,并且在其他版本中也能正常工作..

帮忙吗?

enter image description here

最佳答案

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

结果:

enter image description here

请注意,如果只有“菜单栏”且没有弹出窗口,这将不起作用。下面的菜单不能创建为弹出菜单:

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);

关于C++ CMenu 绘图不正确(非自定义),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36024766/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com