注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

mie

 
 
 

日志

 
 

VC 2010 + Robbin界面的BUG:新插入的系统菜单项是灰色的  

2011-08-06 13:05:29|  分类: Windows系统BUG搜 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
        此为VC 2010 + MFC界面库的又一BUG,但不是很严重。
        VC 2010 + Robbin界面。在xp系统下,如果是先右键点击任务栏,则弹出的系统菜单是没有问题的。如果先右键点击标题栏,新插入的系统菜单项是灰色的,没有更新状态。

解决方法:

在CMainFrame中映射WM_INITMENUPOPUP消息,并修改消息处理函数。

afx_msg void OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu);

void CMainFrame::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu)
{
if (g_GetWindowsVersion()>=WINDOWS_VERSION_Vista)
{
CFrameWndEx::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);
}

}

其中,g_GetWindowsVersion的函数声明与实现,如下(此函数取自网络,我作了简单修改,以使其支持Win7 sp1系统和Windows Server 2008 r2系统):

//判断操作系统   
#ifndef _WINDOWS_VERSION_
#define _WINDOWS_VERSION_
typedef   enum   _WINDOWS_VERSION   
{   
WINDOWS_VERSION_32s, //32位系统,具体版本号不清楚
WINDOWS_VERSION_NT3,   
WINDOWS_VERSION_95,   
WINDOWS_VERSION_98,   
WINDOWS_VERSION_ME,   
WINDOWS_VERSION_NT4,   
WINDOWS_VERSION_2000,   
WINDOWS_VERSION_XP,  
WINDOWS_VERSION_2003,  
WINDOWS_VERSION_Vista,  
WINDOWS_VERSION_2008,  
WINDOWS_VERSION_2008R2_Windows7,  
WINDOWS_VERSION_WindowsNewer,   
WINDOWS_VERSION_Unknown=-1,  
}WINDOWS_VERSION;   

WINDOWS_VERSION g_GetWindowsVersion();  

#endif


函数实现:

WINDOWS_VERSION g_GetWindowsVersion()   
{
WINDOWS_VERSION   ShellType=WINDOWS_VERSION_32s;   
DWORD   winVer={0};   
OSVERSIONINFOEX   osvi={0};

winVer   =   GetVersion();   
if(winVer<0x80000000)   
{//NT   
ShellType   =   WINDOWS_VERSION_NT3;   

ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));

osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);

if( !GetVersionEx ((OSVERSIONINFO *) &osvi) )
{
osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) ) 
return WINDOWS_VERSION_Unknown;
}

if(osvi.dwMajorVersion   ==   4L)   
{   
ShellType   =   WINDOWS_VERSION_NT4;   
}   
else   if((osvi.dwMajorVersion   ==   5L)   &&   (osvi.dwMinorVersion   ==   0L))   
{   
ShellType   =   WINDOWS_VERSION_2000;   
}   
else   if((osvi.dwMajorVersion   ==   5L)   &&   (osvi.dwMinorVersion   ==   1L))   
{   
ShellType   =   WINDOWS_VERSION_XP;   
}   
else   if((osvi.dwMajorVersion   ==   5L)   &&   (osvi.dwMinorVersion   ==   2L))   
{   
ShellType   =   WINDOWS_VERSION_2003;   
}   
else if((osvi.dwMajorVersion   ==   6L)   &&   (osvi.dwMinorVersion   ==   0L))   
{
if (osvi.wProductType == VER_NT_WORKSTATION)
{
ShellType   =   WINDOWS_VERSION_Vista; 
}
else
{
ShellType   =   WINDOWS_VERSION_2008; 
}
}
else if((osvi.dwMajorVersion   ==   6L)   &&   (osvi.dwMinorVersion   ==   1L))   
{
ShellType   =   WINDOWS_VERSION_2008R2_Windows7; 
}
else if((osvi.dwMajorVersion   >=   6L))   
{
ShellType   =   WINDOWS_VERSION_WindowsNewer; 
}   
else   if(LOBYTE(LOWORD(winVer))   <   4)   
{   
ShellType   =   WINDOWS_VERSION_32s;   
}   
else   
{   
ShellType   =   WINDOWS_VERSION_95;   

osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);

if( !GetVersionEx ((OSVERSIONINFO *) &osvi) )
{
osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) ) 
return WINDOWS_VERSION_Unknown;
}

if((osvi.dwMajorVersion   ==   4L)   &&   (osvi.dwMinorVersion   ==   10L))   
{   
ShellType   =   WINDOWS_VERSION_98;   
}   
else   if((osvi.dwMajorVersion   ==   4L)   &&   (osvi.dwMinorVersion   ==   90L))   
{   
ShellType   =   WINDOWS_VERSION_ME;   
}   
}   

return   ShellType;   
}   


By:章永辉
  评论这张
 
阅读(1040)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016