私はMFCC++アプリケーションに取り組んでいます。SystemMenu
プロパティがに設定されているダイアログで作業していたFALSE
ため、最大化する機能がありません。タイトルバーのダブルクリックメッセージを処理したい。どうやってやるの?
編集:
今回は皆さんにわかりやすいと思います。システムメニュー(およびシステムボタンまたはアイコン)がないダイアログがあります。ユーザーがそのダイアログのタイトルバーをダブルクリックしたときに、プログラムに関数を呼び出させたいx();
。
私はMFCC++アプリケーションに取り組んでいます。SystemMenu
プロパティがに設定されているダイアログで作業していたFALSE
ため、最大化する機能がありません。タイトルバーのダブルクリックメッセージを処理したい。どうやってやるの?
編集:
今回は皆さんにわかりやすいと思います。システムメニュー(およびシステムボタンまたはアイコン)がないダイアログがあります。ユーザーがそのダイアログのタイトルバーをダブルクリックしたときに、プログラムに関数を呼び出させたいx();
。
技術的には、WM_NCLBUTTONDBLCLKを処理し、ウィンドウのキャプション領域でダブルクリックが発生したかどうかを確認する必要があります。おそらくWM_NCHITTESTを送信し、戻り値が であることをテストしますHTCAPTION
。
(更新: JohnCz が正当に指摘しているように、送信WM_NCHITTEST
は実際には必要ありません。WM_NCLBUTTONDBLCLK
その結果は既に に含まれているためですwParam
。)
次に、WM_SYSCOMMANDをウィンドウSC_MAXIMIZE
に送信wParam
して最大化するだけです。
ただし、実際には、ダイアログ ボックスがサイズ変更を処理し、それに応じてコントロールをレイアウトする準備ができていない場合、あまり効果がありません。前回チェックしたとき、この機能は MFC の標準ではありませんでした。
ここにはある種の混乱があると思います:
フレデリック・ハミディ
正解です。WM_NCLBUTTONDBLCLK メッセージの処理は正しい方法ですが、WM_NCLBUTTONDBLCLK メッセージは、MFC フレームワークが WM_NCLBUTTONDBLCLK ハンドラーで変換するヒット情報を提供するため、HitTest を呼び出す必要はありません。
ビクター、
WM_NCLBUTTONDBLCLK メッセージを処理して達成しようとしているのは、正確には何ですか?
あなたが私たちにそれを明確にしたら、あなたの要件を満たす他の方法があるかもしれません. システム メニューがないという事実は、アプリが非クライアント エリア メッセージを受信することを妨げません。