系统托盘菜单错误MFC

时间:2014-03-26 07:00:32

标签: c++ visual-c++ mfc

我正在制作一个应用程序,按下按钮后会将对话框作为系统托盘图标。它工作正常,但我还需要打开与右键单击对话框相同的菜单,并编写如下代码:

CMenu pMenu;
pMenu.LoadMenu(IDR_MENU1);
POINT pointCursor;   
::GetCursorPos( &pointCursor );   
pMenu.TrackPopupMenu(TPM_BOTTOMALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON, pointCursor.x, pointCursor.y, this);

正在创建菜单,但菜单的宽度非常薄,如下所示:(黄色突出显示的区域是菜单

enter image description here

如果我只添加主菜单的第一个子菜单,那么它可以正常使用以下代码:

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

在应用此代码时,我得到以下输出

enter image description here

其实我需要以下菜单:

enter image description here 请建议我做错的地方

1 个答案:

答案 0 :(得分:0)

TrackPopupMenu无法显示菜单栏作为其工作的一部分。菜单栏本身不会显示,因为TrackPopupMenu需要菜单,子菜单或快捷菜单的句柄。因此,如果你真的想要相同的菜单结构,包括你已经显示的菜单栏,你需要使用CMenu方法动态创建该结构。或者,只需创建一个具有不同名称的新菜单资源,其中包含菜单栏项作为子菜单。