VC++のwindowsフォームアプリケーションでスクリーンキーボードを作っていて、
キーボードのウィンドウを非アクティブ化のやり方がわからないのです。
どうすればいいのでしょうか??
どういう場面で非アクティブ可したいのか何も書いていないので返答がし辛(づら)いのと
あなたがいう非アクティブ化とはどういうことなのかも推測できないので返事ができません
あなたがやりたいことを他人が読んで判るように書いてくださいね
スクリーンキーボードは普通のアプリケーションですか?
スクリーンキーボードを非アクティブ化するとはどういうことになればいいのですか?
非アクティブ化した後、アクティブ化することはありますか?
非アクティブ化するのは何か操作(ボタンがあるとか、特定のキー操作を行うとか)が
あるのですか?
すいません
スクリーンキーボードは普通のアプリケーションです
キーボードにはボタンを配置していて
ボタンをクリックすると文字が表示されるというように作っています。
現状ではキーボードと同じウィンドウの中にテキストボックスを作り文字を表示してい
ますが、別のウィンドウの入力フォームにクリックした文字を表示したいと考えていま
す。
別のウィンドウとはアクティブな状態にあるウィンドウです。
この際に、スクリーンキーボードを常に非アクティブな状態にしておく必要があるので
すがそのやり方がわかりません。
むずかしいことをw
①GetEnumWindowやGetWindowなどを駆使して(自分以外の)トップレベルウィンドウの
ハンドル取得
②トップレベルウィンドウの子ウインドウを列挙してエディットボックスをサーチ
③エディットボックスのハンドルへSetWindowTextとか。。。
②の方法は知りません。悪しからず。
ちがった。
非アクティブとは、単に対象アプリへフォーカス移すだけじゃないの?
「スクリーンキーボード」がどんなウインドウかにもよりますが
ダイアログならシステムモーダルにでもして文字送ったらフォーカス移す。
で行ける気がします。
>別のウィンドウとはアクティブな状態にあるウィンドウです。
>この際に、スクリーンキーボードを常に非アクティブな状態にしておく必要があるので
>すがそのやり方がわかりません。
この辺の事情が飲み込めません
又、あなたのソフトウェアーキーボードはマウスでのクリックしか受け付けない
のですか?
キーボードのキーを押して離すという操作はどうやって回避するつもりですか?
キー入力が回避したいjから非アクティブ化したいということですか?
WM_MOUSEACTIVATEメッセージを処理
AttachThreadInput API で非アクティブを保つ
次のリンクを参考にしましょう(VBですが…)
http://homepage1.nifty.com/yasunari/VB/VB2005/ScreenKeyBoardMaking.htm
http://msdn.microsoft.com/library/ja/default.asp?
url=/library/ja/jpdllpro/html/_win32_AttachThreadInput.asp
ちょっとおくれての返事
ようするにあなたがつくっているスクリーンキーボードをクリックすると
ボタンにフォーカスがあたってアクティブなウィンドウにメッセージを
送りたいのにフォーカスはボタンにあるから送れないってこと?
わたしもななさんと同じようなことをしていてそこでつまづいています。
> ボタンにフォーカスがあたってアクティブなウィンドウにメッセージを
> 送りたいのにフォーカスはボタンにあるから送れないってこと?
ん?
別にメッセージにこだわらなくてもいいんじゃないですか。
フラグをタイマーループで監視するとか、専用のスレッドを作って
イベントをまつとか.......