Last Updated 2003/04/25
Visual C++ MFC キーボード
ソフトウェアキーボード
2003/04/25

ソフトウェアキーボードを実現する注意点を以下にあげる.

WM_MOUSEACTIVEATE に対して MA_NOACTIVATEANDEAT を返す.
これでマウスイベントに対しアクティブにならなくなる.
(しかし,アクティブだったウィンドウは非アクティブになる)

アクティブウィンドウに対して,常にソフトウェアキーボードのスレッドをアタッチする.
    i = GetWindowThreadProcessId( GetForegroundWindow , null );
    AttachThreadInput(ソフトキーボードのスレッドID, i, True);
ソフトウェアキーボードをクリックした時にアクティブだったウィンドウはアクティブのままになる.

でも,ソフトウェアキーボードのキー(ボタン)を押下した時にボタンは凹まない.
(MA_NOACTIVATEANDEAT を返すため,マウスクリックのメッセージが送られない)

WM_MOUSEACTIVATE の wParam lParam を使用してイベントを処理する
WM_MOUSEACTIVEATE に対して MA_NOACTIVATE を返す.
これでボタンはクリックイベントを受信する.
ボタンがフォーカスを受け取ってしまうと,ソフトウェアキーボードがアクティブになってしまうので,その考慮は必要である.


参照
前後のTips
ソフトウェアキーボード

DSS ProgrammingTipsCGI Ver1.02