none
SetCapture関数について RRS feed

  • 質問

  • VC++2010(MFC)で開発しております。

    アプリケーションのバージョン情報を表示する方法として、
    CDialogから派生したもので、タイトルバー、ボタンを表示させず、
    情報(文字)だけの表示を行っております。

    このバージョン情報ダイアログを閉じる方法として、
    ダイアログ領域内で(右or左)クリックされたときに閉じていますが、
    デスクトップ上のとこでもクリックしたときに閉じるようにしたいと思っています。

    そこで、OnInitDialog()で、SetCapture()を呼び出して、
    デスクトップ領域のどこをクリックしてもクリックインベントがバージョンダイアログ情報に来るようにしました。
    動作に問題ありませんが、気になる点としてReleaseCapture()を呼び出していません。

    ReleaseCapture()は、対象のWindowがなくなるので必要ないのでしょうか?
    教えてください。

    2019年6月17日 6:54

回答

  • 最近のWindowsは行儀の悪いプログラムに対してもかなり寛容な動作となっているため問題が起こるケースはないと思いますが、できれば、マウスイベントでウィンドウを閉じる前にReleaseCapture関数を呼び出すようにしてはいかがでしょうか。

    または、方式は異なりますが、WM_KILLFOCUSなどでフォーカスを失ったタイミングなどでウィンドウを閉じるようにしてみるのはどうでしょうか。ウィンドウを切り替えるのはマウス操作だけではありませんので。。

    • 回答としてマーク Brillia 2019年6月18日 0:18
    2019年6月17日 9:32

すべての返信

  • 最近のWindowsは行儀の悪いプログラムに対してもかなり寛容な動作となっているため問題が起こるケースはないと思いますが、できれば、マウスイベントでウィンドウを閉じる前にReleaseCapture関数を呼び出すようにしてはいかがでしょうか。

    または、方式は異なりますが、WM_KILLFOCUSなどでフォーカスを失ったタイミングなどでウィンドウを閉じるようにしてみるのはどうでしょうか。ウィンドウを切り替えるのはマウス操作だけではありませんので。。

    • 回答としてマーク Brillia 2019年6月18日 0:18
    2019年6月17日 9:32
  • ご返信ありがとうございます。

    WM_CLOSEイベントでReleaseCaptureを行います。

    >WM_KILLFOCUSなどでフォーカスを失ったタイミングなどでウィンドウを閉じるようにしてみるのはどうでしょうか。

    WM_ACTIVATEイベントを実装して、対応しています。

    ありがとうございました。

    2019年6月18日 0:18
  • 意図している場合は良いのですが、少し懸念がありますのでコメントします。

    WM_CLOSEは
     (1)システムメニューから「閉じる(C)」を選ぶか、
     (2)「×」ボタンをクリックした場合

    に受領するメッセージです。
    ウインドウが破棄されるときに必ず来るというわけではありませんのでご確認ください。


    2019年6月18日 4:52