我在做菜单自绘时框架菜单,弹出菜单等都自绘成功了,但发现一个问题,就是在窗口最小化的情况下,在任务的程序标题上点右键,弹出的“关闭”,“还原”,“最小化”,“最大化”这些系统菜单也都被自绘了,(但是这里的自绘有些难看)在OnInitMenuPopup函数中有个参数bSysMenu表示当前菜单是否是系统菜单,但是OnInitMenu函数中没有这个参数,我如何识别当前是系统菜单而不给它加上自绘标志呢?
我在做菜单自绘时框架菜单,弹出菜单等都自绘成功了,但发现一个问题,就是在窗口最小化的情况下,在任务的程序标题上点右键,弹出的“关闭”,“还原”,“最小化”,“最大化”这些系统菜单也都被自绘了,(但是这里的自绘有些难看)在OnInitMenuPopup函数中有个参数bSysMenu表示当前菜单是否是系统菜单,但是OnInitMenu函数中没有这个参数,我如何识别当前是系统菜单而不给它加上自绘标志呢?
// special strings table entries for system commands
m_nIDTracking = ID_COMMAND_FROM_SC(nItemID);
ASSERT(m_nIDTracking >= AFX_IDS_SCFIRST &&
m_nIDTracking < AFX_IDS_SCFIRST + 31);
}系统菜单ID范围,摘自CFrameWnd::OnMenuSelect
,SetMenuInfo给非系统菜单设置一个标志,然后hook得到的菜单里GetMenuInfo判断即可
用GetMenuBarInfo函数,在OnInitMenu函数中处理: //先判断是否系统菜单
MENUBARINFO mi;
memset( &mi,0,sizeof(MENUBARINFO) );
mi.cbSize = sizeof(MENUBARINFO);
GetMenuBarInfo( pWnd->GetSafeHwnd(),OBJID_SYSMENU,0,&mi );
if( mi.hMenu == pMenu->GetSafeHmenu() )
return;