CIMESoftKbd.h
上传用户:st_laser
上传日期:2010-04-11
资源大小:5k
文件大小:2k
源码类别:

输入法编程

开发平台:

C++ Builder

  1. /*
  2. * author : yuchifang(realfun)
  3. * email : renzhongfang@nju.org.cn
  4. */
  5. #ifndef _IME_SOFTKBD_H_
  6. #define _IME_SOFTKBD_H_
  7. #include <cassert>
  8. #include <tchar.h>
  9. #include <vector>
  10. #include <windows.h>
  11. using namespace std;
  12. const SOFT_KEY_COUNT = 47;
  13. //表示一个软键盘布局
  14. class CIMESkbTab
  15. {
  16. public:
  17. CIMESkbTab(const TCHAR keys[], const TCHAR shiftKeys[], LPCTSTR name);
  18. CIMESkbTab(const CIMESkbTab &skb);
  19. TCHAR GetChar(int index);
  20. TCHAR GetShiftChar(int index);
  21. //转换键盘按键到软键盘字符,不存在则返回0
  22. TCHAR ConvVKey2SKBChar(UINT vKey, bool bShift);
  23. //获取tab名称
  24. void GetName(TCHAR name[]) { _tcscpy(name, this->name); }
  25. private:
  26. TCHAR tab[SOFT_KEY_COUNT]; //软键盘布局
  27. TCHAR shiftTab[SOFT_KEY_COUNT]; //Shift后的软键盘布局
  28. TCHAR name[10]; //软键盘布局名称
  29. };
  30. //该类封装了软键盘操作
  31. class CIMESoftKbd
  32. {
  33. public:
  34. CIMESoftKbd();
  35. //显示下一个软键盘布局
  36. void ShowNext()
  37. {
  38. m_tabIndex = (m_tabIndex + 1) % m_tabs.size();
  39. Show();
  40. }
  41. //显示前一个软键盘布局
  42. void ShowPrev()
  43. {
  44. m_tabIndex = (m_tabIndex + m_tabs.size() - 1) % m_tabs.size();
  45. Show();
  46. }
  47. //显示指定位置的软键盘布局
  48. void ShowAtPos(int index)
  49. {
  50. m_tabIndex = abs(index) % m_tabs.size();
  51. Show();
  52. }
  53. //显示并更新软键盘
  54. void Show();
  55. //隐藏软键盘
  56. void Hide();
  57. //判断软键盘是否打开
  58. bool IsOpen() { return m_bSkbOpened; }
  59. //转换键盘按键字符到软键盘字符
  60. TCHAR GetSkbChar(UINT vk, bool bShift);
  61. int GetCurrIndex() const { return m_tabIndex; }
  62. private:
  63. bool m_bSkbOpened; //软键盘是否打开
  64. int m_tabIndex; //当前的软键盘编号
  65. vector<CIMESkbTab> m_tabs; //存储所有软键盘布局信息
  66. HWND m_hWndSkb; //软键盘窗口句柄
  67. };
  68. #endif//_IME_SOFTKBD_H_