比这篇新的文章:
在新窗口运行HTML代码显示结果的脚本
比这篇旧的文章: Textarea的自动缩进以及Tab缩进支持
作者: 半瓶墨水, 点击1033次, 评论(0), 收藏者(0), , 打分:
所有评论,共0条:( 我也来说两句)
比这篇旧的文章: Textarea的自动缩进以及Tab缩进支持
输入法的小键盘(软键盘)类
语言: C++, 标签: 键盘 输入法 2008/10/20发布 1年前更新作者: 半瓶墨水, 点击1033次, 评论(0), 收藏者(0), , 打分:
C++语言: 输入法的小键盘(软键盘)类
001 //这是以前写的输入法的小键盘(软键盘)类
002 //就是输入法输入特殊字符时用的那个小键盘
003 //比如搜狗输入法上的小键盘按钮按下之后,就会弹出一个小键盘
004 //
005 //注意:这是多个文件合在一起了,下载打包好的文件参见相关文章链接:
006 // http://www.cnblogs.com/realfun/archive/2005/03/28/127174.html
007
008 ////////////////////////////////////////////////
009 //
010 // CIMESoftKbd.h
011
012 /*
013 * author : yuchifang(realfun)
014 * email : realfun at gmail dot com
015 */
016
017 #ifndef _IME_SOFTKBD_H_
018 #define _IME_SOFTKBD_H_
019
020 #include
021 #include
022 #include
023 #include
024 using namespace std;
025
026 const SOFT_KEY_COUNT = 47;
027
028 //表示一个软键盘布局
029 class CIMESkbTab
030 {
031 public:
032 CIMESkbTab(const TCHAR keys[], const TCHAR shiftKeys[], LPCTSTR name);
033 CIMESkbTab(const CIMESkbTab &skb);
034 TCHAR GetChar(int index);
035 TCHAR GetShiftChar(int index);
036 //转换键盘按键到软键盘字符,不存在则返回0
037 TCHAR ConvVKey2SKBChar(UINT vKey, bool bShift);
038 //获取tab名称
039 void GetName(TCHAR name[]) { _tcscpy(name, this->name); }
040 private:
041 TCHAR tab[SOFT_KEY_COUNT]; //软键盘布局
042 TCHAR shiftTab[SOFT_KEY_COUNT]; //Shift后的软键盘布局
043 TCHAR name[10]; //软键盘布局名称
044 };
045
046 //该类封装了软键盘操作
047 class CIMESoftKbd
048 {
049 public:
050 CIMESoftKbd();
051
052 //显示下一个软键盘布局
053 void ShowNext()
054 {
055 m_tabIndex = (m_tabIndex + 1) % m_tabs.size();
056 Show();
057 }
058
059 //显示前一个软键盘布局
060 void ShowPrev()
061 {
062 m_tabIndex = (m_tabIndex + m_tabs.size() - 1) % m_tabs.size();
063 Show();
064 }
065
066 //显示指定位置的软键盘布局
067 void ShowAtPos(int index)
068 {
069 m_tabIndex = abs(index) % m_tabs.size();
070 Show();
071 }
072
073 //显示并更新软键盘
074 void Show();
075
076 //隐藏软键盘
077 void Hide();
078
079 //判断软键盘是否打开
080 bool IsOpen() { return m_bSkbOpened; }
081
082 //转换键盘按键字符到软键盘字符
083 TCHAR GetSkbChar(UINT vk, bool bShift);
084
085 int GetCurrIndex() const { return m_tabIndex; }
086
087 private:
088 bool m_bSkbOpened; //软键盘是否打开
089 int m_tabIndex; //当前的软键盘编号
090 vector m_tabs; //存储所有软键盘布局信息
091 HWND m_hWndSkb; //软键盘窗口句柄
092 };
093
094 #endif//_IME_SOFTKBD_H_
095
096 ////////////////////////////////////////////////
097 //
098 // CIMESoftKbd.cpp
099
100 /*
101 * author : yuchifang(realfun)
102 * email : realfun at gmail dot com
103 */
104
105 #pragma warning(disable:4786)
106 #include "CIMEDebug.h"
107 #include "CIMESoftKbd.h"
108 #include "CIMEUIStatus.h"
109 #include "CIMEUtils.h"
110
111 //
112 // CIMESoftKbdTab Implementations
113 //
114
115 CIMESkbTab::CIMESkbTab(const TCHAR keys[], const TCHAR shiftKeys[], LPCTSTR name)
116 {
117 for (int i=0; i<SOFT_KEY_COUNT; i++)
118 {
119 tab[i] = keys[i];
120 shiftTab[i] = shiftKeys[i];
121 }
122
123 _tcsncpy(this->name, name, 10);
124 this->name[9] = _T('\0');
125 }
126
127 CIMESkbTab::CIMESkbTab(const CIMESkbTab &skb)
128 {
129 for (int i=0; i<SOFT_KEY_COUNT; i++)
130 {
131 tab[i] = skb.tab[i];
132 shiftTab[i] = skb.shiftTab[i];
133 }
134 _tcscpy(name, skb.name);
135 }
136
137 TCHAR CIMESkbTab::GetChar(int index)
138 {
139 assert(index>=0 && index <SOFT_KEY_COUNT);
140 return tab[index];
141 }
142
143 TCHAR CIMESkbTab::GetShiftChar(int index)
144 {
145 assert(index>=0 && index <SOFT_KEY_COUNT);
146 return shiftTab[index];
147 }
148
149 TCHAR CIMESkbTab::ConvVKey2SKBChar(UINT vKey, bool bShift)
150 {
151 /*
152 vKey的内容分配:
153 键盘上的位置 0-9 a-z ; = , - . / ` [ \ ] '
154 对应的vKey位置 48-57 65-90 186 187 188 189 190 191 192 219 220 221 222
155 */
156
157 int pos = -1;
158 if (vKey >= 48 && vKey <=57)
159 pos = vKey - 48;
160 else if (vKey >= 65 && vKey <=90)
161 pos = vKey - 65 + 10; //10为前面10个数字位置
162 else if (vKey >= 186 && vKey <=192)
163 pos = vKey - 186 + 10 + 26; //26为26字母占的位置
164 else if (vKey >= 219 && vKey <= 222)
165 pos = vKey - 219 + 10 + 26 + 7; //7为前面七个;=,-./`占的位置
166
167 if (pos == -1) return L'\0';
168 TCHAR ch = bShift ? shiftTab[pos] : tab[pos];
169 if (ch == L' ')
170 return L'\0';
171 return ch;
172 }
173
174
175 //
176 // CIMESoftKbd Implementations
177 //
178
179 CIMESoftKbd::CIMESoftKbd()
180 {
181 CIMEDebug::DebugLog(L"CIMESoftKbd::CIMESoftKbd()");
182
183 TCHAR tabNames[][10] =
184 {
185 L"常用符号", L"标点符号", L"特殊符号", L"表格线",
186 L"数字序号", L"数学符号", L"单位符号", L"拼音符号",
187 L"注音符号", L"日文平假名", L"日文片假名", L"希腊字母",
188 L"俄文字母",
189 };
190
191 WORD wSoftKBDDatas[][2][SOFT_KEY_COUNT] =
192 {
193 /*
194 {//正常的键盘
195 {
196 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
197 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
198 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
199 'u', 'v', 'w', 'x', 'y', 'z', ';', '=', ',', '-',
200 '.', '/', '`', '[', '\\', ']', '\''
201 },
202 {
203 ')', '!', '@', '#', '$', '%', '^', '&', '*', '(',
204 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
205 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
206 'U', 'V', 'W', 'X', 'Y', 'Z', ':', '+', '<', '_',
207 '>', '?', '~', '{', '|', '}', '"'
208 }
209 },
210 */
211
212 {//#常用符号
213 {//下档键(没按住shift)
214 L'⑽', L'⑴', L'⑵', L'⑶', L'⑷', L'⑸', L'⑹', L'⑺', L'⑻', L'⑼',
215 L'■', L'α', L'∑', L'▲', L'⒊', L'●', L'★', L'【', L'⒏', L'】',
216 L'『', L'‘', L'γ', L'β', L'⒐', L'⒑', L'⒈', L'⒋', L'◆', L'⒌',
217 L'⒎', L'§', L'⒉', L'‰', L'⒍', L'$', L';', L'=', L',', L'-',
218 L'。', L'/', L'`', L'[', L'、', L']', L'’'
219 },
220 {//下档键(按住shift)
221 L'㈩', L'㈠', L'㈡', L'㈢', L'㈣', L'㈤', L'㈥', L'㈦', L'㈧', L'㈨',
222 L'□', L'±', L'∏', L'△', L'Ⅲ', L'○', L'☆', L'〖', L'Ⅷ', L'〗',
223 L'』', L'“', L'÷', L'×', L'Ⅸ', L'Ⅹ', L'Ⅰ', L'Ⅳ', L'◇', L'Ⅴ',
224 L'Ⅶ', L'※', L'Ⅱ', L'℃', L'Ⅵ', L'¥', L':', L'+', L'《', L'_',
225 L'》', L'?', L'~', L'{', L'?', L'}', L'”'
226 }
227 },
228 //下同,略过了
229 };
230
231 int size = sizeof(wSoftKBDDatas) / sizeof(TCHAR) / 2 / SOFT_KEY_COUNT;
232 for (int i=0; i<size; i++)
233 m_tabs.push_back(CIMESkbTab(wSoftKBDDatas[i][0], wSoftKBDDatas[i][1], tabNames[i]));
234 m_bSkbOpened = false;
235 m_tabIndex = 0;
236 }
237
238 void CIMESoftKbd::Show()
239 {
240 CIMEDebug::DebugLog(L"CIMESoftKbd::Show()");
241
242 if (!m_bSkbOpened)
243 {
244 m_bSkbOpened = true;
245 //显示软键盘
246 RECT rc;
247 int w;
248 int h;
249 int cx = GetSystemMetrics(SM_CXSCREEN);
250 int cy = GetSystemMetrics(SM_CYSCREEN);
251 m_hWndSkb = ImmCreateSoftKeyboard(SOFTKEYBOARD_TYPE_C1, FindWindow(CIMEUIStatus::GetUIClassName(), NULL), 0, 0);
252 ImmShowSoftKeyboard(m_hWndSkb, SW_HIDE);
253 GetWindowRect(m_hWndSkb, &rc);
254 w = rc.right - rc.left;
255 h = rc.bottom - rc.top;
256 MoveWindow(m_hWndSkb, cx / 2, cy - 2*h, w, h, TRUE);
257 ShowWindow(m_hWndSkb, SW_SHOWNOACTIVATE);
258 }
259
260 //更新软键盘布局
261 SOFTKBDDATA sbd;
262 int i;
263 for (i=0; i<256; i++)
264 {
265 sbd.wCode[0][i] = _T(' ');
266 sbd.wCode[1][i] = _T(' ');
267 }
268 CIMESkbTab &skbTab = m_tabs[m_tabIndex];
269
270 /*
271 vKey的内容分配:
272 键盘上的位置 0-9 a-z ; = , - . / ` [ \ ] '
273 对应的vKey位置 48-57 65-90 186 187 188 189 190 191 192 219 220 221 222
274 */
275 int index2SoftKBDPos[SOFT_KEY_COUNT] =
276 {
277 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, //'0'-'9'
278 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, //'a'-'j'
279 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, //'k'-'t'
280 85, 86, 87, 88, 89, 90, //'u'-'z'
281 186, 187, 188, 189, 190, // ; = , - .
282 191, 192, 219, 220, 221, 222 // / ` [ \ ] '
283 };
284
285 for (i=0; i<SOFT_KEY_COUNT; i++)
286 {
287 sbd.wCode[0][index2SoftKBDPos[i]] = skbTab.GetChar(i);
288 sbd.wCode[1][index2SoftKBDPos[i]] = skbTab.GetShiftChar(i);
289 }
290
291 sbd.uCount = 2;
292 SendMessage(m_hWndSkb, WM_IME_CONTROL, IMC_SETSOFTKBDDATA, (LPARAM)&sbd);
293 CIMEDebug::DebugLog(L"Leaving CIMESoftKbd::Show() safely!");
294 }
295
296 void CIMESoftKbd::Hide()
297 {
298 if (!m_bSkbOpened) return;
299
300 if(m_hWndSkb)
301 {
302 ImmDestroySoftKeyboard(m_hWndSkb);
303 }
304 m_bSkbOpened = false;
305 }
306
307 TCHAR CIMESoftKbd::GetSkbChar(UINT vk, bool bShift)
308 {
309 CIMEDebug::DebugLog(L"CIMESoftKbd::GetSkbChar");
310 CIMEDebug::DebugLog(vk);
311
312 return m_tabs[m_tabIndex].ConvVKey2SKBChar(vk, bShift);
313 }
002 //就是输入法输入特殊字符时用的那个小键盘
003 //比如搜狗输入法上的小键盘按钮按下之后,就会弹出一个小键盘
004 //
005 //注意:这是多个文件合在一起了,下载打包好的文件参见相关文章链接:
006 // http://www.cnblogs.com/realfun/archive/2005/03/28/127174.html
007
008 ////////////////////////////////////////////////
009 //
010 // CIMESoftKbd.h
011
012 /*
013 * author : yuchifang(realfun)
014 * email : realfun at gmail dot com
015 */
016
017 #ifndef _IME_SOFTKBD_H_
018 #define _IME_SOFTKBD_H_
019
020 #include
021 #include
022 #include
023 #include
024 using namespace std;
025
026 const SOFT_KEY_COUNT = 47;
027
028 //表示一个软键盘布局
029 class CIMESkbTab
030 {
031 public:
032 CIMESkbTab(const TCHAR keys[], const TCHAR shiftKeys[], LPCTSTR name);
033 CIMESkbTab(const CIMESkbTab &skb);
034 TCHAR GetChar(int index);
035 TCHAR GetShiftChar(int index);
036 //转换键盘按键到软键盘字符,不存在则返回0
037 TCHAR ConvVKey2SKBChar(UINT vKey, bool bShift);
038 //获取tab名称
039 void GetName(TCHAR name[]) { _tcscpy(name, this->name); }
040 private:
041 TCHAR tab[SOFT_KEY_COUNT]; //软键盘布局
042 TCHAR shiftTab[SOFT_KEY_COUNT]; //Shift后的软键盘布局
043 TCHAR name[10]; //软键盘布局名称
044 };
045
046 //该类封装了软键盘操作
047 class CIMESoftKbd
048 {
049 public:
050 CIMESoftKbd();
051
052 //显示下一个软键盘布局
053 void ShowNext()
054 {
055 m_tabIndex = (m_tabIndex + 1) % m_tabs.size();
056 Show();
057 }
058
059 //显示前一个软键盘布局
060 void ShowPrev()
061 {
062 m_tabIndex = (m_tabIndex + m_tabs.size() - 1) % m_tabs.size();
063 Show();
064 }
065
066 //显示指定位置的软键盘布局
067 void ShowAtPos(int index)
068 {
069 m_tabIndex = abs(index) % m_tabs.size();
070 Show();
071 }
072
073 //显示并更新软键盘
074 void Show();
075
076 //隐藏软键盘
077 void Hide();
078
079 //判断软键盘是否打开
080 bool IsOpen() { return m_bSkbOpened; }
081
082 //转换键盘按键字符到软键盘字符
083 TCHAR GetSkbChar(UINT vk, bool bShift);
084
085 int GetCurrIndex() const { return m_tabIndex; }
086
087 private:
088 bool m_bSkbOpened; //软键盘是否打开
089 int m_tabIndex; //当前的软键盘编号
090 vector m_tabs; //存储所有软键盘布局信息
091 HWND m_hWndSkb; //软键盘窗口句柄
092 };
093
094 #endif//_IME_SOFTKBD_H_
095
096 ////////////////////////////////////////////////
097 //
098 // CIMESoftKbd.cpp
099
100 /*
101 * author : yuchifang(realfun)
102 * email : realfun at gmail dot com
103 */
104
105 #pragma warning(disable:4786)
106 #include "CIMEDebug.h"
107 #include "CIMESoftKbd.h"
108 #include "CIMEUIStatus.h"
109 #include "CIMEUtils.h"
110
111 //
112 // CIMESoftKbdTab Implementations
113 //
114
115 CIMESkbTab::CIMESkbTab(const TCHAR keys[], const TCHAR shiftKeys[], LPCTSTR name)
116 {
117 for (int i=0; i<SOFT_KEY_COUNT; i++)
118 {
119 tab[i] = keys[i];
120 shiftTab[i] = shiftKeys[i];
121 }
122
123 _tcsncpy(this->name, name, 10);
124 this->name[9] = _T('\0');
125 }
126
127 CIMESkbTab::CIMESkbTab(const CIMESkbTab &skb)
128 {
129 for (int i=0; i<SOFT_KEY_COUNT; i++)
130 {
131 tab[i] = skb.tab[i];
132 shiftTab[i] = skb.shiftTab[i];
133 }
134 _tcscpy(name, skb.name);
135 }
136
137 TCHAR CIMESkbTab::GetChar(int index)
138 {
139 assert(index>=0 && index <SOFT_KEY_COUNT);
140 return tab[index];
141 }
142
143 TCHAR CIMESkbTab::GetShiftChar(int index)
144 {
145 assert(index>=0 && index <SOFT_KEY_COUNT);
146 return shiftTab[index];
147 }
148
149 TCHAR CIMESkbTab::ConvVKey2SKBChar(UINT vKey, bool bShift)
150 {
151 /*
152 vKey的内容分配:
153 键盘上的位置 0-9 a-z ; = , - . / ` [ \ ] '
154 对应的vKey位置 48-57 65-90 186 187 188 189 190 191 192 219 220 221 222
155 */
156
157 int pos = -1;
158 if (vKey >= 48 && vKey <=57)
159 pos = vKey - 48;
160 else if (vKey >= 65 && vKey <=90)
161 pos = vKey - 65 + 10; //10为前面10个数字位置
162 else if (vKey >= 186 && vKey <=192)
163 pos = vKey - 186 + 10 + 26; //26为26字母占的位置
164 else if (vKey >= 219 && vKey <= 222)
165 pos = vKey - 219 + 10 + 26 + 7; //7为前面七个;=,-./`占的位置
166
167 if (pos == -1) return L'\0';
168 TCHAR ch = bShift ? shiftTab[pos] : tab[pos];
169 if (ch == L' ')
170 return L'\0';
171 return ch;
172 }
173
174
175 //
176 // CIMESoftKbd Implementations
177 //
178
179 CIMESoftKbd::CIMESoftKbd()
180 {
181 CIMEDebug::DebugLog(L"CIMESoftKbd::CIMESoftKbd()");
182
183 TCHAR tabNames[][10] =
184 {
185 L"常用符号", L"标点符号", L"特殊符号", L"表格线",
186 L"数字序号", L"数学符号", L"单位符号", L"拼音符号",
187 L"注音符号", L"日文平假名", L"日文片假名", L"希腊字母",
188 L"俄文字母",
189 };
190
191 WORD wSoftKBDDatas[][2][SOFT_KEY_COUNT] =
192 {
193 /*
194 {//正常的键盘
195 {
196 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
197 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
198 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
199 'u', 'v', 'w', 'x', 'y', 'z', ';', '=', ',', '-',
200 '.', '/', '`', '[', '\\', ']', '\''
201 },
202 {
203 ')', '!', '@', '#', '$', '%', '^', '&', '*', '(',
204 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
205 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
206 'U', 'V', 'W', 'X', 'Y', 'Z', ':', '+', '<', '_',
207 '>', '?', '~', '{', '|', '}', '"'
208 }
209 },
210 */
211
212 {//#常用符号
213 {//下档键(没按住shift)
214 L'⑽', L'⑴', L'⑵', L'⑶', L'⑷', L'⑸', L'⑹', L'⑺', L'⑻', L'⑼',
215 L'■', L'α', L'∑', L'▲', L'⒊', L'●', L'★', L'【', L'⒏', L'】',
216 L'『', L'‘', L'γ', L'β', L'⒐', L'⒑', L'⒈', L'⒋', L'◆', L'⒌',
217 L'⒎', L'§', L'⒉', L'‰', L'⒍', L'$', L';', L'=', L',', L'-',
218 L'。', L'/', L'`', L'[', L'、', L']', L'’'
219 },
220 {//下档键(按住shift)
221 L'㈩', L'㈠', L'㈡', L'㈢', L'㈣', L'㈤', L'㈥', L'㈦', L'㈧', L'㈨',
222 L'□', L'±', L'∏', L'△', L'Ⅲ', L'○', L'☆', L'〖', L'Ⅷ', L'〗',
223 L'』', L'“', L'÷', L'×', L'Ⅸ', L'Ⅹ', L'Ⅰ', L'Ⅳ', L'◇', L'Ⅴ',
224 L'Ⅶ', L'※', L'Ⅱ', L'℃', L'Ⅵ', L'¥', L':', L'+', L'《', L'_',
225 L'》', L'?', L'~', L'{', L'?', L'}', L'”'
226 }
227 },
228 //下同,略过了
229 };
230
231 int size = sizeof(wSoftKBDDatas) / sizeof(TCHAR) / 2 / SOFT_KEY_COUNT;
232 for (int i=0; i<size; i++)
233 m_tabs.push_back(CIMESkbTab(wSoftKBDDatas[i][0], wSoftKBDDatas[i][1], tabNames[i]));
234 m_bSkbOpened = false;
235 m_tabIndex = 0;
236 }
237
238 void CIMESoftKbd::Show()
239 {
240 CIMEDebug::DebugLog(L"CIMESoftKbd::Show()");
241
242 if (!m_bSkbOpened)
243 {
244 m_bSkbOpened = true;
245 //显示软键盘
246 RECT rc;
247 int w;
248 int h;
249 int cx = GetSystemMetrics(SM_CXSCREEN);
250 int cy = GetSystemMetrics(SM_CYSCREEN);
251 m_hWndSkb = ImmCreateSoftKeyboard(SOFTKEYBOARD_TYPE_C1, FindWindow(CIMEUIStatus::GetUIClassName(), NULL), 0, 0);
252 ImmShowSoftKeyboard(m_hWndSkb, SW_HIDE);
253 GetWindowRect(m_hWndSkb, &rc);
254 w = rc.right - rc.left;
255 h = rc.bottom - rc.top;
256 MoveWindow(m_hWndSkb, cx / 2, cy - 2*h, w, h, TRUE);
257 ShowWindow(m_hWndSkb, SW_SHOWNOACTIVATE);
258 }
259
260 //更新软键盘布局
261 SOFTKBDDATA sbd;
262 int i;
263 for (i=0; i<256; i++)
264 {
265 sbd.wCode[0][i] = _T(' ');
266 sbd.wCode[1][i] = _T(' ');
267 }
268 CIMESkbTab &skbTab = m_tabs[m_tabIndex];
269
270 /*
271 vKey的内容分配:
272 键盘上的位置 0-9 a-z ; = , - . / ` [ \ ] '
273 对应的vKey位置 48-57 65-90 186 187 188 189 190 191 192 219 220 221 222
274 */
275 int index2SoftKBDPos[SOFT_KEY_COUNT] =
276 {
277 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, //'0'-'9'
278 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, //'a'-'j'
279 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, //'k'-'t'
280 85, 86, 87, 88, 89, 90, //'u'-'z'
281 186, 187, 188, 189, 190, // ; = , - .
282 191, 192, 219, 220, 221, 222 // / ` [ \ ] '
283 };
284
285 for (i=0; i<SOFT_KEY_COUNT; i++)
286 {
287 sbd.wCode[0][index2SoftKBDPos[i]] = skbTab.GetChar(i);
288 sbd.wCode[1][index2SoftKBDPos[i]] = skbTab.GetShiftChar(i);
289 }
290
291 sbd.uCount = 2;
292 SendMessage(m_hWndSkb, WM_IME_CONTROL, IMC_SETSOFTKBDDATA, (LPARAM)&sbd);
293 CIMEDebug::DebugLog(L"Leaving CIMESoftKbd::Show() safely!");
294 }
295
296 void CIMESoftKbd::Hide()
297 {
298 if (!m_bSkbOpened) return;
299
300 if(m_hWndSkb)
301 {
302 ImmDestroySoftKeyboard(m_hWndSkb);
303 }
304 m_bSkbOpened = false;
305 }
306
307 TCHAR CIMESoftKbd::GetSkbChar(UINT vk, bool bShift)
308 {
309 CIMEDebug::DebugLog(L"CIMESoftKbd::GetSkbChar");
310 CIMEDebug::DebugLog(vk);
311
312 return m_tabs[m_tabIndex].ConvVKey2SKBChar(vk, bShift);
313 }
所有评论,共0条:( 我也来说两句)
代码
