フックの後処理 – プログラミング – Home

通知
すべてクリア

[解決済] フックの後処理


ドルドル
 ドルドル
(@ドルドル)
ゲスト
結合: 19年前
投稿: 96
Topic starter  

 お世話になります。VC++6.0 MFCで開発を行っています。先日からフックについて質問
させて頂いている者です。現在マウスフックとキーボードフックを行っているのですが
各フックについて2点の質問があります。

 i) マウスフックを行いデスクトップ上でマウスがクリックされた時に その座標を
DrawTextで表示させています。マウスアップ時に画面を更新させDrawTextで書かれた文
字列を消していますが、アプリなどのウィンドウ上でクリックした場合 表示はできま
すが消すことができません=> デスクトップにPostMessage()しているためです。
 デスクトップ上に表示されているすべてのウィンドウを更新するいい方法は何かあり
ませんでしょうか??EnumWindowを使うのがいいのでしょうか??

 ii) キーボードフック時で 「0」-「9」のテンキーが押されるとメッセージを表
示させているのですが イベントが2回くるのでメッセージが2回表示されてしまいま
す。2回イベントがくるのは コーディングミスでしょうか??それとも2回くるもので
それをこちらで規制すべきなのでしょうか??

 長々すいませんが ご教授よろしくお願いします。


引用未解決
トピックタグ
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

> 2回イベントがくるのは コーディングミスでしょうか??それとも2回くるもので
それをこちらで規制すべきなのでしょうか??

KeyDown と KeyUp で1回ずつ来てるんじゃない?


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

デスクトップの再描画なら
InvalidateRectやRedrawWindowでできると思うけど
画面がちらつくかも。

デスクトップ上に直接描いていてこれらの方法が有効なら
ブラウザ上で動くフラッシュなど再描画が頻繁に起こる
場所にはうまく描画できないかもしれません。

ii)については発生しているイベントが同じものなんでしょうか。
もしかしたらイベントが発生しているウインドウの方が違うのかも??


返信引用
ドルドル
 ドルドル
(@ドルドル)
ゲスト
結合: 19年前
投稿: 96
Topic starter  

シャノンさん。subaruさん。ご解説ありがとうございます。
1点、私の質問に間違いがありました。
>マウスがクリックされた その座標をDrawTextで表示させています。
DrawText() ⇒ TextOut()です。自作メソッド名を書いてしまいました。

>KeyDown と KeyUp で1回ずつ来てるんじゃない?
 まさしくその通りでした。きちんとKeyDownとKeyUpの判別をしてやれば 問題なく対
処できました。

>デスクトップの再描画ならInvalidateRectやRedrawWindowでできると・・・
 たしかにデスクトップの再描画はできますが、それだとデスクトップ上に表示されて
いるウィンドウは再描画されないのです。私の行いたい処理は 
 デスクトップの再描画 + デスクトップに表示されているウィンドウすべての再描画
といった感じです。私の説明不足で申し訳ありませんでした。これは EnumWindow()使
うのが一番早いのでしょうかね・・・??


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

> デスクトップの再描画 + デスクトップに表示されているウィンドウすべての再描画
>といった感じです。
InvalidateRectはAPIの方です。
RedrawWindowならRDW_ALLCHILDRENフラグを含めてください。


返信引用
ドルドル
 ドルドル
(@ドルドル)
ゲスト
結合: 19年前
投稿: 96
Topic starter  

subaruさん。ありがとうございます。
RedrawWindow()を用いて画面の再描画ができ、TextOut()で描いた座標値もきれい消す
ことができました。これでかなり作業が進みました。ありがとうございます。
 また 何かありましたらよろしくお願いします。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました