wince6.0输入法状态栏如何默认设置为英文
wince6.0系统 加了全拼输入法之后,系统会在很多地方进去就以全拼中文的形式,可以通过点语言状态栏点"中"会切换到英文,想让系统默认就是英文的形式,请问问大家这个该怎么做,我尝试改过注册表都没能实现
现在好多在CE下做开发的都不使用CE的界面,所以也无法使用系统提供的输入法切换的功能。
如何自己枚举输入法,显示在自己应用的界面中,供用户选择呢?
以前在CE5下研究过一段时间相关的东东,分享出来大家一起学习。以求有抛砖引玉的作用,小心哦,不要被砖拍到,嘿嘿...
主要是下面这个类,一个.h文件:
[cpp] view plaincopyprint?
01./****************************************************************************
02.* Copyright (C), 2006, Leo.Zheng
03.* File name: InputOper.h
04.* Description: CE 5.0 输入法列表的获得
05.* Version: Version 0.1
06.* History: Leo.Zheng created 2007-10-15
07.* ......
08.*****************************************************************************/
09.#ifndef __INPUT_OPERATION_
10.#define __INPUT_OPERATION_
11.#include "stdafx.h"
12.#include "Afx.h"
13.#include "Winreg.h"
14.#define IDBufSize 30
15.#define NameBufSize 100
16.struct InputLink
17.{
18. TCHAR tcID[IDBufSize]; //输入法代号。
19. TCHAR tcName[NameBufSize]; //输入法的说明文字。
20. InputLink* pNext;
21.};
22.class CInputLanguage
23.{
24.private:
25. InputLink *m_pILHead;
26. //
27. bool ListAllIM()
28. {
29. HKEY hPreload;
30. HKEY hLayouts;
31. DWORD cp = IDBufSize;
32. TCHAR tcLp[IDBufSize];
33. TCHAR tcLpDefault[IDBufSize];
34. CString szID;
35. CString szValueName;
36. CString szProload = "Keyboard Layout//Preload"; // 输入法顺序
37. CString szLayouts = "System//CurrentControlSet//Control//Layouts//"; // 输入法名称
38. int i = 1;
39. DWORD lpT = REG_SZ;
40. // TCHAR tcBuffer[NameBufSize] = {0};
41. DWORD dwLen = 0;
42. LONG nRetValue = 0;
43.
44. // 读默认的输入法
45. if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_CURRENT_USER,szProload,0,0,&hPreload))
46. {
47. nRetValue = RegQueryValueEx(hPreload,TEXT(""),NULL,&lpT,(LPBYTE)tcLp,&cp);
48. if(ERROR_SUCCESS == nRetValue)
49. {
50. wcscpy(tcLpDefault,tcLp);
51. }
52. }
53. // 读所有的输入法
54. szID.Format(TEXT("%s//%d"),szProload,i);
55.
56. while(ERROR_SUCCESS == RegOpenKeyEx(HKEY_CURRENT_USER,szID,0,0,&hPreload))
57. {
58. szValueName.Format(TEXT("%s"),TEXT(""));
59. // RegEnumKeyEx(hPreload,0,tcBuffer,&dwLen,NULL,NULL,NULL,NULL);
60. if(ERROR_SUCCESS == RegQueryValueEx(hPreload,szValueName,NULL,&lpT,(LPBYTE)tcLp,&cp))
61. {
62. CString szTempName;
63. szTempName = szLayouts + (LPCTSTR)(LPTSTR)tcLp;
64.
65. if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE,szTempName,0,0,&hLayouts))
66. {
67. TCHAR lpD[NameBufSize];
68. DWORD lpS = NameBufSize; // DataSize
69.
70. if(ERROR_SUCCESS == RegQueryValueEx(hLayouts,TEXT("Layout Text"),NULL,&lpT,(LPBYTE)lpD,&lpS))
71. {
72. InputLink *pOne = m_pILHead;
73. InputLink *pTwo = (InputLink *)malloc(sizeof(struct InputLink));
74.
75. wcscpy(pTwo->tcID,tcLp);
76. wcscpy(pTwo->tcName,lpD);
77. pTwo->pNext = NULL;
78. if(pOne)
79. {
80. while(pOne->pNext)
81. {
82. pOne = pOne->pNext;
83. }
84. pOne->pNext = pTwo;
85. }
86. else
87. {
88. m_pILHead = pTwo;
89. }
90. }
91. }
92. ::RegCloseKey(hLayouts);
93. }
94. &nb