如何在CRichEditView中得到当前系统正在使用什么输入法? 请教大家:如何在CRichEditView中得到当前系统正在使用什么输入法?谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 #include <wingdi.h> //枚举字体用char* fName="";//定义一个变量用来保存输入法信息int CALLBACK mEnumFontFamExProc(ENUMLOGFONTEX *lpelfe,NEWTEXTMETRICEX *lpntme,unsigned long FontType,long lParam)//回调函数{ strcat(fName, (char*)lpelfe->elfFullName); strcat(fName,"\r\n"); return 1; }void GetCharset()//获得输入法的函数{ HWND hW=::GetFocus(); HDC hdc=::GetDC(hW); LOGFONT lf; memset(&lf,0,sizeof(lf)); lf.lfCharSet = DEFAULT_CHARSET; //如果该值为 CHINESEBIG5_CHARSET将会列出所有字体 lf.lfFaceName[0] ='\0'; lf.lfPitchAndFamily = 0; ::EnumFontFamiliesEx(hdc,&lf,(FONTENUMPROC)mEnumFontFamExProc,0,0); MessageBox(fName);//显示字体名称 } 楼上大虾,我的意思是我想知道当前输入法的信息。比如是中文,还是ACS码。还是俄文的。我通过截WM_INPUTLANGCHANGE消息可知输入法切换的消息。但是一打开窗口时,(没人切换输入法)就不知道当前输入法了。楼上大虾,请在帮我一次 你是想得到当前的输入法是吧?我总结了一下.先用GetKeyboardLayoutName()可以轻松地得到输入法的ID然后在注册表的HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\Keyboard Layouts\里得到这个ID所对应的中文的输入法的名称.我写了两个函数:void GetLayouName()//直接调用此函数将显示出当前的输入法{ CString disp;//用来保存名称 CString ID; //用来保存ID GetKeyboardLayoutName(ID.GetBuffer(ID.GetLength())); ID.ReleaseBuffer(); disp=LoadIMEInfo2000(ID);//通过ID得到名称的函数,在下面 MessageBox(disp); //显示}CString CMydilog::LoadIMEInfo2000(CString p)//得到当前使用的输入法名称{ HKEY hk; CString str; CString value; str="System\\CurrentControlSet\\Control\\Keyboard Layouts\\";//keyboardlayoutLayout str+=p; DWORD type=REG_SZ; if(::RegOpenKey(HKEY_LOCAL_MACHINE,str,&hk)==ERROR_SUCCESS)//打开键 { LPBYTE lpD=new BYTE[80];//DataValue DWORD lpS=80; //DataSize if(RegQueryValueEx(hk,"Layout text",NULL,&type,lpD,&lpS)!=ERROR_SUCCESS) AfxMessageBox("Query error"); else { value=lpD; } delete lpD; } else AfxMessageBox("open error"); ::RegCloseKey(hk); return value;}OK了,试试看,当你运行一次GetLayouName() 就会显示出当前的输入法名称了. ie plug in 的问题 把函数转化为线程函数.发现了很多麻烦事! Access Violation 错误,怎么办呢??怎么打开调试用的cpu窗口呀??(里面还有一个问题)请大家关注 wParam参数的具体说明? MFC中鼠标响应的问题! 已知两个CTime变量,如何得到它两相差多少天!! 100分相送! 关于C++编写控件时头文件的问题 围棋为何不能用专家系统解决 刚买了侯捷的mfc连光盘68元,爽!!!! 求助:winsock,VC++6.0编程问题 一个月了这个问题大家能看看吗???
char* fName="";//定义一个变量用来保存输入法信息int CALLBACK mEnumFontFamExProc(ENUMLOGFONTEX *lpelfe,NEWTEXTMETRICEX *lpntme,unsigned long FontType,long lParam)//回调函数
{
strcat(fName, (char*)lpelfe->elfFullName);
strcat(fName,"\r\n"); return 1;
}
void GetCharset()//获得输入法的函数
{
HWND hW=::GetFocus();
HDC hdc=::GetDC(hW);
LOGFONT lf;
memset(&lf,0,sizeof(lf));
lf.lfCharSet = DEFAULT_CHARSET; //如果该值为 CHINESEBIG5_CHARSET将会列出所有字体
lf.lfFaceName[0] ='\0';
lf.lfPitchAndFamily = 0;
::EnumFontFamiliesEx(hdc,&lf,(FONTENUMPROC)mEnumFontFamExProc,0,0); MessageBox(fName);//显示字体名称
}
我通过截WM_INPUTLANGCHANGE消息可知输入法切换的消息。但是一打开窗口时,(没人切换
输入法)就不知道当前输入法了。
楼上大虾,请在帮我一次
我总结了一下.
先用GetKeyboardLayoutName()可以轻松地得到输入法的ID
然后在注册表的
HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\Keyboard Layouts\里得到这个ID所对应的中文的输入法的名称.我写了两个函数:
void GetLayouName()//直接调用此函数将显示出当前的输入法
{
CString disp;//用来保存名称
CString ID; //用来保存ID
GetKeyboardLayoutName(ID.GetBuffer(ID.GetLength()));
ID.ReleaseBuffer();
disp=LoadIMEInfo2000(ID);//通过ID得到名称的函数,在下面
MessageBox(disp); //显示
}CString CMydilog::LoadIMEInfo2000(CString p)//得到当前使用的输入法名称
{
HKEY hk;
CString str;
CString value;
str="System\\CurrentControlSet\\Control\\Keyboard Layouts\\";//keyboardlayoutLayout
str+=p;
DWORD type=REG_SZ;
if(::RegOpenKey(HKEY_LOCAL_MACHINE,str,&hk)==ERROR_SUCCESS)//打开键
{
LPBYTE lpD=new BYTE[80];//DataValue
DWORD lpS=80; //DataSize
if(RegQueryValueEx(hk,"Layout text",NULL,&type,lpD,&lpS)!=ERROR_SUCCESS)
AfxMessageBox("Query error");
else
{
value=lpD;
}
delete lpD;
}
else
AfxMessageBox("open error");
::RegCloseKey(hk);
return value;}
OK了,试试看,当你运行一次GetLayouName() 就会显示出当前的输入法名称了.