大家好:
我的环境是vs2005 windows mobile 6.0 professional 模似器是中文的windows mobile 6.0 professional。
我把系统的command bar 及sip按钮图标都隐藏了。自己来模似系统SIP按钮图标的功能。以弹出菜单的形式列出系统中可用的输入法,以便可以选择输入法:
// 系统可用的输入法
std::map<int,IMENUMINFO> m_gmapIM;
int CGM_SipEnumIMProc(IMENUMINFO *pIMInfo)
{
int nIndex = m_gmapCGMIM.size();
m_gmapIM[nIndex + 1] = *pIMInfo;
return 1;
}
// 弹出菜单---显示系统可用的输入法
void CMYWnd::OnImOptionClick()
{
m_gmapIM.clear();
SipEnumIM(CGM_SipEnumIMProc);
CLSID CurrSip;
if (!SipGetCurrentIM(&CurrSip))
return;
// 菜单
CMenu menu;
menu.CreatePopupMenu();
std::map<int,IMENUMINFO>::iterator iter = m_gmapIM.begin();
for (; iter != m_gmapIM.end(); ++iter)
{
UINT nFlags = MF_STRING;
if (memcmp(&CurrSip,&iter->second.clsid,sizeof(CLSID)) == 0)
{
nFlags |= MF_CHECKED;
}
menu.AppendMenu(nFlags,iter->first,iter->second.szName);
}
CRect rcScreen;
GetClientRect(rcScreen);
long nIndex = menu.TrackPopupMenuEx(TPM_LEFTALIGN | TPM_BOTTOMALIGN | TPM_RETURNCMD,rcScreen.top + rcScreen.Width() / 2,rcScreen.bottom - COOLTASKBAR_VIEW_HEIGHT,this,NULL);
DWORD dw = GetLastError();
if (nIndex > 0)
{
if (nIndex <= m_vecIM.size())
{
IMENUMINFO imInfo = m_vecIM.at(nIndex - 1);
if (memcmp(&CurrSip,&imInfo.clsid,sizeof(CLSID)) != 0)
SipSetCurrentIM(&imInfo.clsid);
}
}
return;
}
问题是:为什么弹出的菜单中除了当前的输入法项外其它的项都是灰的(我的模似器上用三种输入法:拼音输入,全屏手写输入,手写输入,对应弹出菜单上三个菜单项,而除拼音输入这一项外,全屏手写输入,手写输入菜单项是灰的),无法选择。
不知道原因是什么? 请教有经验的朋友们。
谢谢大家。