カスタマイズ通知の処理
ウィンドウのツールバーのコモン コントロールは、ユーザーがツールバー ボタンを挿入、削除、または並べ替えることができるようにする組み込みのカスタマイズ機能を、システム定義のカスタマイズ ダイアログ ボックスがあります。アプリケーションがカスタマイズ機能が使用できる確認し、ユーザーがツールバーをカスタマイズできる範囲をかどうかを制御します。
これらのカスタマイズ機能を CCS_ADJUSTABLE がスタイル ツールバーにより、ユーザーが利用できるようにできます。カスタマイズ機能は、ユーザーがボタンを新しい位置にドラッグまたはツールバーの外にドラッグすることで、ボタンを削除することができます。また、ユーザーがツールバー ボタンを追加、削除、再配置できるようにする Customize Toolbar のダイアログ ボックスを表示するにツールバーをダブルクリックできます。アプリケーションは カスタマイズ,ユーザー設定 のメンバー関数を使用してダイアログ ボックスを表示できます。
ツールバー コントロールは、カスタマイズ プロセスの各手順で親ウィンドウに通知メッセージを送信します。ユーザーがキーを押しながらボタンのドラッグを開始ツールバーは自動的にドラッグ操作を処理します。ツールバーは親ウィンドウにボタンが削除される可能性があるかどうかを確認するに TBN_QUERYDELETE の通知メッセージを送信します。ドラッグ操作は親ウィンドウが FALSEを返す終了します。マウス ボタンを離すは、ツールバーは、ユーザーのマウス入力と待機をキャプチャします。
ユーザーがマウス ボタンを離すと、ツールバー コントロールは、マウス カーソルの位置が決まります。カーソルがツールバーの外部にある場合、ボタンは削除されます。カーソルが別のツールバー ボタンにある場合は、ツールバーは親ウィンドウにボタンが特定のボタンの左側に挿入できるかどうかを確認するに TBN_QUERYINSERT の通知メッセージを送信します。ボタンが親ウィンドウが TRUEを返す挿入されます。; それ以外の場合はありません。ツールバーは、ドラッグ操作の終了を通知する TBN_TOOLBARCHANGE の通知メッセージを送信します。
ユーザーがキーを押さずにドラッグ操作を開始した場合、ツールバー コントロールでは、オーナー ウィンドウに TBN_BEGINDRAG の通知メッセージを送信します。独自のボタン ドラッグ コードを実行するアプリケーションは、ドラッグ操作を開始したときにこのメッセージを使用できます。ツールバーは、ドラッグ操作の終了を通知する TBN_ENDDRAG の通知メッセージを送信します。
ツールバー コントロールは、ユーザーが Customize Toolbar のダイアログ ボックスを使用してツールバーをカスタマイズするときに通知メッセージを送信します。ツールバーは、ユーザーがツールバーをダブルクリック後、ダイアログ ボックスが作成される前に TBN_BEGINADJUST の通知メッセージを送信します。次に、ツールバーをツールバー ボタンを挿入できるようにするかどうかを確認するに TBN_QUERYINSERT の一連の通知メッセージを送信します。親ウィンドウが TRUEを返すと、ツールバーは TBN_QUERYINSERT の通知メッセージの送信を停止します。親ペインがすべてのボタンの TRUE を返さない場合、ツールバーは、ダイアログ ボックスを破棄します。
いずれかのボタンがツールバーからツールバーのを各ボタンの TBN_QUERYDELETE の 1 種類の通知メッセージを送信することによって削除される可能性があるかどうかを次に、ツールバー コントロールが決まります。親ウィンドウは、ボタンが削除される可能性があることを示すために TRUE を返します; それ以外の場合は FALSEを返します。ツールバーは、ダイアログ ボックスにすべてのツールバー ボタンを灰色、削除されないものも含めて追加します。
ツールバー コントロールは、カスタマイズのツールバーのダイアログ ボックスのボタンに関する情報を必要とするたびに、 TBNOTIFY の構造の情報、およびアドレスを必要とするボタンのインデックスを指定する TBN_GETBUTTONINFO の通知メッセージを送信します。親ウィンドウは、関連情報を構造体に設定する必要があります。
Customize Toolbar のダイアログ ボックスには、ヘルプ ボタンとリセット ボタンがあります。ユーザーが [ヘルプ] を選択すると、ツールバー コントロールは TBN_CUSTHELP の通知メッセージを送信します。親ペインはヘルプ情報を表示して応答する必要があります。ダイアログ ボックスは、ユーザーがリセット ボタンを選択すると TBN_RESET の通知メッセージを送信します。このメッセージは、ツールバーがダイアログ ボックスを利用する直前であることを通知します。
これらのメッセージは WM_NOTIFY のすべてのメッセージであり、オーナー ウィンドウのオーナー ウィンドウのメッセージ マップに次の形式のメッセージマップ エントリを追加して処理できます:
ON_NOTIFY( wNotifyCode, idControl, memberFxn )
wNotifyCode
TBN_BEGINADJUSTのような通知メッセージの ID コード。idControl
送信するコントロールの ID を通知します。memberFxn
この通知を受信したときに呼び出すメンバー関数。
メンバー関数には、次のプロトタイプで宣言されています:
afx_msg void memberFxn( NMHDR * pNotifyStruct, LRESULT * result );
通知メッセージ ハンドラーが値を返す場合、 結果が指す LRESULT に配置する必要があります。
NMHDR の構造体または TBNOTIFY の構造体に対する各メッセージ、 pNotifyStruct のポイントに対して。これらの構造は次です:
NMHDR の構造体には、次のメンバーが含まれます:
typedef struct tagNMHDR {
HWND hwndFrom; // handle of control sending message
UINT idFrom;// identifier of control sending message
UINT code; // notification code; see below
} NMHDR;
hwndFrom
通知を送信するコントロールのウィンドウ ハンドル。CWnd のポインターにこのハンドルを変換するには、 CWnd::FromHandleを使用します。idFrom
送信するコントロールの ID を通知します。code
通知コード。このメンバーは、コントロールに値型の仕様、 TBN_BEGINADJUST または TTN_NEEDTEXTなどであったり、以下に示します。共通の通知値のいずれか 1 つがあります:NM_CLICK は、ユーザー コントロール内でマウスの左ボタンをクリックします。
NM_DBLCLK は、ユーザー コントロール内でマウスの左ボタンをダブル クリックします。
NM_KILLFOCUS コントロールは入力フォーカスを解除されました。
NM_OUTOFMEMORY は、コントロール使用できる十分なメモリがないため、操作を完了できませんでした。
NM_RCLICK は、ユーザー コントロール内の右ボタンをクリックしました。
NM_RDBLCLK は、ユーザー コントロール内の右ボタンをダブル クリックします。
NM_RETURN コントロールに入力フォーカスがあり、ユーザーが Enter キーが押しました。
NM_SETFOCUS コントロールは入力フォーカスを受け取りました。
TBNOTIFY の構造体には、次のメンバーが含まれます:
typedef struct {
NMHDR hdr; // information common to all WM_NOTIFY messages
int iItem; // index of button associated with notification
TBBUTTON tbButton; // info about button associated withnotification
int cchText; // count of characters in button text
LPSTR lpszText;// address of button text
} TBNOTIFY, FAR* LPTBNOTIFY;
解説
hdr
WM_NOTIFY のすべてのメッセージに共通情報。iItem
通知に関連付けられたボタンのインデックス。tbButton
ツールバー ボタンに関する情報を含むTBBUTTON の 構造は通知に関連付けられています。cchText
ボタン テキストの文字の数。lpszText
ボタン テキストへのポインター。
通知の送信をツールバー次のとおりです。:
TBN_BEGINADJUST は、ユーザーがツールバー コントロールをカスタマイズする際される。NMHDR へのポインターの位置は構成する通知に関する情報を含む。ハンドラーは、特定の値を返す必要はありません。
TBN_BEGINDRAG は、ユーザーがコントロールのツールバー ボタンのドラッグを開始するかされる。TBNOTIFY の構造体へのポインターのポインター。iItem のメンバーは、ドラッグするボタンのインデックスを示します。ハンドラーは、特定の値を返す必要はありません。
TBN_CUSTHELP は、ユーザーがカスタマイズのツールバーのダイアログ ボックスの [ヘルプ] ボタンをクリックしたときに渡して。戻り値はありません。通知メッセージについての情報を含む NMHDR の構造体へのポインターのポインター。ハンドラーは、特定の値を返す必要はありません。
TBN_ENDADJUST は、ユーザーがツールバー コントロールをパーソナル化できるようにするときに渡して。通知メッセージについての情報を含む NMHDR の構造体へのポインターのポインター。ハンドラーは、特定の値を返す必要はありません。
TBN_ENDDRAG は、ユーザーがコントロールのツールバー ボタンをドラッグするときに渡して。TBNOTIFY の構造体へのポインターのポインター。iItem のメンバーは、ドラッグするボタンのインデックスを示します。ハンドラーは、特定の値を返す必要はありません。
TBN_GETBUTTONINFO は、ユーザーがツールバー コントロールをカスタマイズする方法を渡して。ツールバーは、カスタマイズのツールバーのダイアログ ボックスに必要な情報を取得するには、この通知メッセージを使用します。TBNOTIFY の構造体へのポインターのポインター。iItem のメンバーは、ボタンのインデックスを指定します。pszText と cchText のメンバーは、現在のボタン テキストの文字で、アドレスと期間を指定します。アプリケーションでは、ボタンに関する情報を構造体に設定する必要があります。ボタンの情報を構造体にコピー、または FALSE を返します。別の方法で TRUE 。
TBN_QUERYDELETE はツールバー ボタンがコントロールから削除できるかどうかを判断するためにユーザーがツールバーのカスタマイズ中に渡して。TBNOTIFY の構造体へのポインターのポインター。iItem のメンバーは、削除するボタンのインデックスを示します。ボタンがボタンが削除されないように削除される TRUE をまたは FALSE 返します。
TBN_QUERYINSERT はボタンは、特定のボタンの左側に挿入できるかどうかを判断するためにユーザーがツールバー コントロールのカスタマイズ中に渡して。TBNOTIFY の構造体へのポインターのポインター。iItem のメンバーは挿入するボタンのインデックスを示します。ボタンが特定のボタンまたは FALSE の前にボタンが挿入されないように挿入される TRUE を返します。
TBN_RESET は、ユーザーがカスタマイズのツールバーのダイアログ ボックスの内容をリセットするとされる。通知メッセージについての情報を含む NMHDR の構造体へのポインターのポインター。ハンドラーは、特定の値を返す必要はありません。
TBN_TOOLBARCHANGE は、ユーザーがツールバー コントロールをカスタマイズしたらされる。通知メッセージについての情報を含む NMHDR の構造体へのポインターのポインター。ハンドラーは、特定の値を返す必要はありません。