CIMESoftKbd.cpp
资源名称:软键盘输入法原代码.rar [点击查看]
上传用户:st_laser
上传日期:2010-04-11
资源大小:5k
文件大小:19k
源码类别:
输入法编程
开发平台:
C++ Builder
- /*
- * author : yuchifang
- * email : renzhongfang@nju.org.cn
- */
- #pragma warning(disable:4786)
- #include "CIMEDebug.h"
- #include "CIMESoftKbd.h"
- #include "CIMEUIStatus.h"
- #include "CIMEUtils.h"
- //////////////////////////////////////////////////////////////////////////
- //
- // CIMESoftKbdTab Implementations
- //
- //////////////////////////////////////////////////////////////////////////
- CIMESkbTab::CIMESkbTab(const TCHAR keys[], const TCHAR shiftKeys[], LPCTSTR name)
- {
- for (int i=0; i<SOFT_KEY_COUNT; i++)
- {
- tab[i] = keys[i];
- shiftTab[i] = shiftKeys[i];
- }
- _tcsncpy(this->name, name, 10);
- this->name[9] = _T(' ');
- }
- CIMESkbTab::CIMESkbTab(const CIMESkbTab &skb)
- {
- for (int i=0; i<SOFT_KEY_COUNT; i++)
- {
- tab[i] = skb.tab[i];
- shiftTab[i] = skb.shiftTab[i];
- }
- _tcscpy(name, skb.name);
- }
- TCHAR CIMESkbTab::GetChar(int index)
- {
- assert(index>=0 && index <SOFT_KEY_COUNT);
- return tab[index];
- }
- TCHAR CIMESkbTab::GetShiftChar(int index)
- {
- assert(index>=0 && index <SOFT_KEY_COUNT);
- return shiftTab[index];
- }
- TCHAR CIMESkbTab::ConvVKey2SKBChar(UINT vKey, bool bShift)
- {
- /*
- vKey的内容分配:
- 键盘上的位置 0-9 a-z ; = , - . / ` [ ] '
- 对应的vKey位置 48-57 65-90 186 187 188 189 190 191 192 219 220 221 222
- */
- int pos = -1;
- if (vKey >= 48 && vKey <=57)
- pos = vKey - 48;
- else if (vKey >= 65 && vKey <=90)
- pos = vKey - 65 + 10; //10为前面10个数字位置
- else if (vKey >= 186 && vKey <=192)
- pos = vKey - 186 + 10 + 26; //26为26字母占的位置
- else if (vKey >= 219 && vKey <= 222)
- pos = vKey - 219 + 10 + 26 + 7; //7为前面七个;=,-./`占的位置
- if (pos == -1) return L' ';
- TCHAR ch = bShift ? shiftTab[pos] : tab[pos];
- if (ch == L' ')
- return L' ';
- return ch;
- }
- //////////////////////////////////////////////////////////////////////////
- //
- // CIMESoftKbd Implementations
- //
- //////////////////////////////////////////////////////////////////////////
- CIMESoftKbd::CIMESoftKbd()
- {
- CIMEDebug::DebugLog(L"CIMESoftKbd::CIMESoftKbd()");
- TCHAR tabNames[][10] =
- {
- L"常用符号",
- L"标点符号",
- L"特殊符号",
- L"表格线",
- L"数字序号",
- L"数学符号",
- L"单位符号",
- L"拼音符号",
- L"注音符号",
- L"日文平假名",
- L"日文片假名",
- L"希腊字母",
- L"俄文字母",
- };
- WORD wSoftKBDDatas[][2][SOFT_KEY_COUNT] =
- {
- /*
- {//正常的键盘
- {
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
- 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
- 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
- 'u', 'v', 'w', 'x', 'y', 'z', ';', '=', ',', '-',
- '.', '/', '`', '[', '\', ']', '''
- },
- {
- ')', '!', '@', '#', '$', '%', '^', '&', '*', '(',
- 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
- 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
- 'U', 'V', 'W', 'X', 'Y', 'Z', ':', '+', '<', '_',
- '>', '?', '~', '{', '|', '}', '"'
- }
- },
- */
- {//#常用符号
- {//下档键(没按住shift)
- _T('⑽'), _T('⑴'), _T('⑵'), _T('⑶'), _T('⑷'), _T('⑸'), _T('⑹'), _T('⑺'), _T('⑻'), _T('⑼'),
- _T('■'), _T('α'), _T('∑'), _T('▲'), _T('⒊'), _T('●'), _T('★'), _T('【'), _T('⒏'), _T('】'),
- _T('『'), _T('‘'), _T('γ'), _T('β'), _T('⒐'), _T('⒑'), _T('⒈'), _T('⒋'), _T('◆'), _T('⒌'),
- _T('⒎'), _T('§'), _T('⒉'), _T('‰'), _T('⒍'), _T('$'), _T(';'), _T('='), _T(','), _T('-'),
- _T('。'), _T('/'), _T('`'), _T('['), _T('、'), _T(']'), _T('’')
- },
- {//下档键(按住shift)
- _T('㈩'), _T('㈠'), _T('㈡'), _T('㈢'), _T('㈣'), _T('㈤'), _T('㈥'), _T('㈦'), _T('㈧'), _T('㈨'),
- _T('□'), _T('±'), _T('∏'), _T('△'), _T('Ⅲ'), _T('○'), _T('☆'), _T('〖'), _T('Ⅷ'), _T('〗'),
- _T('』'), _T('“'), _T('÷'), _T('×'), _T('Ⅸ'), _T('Ⅹ'), _T('Ⅰ'), _T('Ⅳ'), _T('◇'), _T('Ⅴ'),
- _T('Ⅶ'), _T('※'), _T('Ⅱ'), _T('℃'), _T('Ⅵ'), _T('¥'), _T(':'), _T('+'), _T('《'), _T('_'),
- _T('》'), _T('?'), _T('~'), _T('{'), _T('?'), _T('}'), _T('”')
- }
- },
- {//#标点符号
- {//下档键(没按住shift)
- _T('ˉ'), _T(','), _T('、'), _T(';'), _T(':'), _T('?'), _T('!'), _T('…'), _T('—'), _T('·'),
- _T('〔'), _T('('), _T('【'), _T('〈'), _T('“'), _T('〉'), _T('《'), _T('》'), _T('∶'), _T('「'),
- _T('」'), _T('『'), _T('['), _T(')'), _T('"'), _T('''), _T('‘'), _T('”'), _T('〕'), _T('々'),
- _T('‖'), _T('】'), _T('’'), _T('〗'), _T('~'), _T('〖'), _T('』'), _T('¨'), _T(']'), _T('ˇ'),
- _T('{'), _T('}'), _T('。'), _T('`'), _T('〃'), _T('|'), _T('.')
- },
- {//下档键(按住shift)
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '),
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '),
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '),
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '),
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' ')
- }
- },
- {//#特殊符号
- {//下档键(没按住shift)
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '),
- _T('■'), _T('^'), _T('@'), _T('▲'), _T('☆'), _T('※'), _T('→'), _T('←'), _T('◇'), _T('↑'),
- _T('↓'), _T('〓'), _T(' ̄'), _T('_'), _T('◆'), _T('□'), _T('§'), _T('★'), _T('△'), _T('○'),
- _T('◎'), _T('\'), _T('№'), _T('&'), _T('●'), _T('#'), _T(' '), _T(' '), _T(' '), _T(' '),
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' ')
- },
- {//下档键(按住shift)
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '),
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '),
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '),
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '),
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' ')
- }
- },
- {//#表格线
- {//下档键(没按住shift)
- _T('┄'), _T('┍'), _T('┎'), _T('┏'), _T('┐'), _T('┑'), _T('┒'), _T('┓'), _T(' '), _T('─'),
- _T('┬'), _T('╀'), _T('┾'), _T('┮'), _T('┞'), _T('┯'), _T('┰'), _T('┱'), _T('┣'), _T('┲'),
- _T('┳'), _T(' '), _T('╂'), _T('╁'), _T(' '), _T('│'), _T('├'), _T('┟'), _T('┭'), _T('┠'),
- _T('┢'), _T('┿'), _T('┝'), _T('┽'), _T('┡'), _T('┼'), _T(' '), _T(' '), _T('╃'), _T('┈'),
- _T(' '), _T(' '), _T('┌'), _T('┆'), _T(' '), _T('┊'), _T(' ')
- },
- {//下档键(按住shift)
- _T('┅'), _T('┕'), _T('┖'), _T('┗'), _T('┘'), _T('┙'), _T('┚'), _T('┛'), _T(' '), _T('━'),
- _T('┴'), _T('╈'), _T('┶'), _T('┶'), _T('┦'), _T('┷'), _T('┸'), _T('┹'), _T('┫'), _T('┺'),
- _T('┻'), _T(' '), _T('╊'), _T('╉'), _T(' '), _T('┃'), _T('┤'), _T('┧'), _T('┵'), _T('┨'),
- _T('┪'), _T('╇'), _T('┥'), _T('╅'), _T('┩'), _T('╄'), _T(' '), _T(' '), _T('╋'), _T('┉'),
- _T(' '), _T(' '), _T('└'), _T('┇'), _T(' '), _T('┋'), _T(' ')
- }
- },
- {//#数字序号
- {//下档键(没按住shift)
- _T('Ⅺ'), _T('Ⅱ'), _T('Ⅲ'), _T('Ⅳ'), _T('Ⅴ'), _T('Ⅵ'), _T('Ⅶ'), _T('Ⅷ'), _T('Ⅸ'), _T('Ⅹ'),
- _T('㈠'), _T('⑸'), _T('⑶'), _T('㈢'), _T('⒊'), _T('㈣'), _T('㈤'), _T('㈥'), _T('⒏'), _T('㈦'),
- _T('㈧'), _T('㈨'), _T('⑺'), _T('⑹'), _T('⒐'), _T('⒑'), _T('⒈'), _T('⒋'), _T('㈡'), _T('⒌'),
- _T('⒎'), _T('⑷'), _T('⒉'), _T('⑵'), _T('⒍'), _T('⑴'), _T('㈩'), _T(' '), _T('⑻'), _T('Ⅻ'),
- _T('⑼'), _T('⑽'), _T('Ⅰ'), _T(' '), _T(' '), _T(' '), _T(' ')
- },
- {//下档键(按住shift)
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '),
- _T('①'), _T('⒂'), _T('⒀'), _T('③'), _T('⒔'), _T('④'), _T('⑤'), _T('⑥'), _T('⒙'), _T('⑦'),
- _T('⑧'), _T('⑨'), _T('⒄'), _T('⒃'), _T('⒚'), _T('⒛'), _T('⒒'), _T('⒕'), _T('②'), _T('⒖'),
- _T('⒘'), _T('⒁'), _T('⒓'), _T('⑿'), _T('⒗'), _T('⑾'), _T('⑩'), _T(' '), _T('⒅'), _T(' '),
- _T('⒆'), _T('⒇'), _T(' '), _T(' '), _T(' '), _T(' '), _T(' ')
- }
- },
- {//#数学符号
- {//下档键(没按住shift)
- _T(' '), _T('≡'), _T('≠'), _T('='), _T('≤'), _T('≥'), _T('<'), _T('>'), _T('≮'), _T('≯'),
- _T('∧'), _T('⊙'), _T('∠'), _T('∑'), _T('-'), _T('∏'), _T('∪'), _T('∩'), _T('∫'), _T('∈'),
- _T(' '), _T('∵'), _T('∽'), _T('≌'), _T('∮'), _T('∝'), _T('±'), _T('×'), _T('∨'), _T('÷'),
- _T(' '), _T('⌒'), _T('+'), _T('∥'), _T('/'), _T('⊥'), _T('∴'), _T(' '), _T(' '), _T('∷'),
- _T('√'), _T(' '), _T('≈'), _T('∞'), _T(' '), _T(' '), _T(' ')
- },
- {//下档键(按住shift)
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '),
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '),
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '),
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '),
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' ')
- }
- },
- {//#单位符号
- {//下档键(没按住shift)
- _T('¤'), _T('°'), _T('′'), _T('″'), _T('$'), _T('£'), _T('¥'), _T('‰'), _T('%'), _T('℃'),
- _T('百'), _T(' '), _T('毫'), _T('万'), _T('二'), _T('亿'), _T('兆'), _T('吉'), _T('七'), _T('太'),
- _T('拍'), _T('艾'), _T(' '), _T(' '), _T('八'), _T('九'), _T('○'), _T('三'), _T('千'), _T('四'),
- _T('六'), _T('微'), _T('一'), _T('厘'), _T('五'), _T('分'), _T(' '), _T(' '), _T(' '), _T('¢'),
- _T(' '), _T(' '), _T(' '), _T('十'), _T(' '), _T(' '), _T(' ')
- },
- {//下档键(按住shift)
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '),
- _T('佰'), _T(' '), _T(' '), _T(' '), _T('贰'), _T(' '), _T(' '), _T(' '), _T('柒'), _T(' '),
- _T(' '), _T(' '), _T(' '), _T(' '), _T('捌'), _T('玖'), _T('零'), _T('叁'), _T('仟'), _T('肆'),
- _T('陆'), _T(' '), _T('壹'), _T(' '), _T('伍'), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '),
- _T(' '), _T(' '), _T(' '), _T('拾'), _T(' '), _T(' '), _T(' ')
- }
- },
- {//#拼音符号
- {//下档键(没按住shift)
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '),
- _T('ē') , _T(' '), _T('ǔ') , _T('ě') , _T('ǎ') , _T('è') , _T(' '), _T('ī') , _T('ǒ') , _T('í') ,
- _T('ǐ') , _T('ì') , _T('ǘ') , _T('ǖ') , _T('ò') , _T(' '), _T('ā') , _T('à') , _T('é') , _T(' '),
- _T('ó') , _T('ù') , _T('á') , _T('ú') , _T('ō') , _T('ū') , _T(' '), _T(' '), _T('ǚ') , _T(' '),
- _T('ǜ') , _T('ü') , _T(' '), _T('ê') , _T(' '), _T(' '), _T(' ')
- },
- {//下档键(按住shift)
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '),
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '),
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '),
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '),
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' ')
- }
- },
- {//#注音符号
- {//下档键(没按住shift)
- _T('ㄦ'), _T('ㄉ'), _T(' '), _T(' '), _T('ㄓ'), _T(' '), _T(' '), _T('ㄚ'), _T('ㄞ'), _T('ㄢ'),
- _T('ㄇ'), _T('ㄖ'), _T('ㄏ'), _T('ㄎ'), _T('ㄍ'), _T('ㄑ'), _T('ㄕ'), _T('ㄘ'), _T('ㄛ'), _T('ㄨ'),
- _T('ㄜ'), _T('ㄠ'), _T('ㄩ'), _T('ㄙ'), _T('ㄟ'), _T('ㄣ'), _T('ㄆ'), _T('ㄐ'), _T('ㄋ'), _T('ㄔ'),
- _T('ㄧ'), _T('ㄒ'), _T('ㄊ'), _T(' '), _T('ㄗ'), _T('ㄈ'), _T('ㄤ'), _T(' '), _T('ㄝ'), _T(' '),
- _T('ㄡ'), _T('ㄥ'), _T(' '), _T(' '), _T(' '), _T(' '), _T(' ')
- },
- {//下档键(按住shift)
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '),
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '),
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '),
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '),
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' ')
- }
- },
- {//#日文平假名
- {//下档键(没按住shift)
- _T(' '), _T('ぃ'), _T('ぅ'), _T('ぇ'), _T('ぉ'), _T('か'), _T('き'), _T('く'), _T('け'), _T('こ'),
- _T('な'), _T('も'), _T('む'), _T('ぬ'), _T('す'), _T('ね'), _T('の'), _T('は'), _T('つ'), _T('ひ'),
- _T('ふ'), _T('へ'), _T('ゅ'), _T('ゃ'), _T('っ'), _T('て'), _T('さ'), _T('せ'), _T('に'), _T('そ'),
- _T('ち'), _T('め'), _T('し'), _T('み'), _T('た'), _T('ま'), _T('ほ'), _T(' '), _T('ょ'), _T('ん'),
- _T('ゎ'), _T('を'), _T('ぁ'), _T('と'), _T(' '), _T('ゐ'), _T('ゑ')
- },
- {//下档键(按住shift)
- _T(' '), _T('い'), _T('う'), _T('え'), _T('お'), _T('が'), _T('ぎ'), _T('ぐ'), _T('げ'), _T('ご'),
- _T('ぱ'), _T('ろ'), _T('る'), _T('ぷ'), _T('ず'), _T('ぺ'), _T('ぽ'), _T('ば'), _T('づ'), _T('び'),
- _T('ぶ'), _T('べ'), _T('ゆ'), _T('や'), _T(' '), _T('で'), _T('ざ'), _T('ぜ'), _T('ぴ'), _T('ぞ'),
- _T('ぢ'), _T('れ'), _T('じ'), _T('り'), _T('だ'), _T('ら'), _T('ぼ'), _T(' '), _T('よ'), _T(' '),
- _T('わ'), _T(' '), _T('あ'), _T('ど'), _T(' '), _T(' '), _T(' ')
- }
- },
- {//#日文片假名
- {//下档键(没按住shift)
- _T('ケ'), _T('ィ'), _T('ゥ'), _T('ヴ'), _T('ェ'), _T('ォ'), _T('カ'), _T('ヵ'), _T('キ'), _T('ク'),
- _T('ナ'), _T('モ'), _T('ム'), _T('ヌ'), _T('ス'), _T('ネ'), _T('ノ'), _T('ハ'), _T('ツ'), _T('ヒ'),
- _T('フ'), _T('ヘ'), _T('ュ'), _T('ャ'), _T('ッ'), _T('テ'), _T('サ'), _T('セ'), _T('ニ'), _T('ソ'),
- _T('チ'), _T('メ'), _T('シ'), _T('ミ'), _T('タ'), _T('マ'), _T('ホ'), _T('コ'), _T('ョ'), _T('ヶ'),
- _T('ヮ'), _T('ヲ'), _T('ァ'), _T('ト'), _T('ン'), _T('ヰ'), _T('ヱ')
- },
- {//下档键(按住shift)
- _T('ゲ'), _T('イ'), _T('ウ'), _T(' '), _T('エ'), _T('オ'), _T('ガ'), _T(' '), _T('ギ'), _T('グ'),
- _T('パ'), _T('ロ'), _T('ル'), _T('プ'), _T('ズ'), _T('ペ'), _T('ポ'), _T('バ'), _T('ヅ'), _T('ビ'),
- _T('ブ'), _T('ベ'), _T('ユ'), _T('ヤ'), _T(' '), _T('デ'), _T('ザ'), _T('ゼ'), _T('ピ'), _T('ゾ'),
- _T('ヂ'), _T('レ'), _T('ジ'), _T('リ'), _T('ダ'), _T('ラ'), _T('ボ'), _T('ゴ'), _T('ヨ'), _T(' '),
- _T('ワ'), _T(' '), _T('ア'), _T('ド'), _T(' '), _T(' '), _T(' ')
- }
- },
- {//#希腊字母
- {//下档键(没按住shift)
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '),
- _T('κ'), _T('χ'), _T('υ'), _T('μ'), _T('γ'), _T('ν'), _T('ξ'), _T('ο'), _T('θ'), _T('π'),
- _T('ρ'), _T(' '), _T('ω'), _T('ψ'), _T('ι'), _T(' '), _T('α'), _T('δ'), _T('λ'), _T('ε'),
- _T('η'), _T('φ'), _T('β'), _T('τ'), _T('ζ'), _T('σ'), _T(' '), _T(' '), _T(' '), _T(' '),
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' ')
- },
- {//下档键(按住shift)
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '),
- _T('Κ'), _T('Χ'), _T('Υ'), _T('Μ'), _T('Γ'), _T('Ν'), _T('Ξ'), _T('Ο'), _T('Θ'), _T('Π'),
- _T('Ρ'), _T(' '), _T('Ω'), _T('Ψ'), _T('Ι'), _T(' '), _T('Α'), _T('Δ'), _T('Λ'), _T('Ε'),
- _T('Η'), _T('Φ'), _T('Β'), _T('Τ'), _T('Ζ'), _T('Σ'), _T(' '), _T(' '), _T(' '), _T(' '),
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' ')
- }
- },
- {//#俄文字母
- {//下档键(没按住shift)
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '),
- _T('л'), _T('ъ'), _T('ш'), _T('н'), _T('в'), _T('о'), _T('п'), _T('р'), _T('ж'), _T('с'),
- _T('т'), _T('у'), _T('ь'), _T('ы'), _T('з'), _T('и'), _T('а'), _T('г'), _T('м'), _T('д'),
- _T('ё'), _T('щ'), _T('б'), _T('ч'), _T('е'), _T('ц'), _T('ф'), _T(' '), _T('э'), _T(' '),
- _T('ю'), _T('я'), _T(' '), _T('й'), _T(' '), _T('к'), _T('х')
- },
- {//下档键(按住shift)
- _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '), _T(' '),
- _T('Л'), _T('Ъ'), _T('Ш'), _T('Н'), _T('В'), _T('О'), _T('П'), _T('Р'), _T('Ж'), _T('С'),
- _T('Т'), _T('У'), _T('Ь'), _T('Ы'), _T('З'), _T('И'), _T('А'), _T('Г'), _T('М'), _T('Д'),
- _T('Ё'), _T('Щ'), _T('Б'), _T('Ч'), _T('Е'), _T('Ц'), _T('Ф'), _T(' '), _T('Э'), _T(' '),
- _T('Ю'), _T('Я'), _T(' '), _T('Й'), _T(' '), _T('К'), _T('Х')
- }
- }
- };
- int size = sizeof(wSoftKBDDatas) / sizeof(TCHAR) / 2 / SOFT_KEY_COUNT;
- for (int i=0; i<size; i++)
- m_tabs.push_back(CIMESkbTab(wSoftKBDDatas[i][0], wSoftKBDDatas[i][1], tabNames[i]));
- m_bSkbOpened = false;
- m_tabIndex = 0;
- }
- void CIMESoftKbd::Show()
- {
- CIMEDebug::DebugLog(L"CIMESoftKbd::Show()");
- if (!m_bSkbOpened)
- {
- m_bSkbOpened = true;
- //显示软键盘
- RECT rc;
- int w;
- int h;
- int cx = GetSystemMetrics(SM_CXSCREEN);
- int cy = GetSystemMetrics(SM_CYSCREEN);
- m_hWndSkb = ImmCreateSoftKeyboard(SOFTKEYBOARD_TYPE_C1, FindWindow(CIMEUIStatus::GetUIClassName(), NULL), 0, 0);
- ImmShowSoftKeyboard(m_hWndSkb, SW_HIDE);
- GetWindowRect(m_hWndSkb, &rc);
- w = rc.right - rc.left;
- h = rc.bottom - rc.top;
- MoveWindow(m_hWndSkb, cx / 2, cy - 2*h, w, h, TRUE);
- ShowWindow(m_hWndSkb, SW_SHOWNOACTIVATE);
- }
- //更新软键盘布局
- SOFTKBDDATA sbd;
- int i;
- for (i=0; i<256; i++)
- {
- sbd.wCode[0][i] = _T(' ');
- sbd.wCode[1][i] = _T(' ');
- }
- CIMESkbTab &skbTab = m_tabs[m_tabIndex];
- /*
- vKey的内容分配:
- 键盘上的位置 0-9 a-z ; = , - . / ` [ ] '
- 对应的vKey位置 48-57 65-90 186 187 188 189 190 191 192 219 220 221 222
- */
- int index2SoftKBDPos[SOFT_KEY_COUNT] =
- {
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, //'0'-'9'
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, //'a'-'j'
- 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, //'k'-'t'
- 85, 86, 87, 88, 89, 90, //'u'-'z'
- 186, 187, 188, 189, 190, // ; = , - .
- 191, 192, 219, 220, 221, 222 // / ` [ ] '
- };
- for (i=0; i<SOFT_KEY_COUNT; i++)
- {
- sbd.wCode[0][index2SoftKBDPos[i]] = skbTab.GetChar(i);
- sbd.wCode[1][index2SoftKBDPos[i]] = skbTab.GetShiftChar(i);
- }
- sbd.uCount = 2;
- SendMessage(m_hWndSkb, WM_IME_CONTROL, IMC_SETSOFTKBDDATA, (LPARAM)&sbd);
- CIMEDebug::DebugLog(L"Leaving CIMESoftKbd::Show() safely!");
- }
- void CIMESoftKbd::Hide()
- {
- if (!m_bSkbOpened) return;
- if(m_hWndSkb)
- {
- ImmDestroySoftKeyboard(m_hWndSkb);
- }
- m_bSkbOpened = false;
- }
- TCHAR CIMESoftKbd::GetSkbChar(UINT vk, bool bShift)
- {
- CIMEDebug::DebugLog(L"CIMESoftKbd::GetSkbChar");
- CIMEDebug::DebugLog(vk);
- return m_tabs[m_tabIndex].ConvVKey2SKBChar(vk, bShift);
- }