CVirtualKeyboardWnd.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. // 辅助功能
  52. void ToggleShift();
  53. void ToggleCtrl();
  54. void SwitchNumSymbolLayout();
  55. void UpdateLetterButtonsText();
  56. void UpdateModifierButtonsState();
  57. void UpdateTargetWindow();
  58. HWND GetTargetWindow();
  59. void RestoreTargetWindow();
  60. void OpenHandwritingPanel();
  61. private:
  62. bool m_bIsShiftDown; // Shift是否按下
  63. bool m_bIsCtrlDown; // Ctrl是否按下
  64. bool m_bIsNumSymbol; // 数字/符号布局状态
  65. HWND m_hTargetWnd; // 当前输入目标
  66. };
  67. // 外部创建接口
  68. HWND CreateVirtualKeyboard();