我在写托盘程序的时候发现一个奇怪的问题
我首先生成一个cmenu对象,然后加载cmenu资源,接着屏蔽一些菜单项
然后启动系统托盘,这时候显示正常(状态1)
当通过用户认证之后,我开放一些菜单项,然后屏蔽另一些菜单项,可是发现这时候的系统菜单还是原来的样子(状态1)
我的程序如下:其中m_pmenu通过setMenu指向一个全局CMenu *变量,我通过其中标示了//->的语句检查了菜单项的状态,发现状态已经更改了,这是为什么?LRESULT CSysTray::OnTrayNotification(WPARAM wID, LPARAM lEvent){
if (wID!=m_nid.uID ||
(lEvent!=WM_RBUTTONUP && lEvent!=WM_LBUTTONDBLCLK))
return 0; if( m_pmenu ){
//->int retCode = m_pmenu->GetMenuState(IDM_USER_AUTH, MF_BYCOMMAND | MF_DISABLED);
if (lEvent==WM_RBUTTONUP) { CMenu * pmenu = m_pmenu->GetSubMenu(0);
//pmenu->EnableMenuItem(0, MF_BYPOSITION | MF_ENABLED);
//pmenu->SetDefaultItem(0, TRUE); CPoint mouse;
GetCursorPos(&mouse);
::SetForegroundWindow(m_nid.hWnd);
pmenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_BOTTOMALIGN | TPM_LEFTBUTTON,
mouse.x, mouse.y, ::AfxGetMainWnd(), NULL); } else
::SendMessage(m_nid.hWnd, WM_COMMAND, m_pmenu->GetMenuItemID(0), 0);
} return 1; // handled
}
我首先生成一个cmenu对象,然后加载cmenu资源,接着屏蔽一些菜单项
然后启动系统托盘,这时候显示正常(状态1)
当通过用户认证之后,我开放一些菜单项,然后屏蔽另一些菜单项,可是发现这时候的系统菜单还是原来的样子(状态1)
我的程序如下:其中m_pmenu通过setMenu指向一个全局CMenu *变量,我通过其中标示了//->的语句检查了菜单项的状态,发现状态已经更改了,这是为什么?LRESULT CSysTray::OnTrayNotification(WPARAM wID, LPARAM lEvent){
if (wID!=m_nid.uID ||
(lEvent!=WM_RBUTTONUP && lEvent!=WM_LBUTTONDBLCLK))
return 0; if( m_pmenu ){
//->int retCode = m_pmenu->GetMenuState(IDM_USER_AUTH, MF_BYCOMMAND | MF_DISABLED);
if (lEvent==WM_RBUTTONUP) { CMenu * pmenu = m_pmenu->GetSubMenu(0);
//pmenu->EnableMenuItem(0, MF_BYPOSITION | MF_ENABLED);
//pmenu->SetDefaultItem(0, TRUE); CPoint mouse;
GetCursorPos(&mouse);
::SetForegroundWindow(m_nid.hWnd);
pmenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_BOTTOMALIGN | TPM_LEFTBUTTON,
mouse.x, mouse.y, ::AfxGetMainWnd(), NULL); } else
::SendMessage(m_nid.hWnd, WM_COMMAND, m_pmenu->GetMenuItemID(0), 0);
} return 1; // handled
}
问题解决了