CVirtualKeyboardWnd.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #pragma once
  2. #include "../pch/pch.h"
  3. #include "CMainWnd.h"
  4. class CVirtualKeyboardWnd : public WindowImplBase
  5. {
  6. public:
  7. CVirtualKeyboardWnd();
  8. ~CVirtualKeyboardWnd() override;
  9. // 基类虚函数
  10. virtual LPCTSTR GetWindowClassName() const override
  11. {
  12. return _T("VirtualKeyboardWnd");
  13. }
  14. virtual UINT GetClassStyle() const override
  15. {
  16. return CS_DBLCLKS;
  17. }
  18. virtual void OnFinalMessage(HWND hWnd) override
  19. {
  20. delete this;
  21. }
  22. virtual LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) override
  23. {
  24. if (uMsg == WM_MOUSEACTIVATE)
  25. {
  26. // 鼠标点击键盘时不激活窗口,返回 MA_NOACTIVATE
  27. return MA_NOACTIVATE;
  28. }
  29. if (uMsg == WM_ACTIVATE)
  30. {
  31. // 拦截激活消息,不执行默认逻辑
  32. return 0;
  33. }
  34. return __super::HandleMessage(uMsg, wParam, lParam);
  35. }
  36. virtual CDuiString GetSkinFile() override
  37. {
  38. return _T("virtual_keyboard.xml");
  39. }
  40. CDuiString GetSkinFolder()
  41. {
  42. return _T("");
  43. }
  44. virtual void InitWindow() override;
  45. virtual void Notify(TNotifyUI& msg) override;
  46. private:
  47. // 核心:模拟键盘按键
  48. void SimulateKeyPress(TCHAR ch);
  49. void SimulateSpecialKey(int vkCode);
  50. void SimulateShiftPress(bool bPress);
  51. void ToggleImeLanguageMode();
  52. // 辅助功能
  53. void ToggleShift();
  54. void ToggleCtrl();
  55. void SwitchNumSymbolLayout();
  56. void UpdateLetterButtonsText();
  57. void UpdateModifierButtonsState();
  58. void UpdateTargetWindow();
  59. HWND GetTargetWindow();
  60. void RestoreTargetWindow();
  61. void OpenHandwritingPanel();
  62. private:
  63. bool m_bIsShiftDown; // Shift是否按下
  64. bool m_bIsCtrlDown; // Ctrl是否按下
  65. bool m_bIsNumSymbol; // 数字/符号布局状态
  66. HWND m_hTargetWnd; // 当前输入目标
  67. };
  68. // 外部创建接口
  69. HWND CreateVirtualKeyboard();