2012-03-20 6 views
1

私はネイティブC++とWinAPIを使ってプログラムを作っています。どのようにして、Alt + F4に影響を与えずに、またはタスクバーで閉じることなく、ウィンドウの閉じるボタンを再利用するのですか?

このプログラムには、やや永続的にしたいアプリケーションウィンドウがあります。赤いXボタンでウィンドウを閉じるのは当然のようですが、実際にはプログラムを終了したくないときに押してしまいます(これはTeamspeakで私に起こります)。だから、私は偶発的な終了を避けるために、赤いXボタンを最小化ボタンに再利用しようとしています。

しかし、私のアプリケーションでは、標準のシステムコントロールでプログラムを終了する方法がいくつかあります。私はALT + F4を許可し、タスクバーのアイコンを右クリックすると閉じます。私はWM_CLOSEとSYSCOMMAND(SC_CLOSE)のインターセプトを試みましたが、これはプログラムを終了するすべての標準的なシステムメソッドを無効にしているように見えます。

は、ウィンドウの赤いXボタンを傍受する方法がありますか?私はWindows Live Messengerがこれをしていることに気付きましたが、私はどのように考えていません。

答えて

2

ハンドルWM_NCLBUTTONDOWNメッセージをクリックして確認してください。HTCLOSEコントロール(これは赤い[X]が解決するものです)に送信されます。または、代わりにWM_NCHITTESTを処理し、戻り値を別のものに置き換えることによって、ウィンドウGUIの一部であるHTCLOSEの部分を発見できないようにします。

+0

ありがとうございました!それは正常に動作しますが、マウスアップでこれを行う方法を何らかの方法で知っていますか?これはWindows Live Messengerの機能です。 'WM_NCLBUTTONUP'は動作していないようです... – Joshua

+0

「Spy ++」で送られてきたメッセージをチェックして、正確に役立つ情報を確認するのはなぜですか? 'WM_NCLBUTTONUP'が内側のメッセージループで配送され、あなたのフックには届かない可能性がありますが、何か他に助けがあるかもしれません。そして、クローズボタンを「通常の」ボタンに変換するための 'WM_NCHITTEST'を扱う他のオプションを念頭に置いてください。 –

+0

私はSpy ++を使用しており、 'WM_NCLBUTTONUP'は現れません。私は 'WM_NCHITTEST'をインターセプトしようとしましたが、マウスが上に移動したり、最小化/最大化/閉じるボタンをクリックしたときにそのメッセージが送信されることはありません。私はほとんどのマウスの動作が 'WM_NCHITTEST'を内部的に使用するようにシステムを呼び出すと思われますが、私はこれをどのように傍受するのか分かりません。 – Joshua

関連する問題