BytesLen = ImmGetConversionList(hkl[i], 0, TEXT("测"), 0, 0, GCL_REVERSECONVERSION);
运行时在watch窗口中发现BytesLen竟然为0!
如何改正?ImmGetConversionList应该怎么用?
上面的语句我把第三个选项该为了指定的字符。我不知道怎么才能从中文字符串中获取一个单字符。比如:
LPTSTR strCN = TEXT("测试");
这样声明一个变量保存"测"字?当然就是要能在ImmGetConversionList里用的那种。
输入法用的是微软拼音输入法。
三天内结贴
运行时在watch窗口中发现BytesLen竟然为0!
如何改正?ImmGetConversionList应该怎么用?
上面的语句我把第三个选项该为了指定的字符。我不知道怎么才能从中文字符串中获取一个单字符。比如:
LPTSTR strCN = TEXT("测试");
这样声明一个变量保存"测"字?当然就是要能在ImmGetConversionList里用的那种。
输入法用的是微软拼音输入法。
三天内结贴
解决方案 »
- 请问.dll是显示链接时,如何使用.dll里面的类啊
- C/S下遇到的问题
- 有关TreeCtrl的问题请教大家,问题一解决,立马散分
- 初级问题:1>程序只能有一个运行进程实例 2>开机画面
- 如何得到预处理后的文件??
- 一个小问题。有代码要在对话框显示后能执行,应该放在哪个函数中
- 谁能发给我一些关于pe文件格式的资料????[email protected]谢谢
- exe工程编译时同时会生成一个lib文件和一个exp文件,是什么原因,或者怎么解决?
- 如何获取网络连通的通知?
- FindWindow()和FindWindowEx(),,有什么区别,他们应该怎么用啊,里面参数怎么写有例子嘛
- MSG结构中的两个成员:wParam和lParam到底有什么作用啊
- 怎样让集成在IE中的工具条(类似google的工具条)安装后立即显示出来...
新建一基于对话框的工程,加入一combobox控件,增加控制变量m_cb1。加入一edit控件,增加控制变量m_edt1.对combobox,增加对CBN_SELCHANGE的映射函数OnSelchangeCombo1()。对edit1,增加对EN_SETFOCUOS的SetfocusEdit1().在对话框类头文件的public:下加入数组声明:CString lst[10];
在OnInitDialog()的return前加如下代码:
HKEY hk,hk1;
long cp=16;
char lp[15];
char a[2];
a[0]='1';
a[1]='\0';
CString str,str1;
str=".DEFAULT\\keyboard layout\\preload\\";//已装的输入法。注:win2000有所不同
str+=a;
int i=0;
while(::RegOpenKey(HKEY_USERS,str,&hk)==ERROR_SUCCESS)//打开键
{
a[0]++;//下一子键
str=".DEFAULT\\keyboard layout\\preload\\";
str+=a;
if(::RegQueryValue(hk,NULL,lp,&cp)!=ERROR_SUCCESS)//已装的输入法
MessageBox("Error");
::RegEnumKeyEx
str1="System\\CurrentControlSet\\Control\\Keyboard Layouts\\";//keyboardlayoutLayout
str1+=lp;
lst[i++]=lp;
//打开对应的keyboardlayoutLayout
if(RegOpenKey(HKEY_LOCAL_MACHINE,str1,&hk1)==ERROR_SUCCESS)
{
LPBYTE lpD=new BYTE[80];//DataValue
DWORD lpT=REG_SZ;//DataType
DWORD lpS=80; //DataSize
if(RegQueryValueEx(hk1,"Layout text",NULL,&lpT,lpD,&lpS)!=ERROR_SUCCESS)
MessageBox("Query error",(LPCTSTR)lpD);
m_cb1.AddString((LPCTSTR)lpD);
delete lpD;
}
else MessageBox("open error");
RegCloseKey(hk1);
}
::RegCloseKey(hk);
m_cb1.SetCurSel(0);
在OnSetfocusEdit1()加入如下代码:
CString temp;
temp=m_cb1.GetCurSel()!=CB_ERR?lst[m_cb1.GetCurSel()]:"00000409";
HKL hkl;
hkl=LoadKeyboardLayout(temp,KLF_ACTIVATE);//装载输入法
if(hkl==NULL) OnOK();
ActivateKeyboardLayout(hkl,KLF_SETFORPROCESS);//激活输入法
在OnSelchangeCombo1()加入如下代码:
m_edt1.SetFocus();
你那個問題我也沒見過﹐不知道這個例子對你有沒有一些借鑒的作用。