これら2つのメッセージング定数の違いを知りたいだけです。WndProc
ボタンを閉じるメッセージを処理するために、オーバーライドするときにメソッドでどちらを使用する必要がありますか。
2 に答える
WM_CLOSE
何らかの方法でウィンドウを閉じるように要求されるたびに、ウィンドウメッセージとして送信されます。
SC_CLOSE
WM_SYSCOMMAND
ユーザーが閉じるボタンを押すと(またはウィンドウのコントロールメニューから閉じるを選択すると)、メッセージのパラメーターとして送信されます。
どちらをリッスンするかは、傍受/処理しようとしているアクションによって決まります。
msdnによると、SC_CLOSEはWM_SYSCOMMANDメッセージのwParam値の1つです。
ユーザーがウィンドウメニュー(以前はシステムメニューまたはコントロールメニューと呼ばれていました)からコマンドを選択したとき、またはユーザーが最大化ボタン、最小化ボタン、復元ボタン、または閉じるボタンを選択したときに、ウィンドウはこのメッセージを受け取ります。
WM_CLOSEはメッセージそのものです。
ウィンドウまたはアプリケーションを終了する必要があるというシグナルとして送信されます。
したがって、ウィンドウがパラメータ値SC_CLOSEのWM_SYSCOMMANDを受信すると、ウィンドウを閉じることができます(WM_CLOSEメッセージを送信します)。
UPDATE(ユーザーにウィンドウを適切に閉じさせる場合):アプリケーションは、ユーザーが選択を確認した場合にのみ、WM_CLOSEメッセージを処理し、DestroyWindow関数を呼び出すことにより、ウィンドウを破棄する前にユーザーに確認を求めることができます。
ところで、C#を使用している場合は、FormClosing
イベントを処理してそこで作業できますか。クローズをキャンセルする必要がある場合はe.Cancel = true
、イベント引数を設定するだけです。