松雄と申します。
あるソフト(mobmeterなど)でよくマウス操作を透過させる事が
可能ですがどうやってやればいいのでしょうか?どれだけ探し
ても見つかりませんし、方法も思い付きません。
どなたかご教授お願いできませんか?
環境:WinXP、VC++6
その部分を壁紙にして、地壁紙に上書き。
内容表示を変更する時にその部分を地壁紙に上書き。
だと、駄目なのかな。
Spy++でメッセージ見てると、WS_DISABLEとWS_CLIPSIBLINGSという、スタイルを指定し
ているようです。
このあたり調べてみてはいかがでしょうか。
これだけではないのかもしれませんが。
WindowFromPointで探したウィンドウに、WM_MOUSEMOVEやWM_LBUTTONDOWN等を
渡してやればいいのだと思う。やったことないけど。
段階的にアプローチしてはいかがですか。
ダイアログにボタンを貼り付け、ボタンを押されたらメッセージボックスを
表示するだけのプログラムを作りましょう。(デフォルトのダイアログでも終了の確認が
できる)
このボタンを押すのが最初の目標です。
操作する側のプログラムはTOPMOSTにしておき、ボタンのダイアログを隠した状態でク
リックし、
(見えない)ボタンの上ならメッセージボックスを表示させる。
次は、操作される側のプログラムに手を加え、マウスがボタンの上に来たらマウスポインタを
IDC_HANDに変えてみましょう。
次は、デスクトップのアイコンを隠し、それを押せるかどうか。
ここまでできたら、多分完成しているのではないかと。
# ん?さんや、えちぜんさんは、全く違うアプローチをしていますね。
> # ん?さんや、えちぜんさんは、全く違うアプローチをしていますね。
の続きです。
ん?さんや、えちぜんさんの方法で行き詰ったらで結構ですので、
操作される側のプログラムを作ってください。
自作すれば、必要に応じてログを取ったり、ウィンドウハンドルを表示させたり、
と研究には便利でしょう。
みなさんありがとうございます。
あれからいろいろ実験してみましたが、透明ウィンドウではマウスイベントが
透過できましたが、半透明ウィンドウではできませんでした。
またこれからSPYなど利用し再度チャレンジします。
壁紙に…と発言した要因は、
デスクトップの壁紙を今のとは別の物に変更すると、mobmeterの表示物が消えた為。
# 自分はこの様な実装の実績も無いので、案として発言しました。
ごめんなさい、透明ウィンドウは本件とは全く関係ありませんでした。
透明部分しか意味ありませんでした。すっかり勘違いしておりました。
思考錯誤続行します。
ん?さん何度もありがとうございます。
しかし今回はWindowFromPointから探ろうと思います。
もう少し調べたところ
拡張スタイルに、WS_EX_TRANSPARENTを設定するとよさそうですね。
http://msdn.microsoft.com/ja-jp/library/61fe4bte(VS.80).aspx
WS_DISABLEDとWS_CLIPSIBLINGSはなくても透過はするようです。
あまり関係なかったようです。
WS_DISABLEDはウィンドウを無効に、WS_CLIPSIBLINGSはクリッピングのためにスタイル
を変えてあるようですね。
透過と書いている部分は、操作が透過すると置き換えてください。
WS_EX_TRANSPARENTを指定するとマウスイベントが下のウィンドウに透過して渡されるよ
うです。
えちぜんさん、ありがとうございます。
WS_EX_TRANSPARENTであっさり解決できました。
本当に嬉しいです。