| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- #pragma once
- #include "../pch/pch.h"
- #include "CMainWnd.h"
- class CVirtualKeyboardWnd : public WindowImplBase
- {
- public:
- CVirtualKeyboardWnd();
- ~CVirtualKeyboardWnd() override;
- // 基类虚函数
- virtual LPCTSTR GetWindowClassName() const override
- {
- return _T("VirtualKeyboardWnd");
- }
- virtual UINT GetClassStyle() const override
- {
- return CS_DBLCLKS;
- }
- virtual void OnFinalMessage(HWND hWnd) override
- {
- delete this;
- }
- virtual LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) override
- {
- if (uMsg == WM_MOUSEACTIVATE)
- {
- // 鼠标点击键盘时不激活窗口,返回 MA_NOACTIVATE
- return MA_NOACTIVATE;
- }
- if (uMsg == WM_ACTIVATE)
- {
- // 拦截激活消息,不执行默认逻辑
- return 0;
- }
- return __super::HandleMessage(uMsg, wParam, lParam);
- }
- virtual CDuiString GetSkinFile() override
- {
- return _T("virtual_keyboard.xml");
- }
- CDuiString GetSkinFolder()
- {
- return _T("");
- }
- virtual void InitWindow() override;
- virtual void Notify(TNotifyUI& msg) override;
- private:
- // 核心:模拟键盘按键
- void SimulateKeyPress(TCHAR ch);
- void SimulateSpecialKey(int vkCode);
- void SimulateShiftPress(bool bPress);
- void ToggleImeLanguageMode();
- // 辅助功能
- void ToggleShift();
- void ToggleCtrl();
- void SwitchNumSymbolLayout();
- void UpdateLetterButtonsText();
- void UpdateModifierButtonsState();
- void UpdateTargetWindow();
- HWND GetTargetWindow();
- void RestoreTargetWindow();
- void OpenHandwritingPanel();
- private:
- bool m_bIsShiftDown; // Shift是否按下
- bool m_bIsCtrlDown; // Ctrl是否按下
- bool m_bIsNumSymbol; // 数字/符号布局状态
- HWND m_hTargetWnd; // 当前输入目标
- };
- // 外部创建接口
- HWND CreateVirtualKeyboard();
|