2014-03-26 81 views
0

我正在制作一个应用程序,它会在按下某个按钮后将对话框作为系统托盘图标。它工作正常,但我也需要打开相同的菜单对话框包含右键单击并写了下面的代码:系统托盘菜单错误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 请推荐我哪里做错了

+0

问题何时发生?右键点击对话框,或者在任务栏上? – rrirower

+0

@rrirower我已经写下弹出菜单的事件右键单击。 –

+0

黄色应该显示“Open Recent User Profile”菜单项的子菜单吗?它是什么样子“如果我只添加主菜单的第一个子菜单”? – rrirower

回答

0

TrackPopupMenu无法显示菜单栏作为其工作的一部分。菜单栏本身不显示,因为TrackPopupMenu需要菜单,子菜单或快捷菜单的句柄。因此,如果您真的想要包含您所展示菜单栏的相同菜单结构,则需要使用CMenu方法动态创建该结构。或者,只需使用包含菜单栏项目的不同名称的新菜单资源作为子菜单即可。

+0

但黄色线是我的菜单,它显示子菜单,但不只显示主菜单标题,即“配置文件”,“工具”等,应该有一些方法来扩大菜单条。 –

+0

我已经尝试了你的想法创建了一个新的菜单,并将我的主菜单添加到该菜单。现在我能够得到确切的输出,但是当我最大化时,即恢复到对话框时,我的菜单并没有显示出来。如何恢复相同的菜单? –