我正在制作一个应用程序,按下按钮后会将对话框作为系统托盘图标。它工作正常,但我还需要打开与右键单击对话框相同的菜单,并编写如下代码:
CMenu pMenu;
pMenu.LoadMenu(IDR_MENU1);
POINT pointCursor;
::GetCursorPos( &pointCursor );
pMenu.TrackPopupMenu(TPM_BOTTOMALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON, pointCursor.x, pointCursor.y, this);
正在创建菜单,但菜单的宽度非常薄,如下所示:(黄色突出显示的区域是菜单)
如果我只添加主菜单的第一个子菜单,那么它可以正常使用以下代码:
CMenu *pMenu = GetMenu();
POINT pointCursor;
CMenu *pMenu = GetMenu();
::GetCursorPos( &pointCursor );
pMenu->GetSubMenu(0)->TrackPopupMenu(TPM_BOTTOMALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON,pointCursor.x,pointCursor.y,this);
在应用此代码时,我得到以下输出
其实我需要以下菜单:
请建议我做错的地方
答案 0 :(得分:0)
TrackPopupMenu无法显示菜单栏作为其工作的一部分。菜单栏本身不会显示,因为TrackPopupMenu需要菜单,子菜单或快捷菜单的句柄。因此,如果你真的想要相同的菜单结构,包括你已经显示的菜单栏,你需要使用CMenu方法动态创建该结构。或者,只需创建一个具有不同名称的新菜单资源,其中包含菜单栏项作为子菜单。