次の方法で共有


カスタマイズ通知の処理

Windows ツール バーの共通コントロールには、ユーザーがツール バー ボタンを挿入、削除、または再配置できる、システム定義のカスタマイズ ダイアログ ボックスなど、カスタマイズ機能が組み込まれています。 アプリケーションは、カスタマイズ機能を使用できるかどうかを決定し、ユーザーがツール バーをカスタマイズできる範囲を制御します。

ツール バーに CCS_ADJUSTABLE スタイルを指定することで、ユーザーがこれらのカスタマイズ機能を使用できるようにします。 カスタマイズ機能を使用すると、ユーザーはボタンを新しい位置にドラッグしたり、ツール バーからボタンをドラッグして削除したりできます。 さらに、ユーザーはツール バーをダブルクリックして [ ツール バーのカスタマイズ ] ダイアログ ボックスを表示できます。これにより、ユーザーはツール バー ボタンの追加、削除、再配置を行うことができます。 アプリケーションは、メンバーの カスタマイズ 関数を使用してダイアログ ボックスを表示できます。

ツール バー コントロールは、カスタマイズ プロセスの各ステップで親ウィンドウに通知メッセージを送信します。 ユーザーが Shift キーを押しながらボタンのドラッグを開始すると、ツール バーは自動的にドラッグ操作を処理します。 ツール バーは、 TBN_QUERYDELETE 通知メッセージを親ウィンドウに送信して、ボタンを削除できるかどうかを判断します。 親ウィンドウから FALSE が返された場合、ドラッグ操作は終了します。 それ以外の場合、ツール バーはマウス入力をキャプチャし、ユーザーがマウス ボタンを離すのを待ちます。

ユーザーがマウス ボタンを離すと、ツール バー コントロールによってマウス カーソルの位置が決まります。 カーソルがツール バーの外側にある場合、ボタンは削除されます。 カーソルが別のツール バー ボタンにある場合、ツールバーは TBN_QUERYINSERT 通知メッセージを親ウィンドウに送信して、特定のボタンの左側にボタンを挿入できるかどうかを判断します。 ボタンは、親ウィンドウが TRUE を返す場合に挿入されます。それ以外の場合は、そうではありません。 ツール バーは、ドラッグ操作の終了を通知する TBN_TOOLBARCHANGE 通知メッセージを送信します。

ユーザーが Shift キーを押さずにドラッグ操作を開始すると、ツール バー コントロールは TBN_BEGINDRAG 通知メッセージを所有者ウィンドウに送信します。 独自のボタン ドラッグ コードを実装するアプリケーションでは、このメッセージをドラッグ操作を開始するためのシグナルとして使用できます。 ツール バーは、ドラッグ操作の終了を通知する TBN_ENDDRAG 通知メッセージを送信します。

ツール バー コントロールは、ユーザーが [ツール バーのカスタマイズ] ダイアログ ボックスを使用してツール バーを カスタマイズ したときに通知メッセージを送信します。 ツール バーは、ユーザーがツール バーをダブルクリックした後、ダイアログ ボックスが作成される前に、 TBN_BEGINADJUST 通知メッセージを送信します。 次に、ツール バーは、一連の TBN_QUERYINSERT 通知メッセージの送信を開始して、ツール バーでボタンの挿入を許可するかどうかを判断します。 親ウィンドウが TRUE を返すと、ツール バーはTBN_QUERYINSERT通知メッセージ の送信を 停止します。 親ウィンドウがボタンに対して TRUE を 返さない場合、ツール バーはダイアログ ボックスを破棄します。

次に、ツール バー コントロールは、ツール バーの各ボタンに対して 1 つの TBN_QUERYDELETE 通知メッセージを送信することで、ツール バーからボタンを削除できるかどうかを判断します。 親ウィンドウは TRUE を返し、ボタンが削除される可能性があることを示します。それ以外の場合は FALSE を返します。 ツール バーは、すべてのツール バー ボタンをダイアログ ボックスに追加しますが、削除できない可能性のあるボタンは灰色で表示されます。

ツール バー コントロールは、[ツール バーのカスタマイズ] ダイアログ ボックスのボタンに関する情報を必要とするたびに、情報が必要なボタンのインデックスと TBNOTIFY 構造体のアドレスを指定して、TBN_GETBUTTONINFO通知メッセージを送信します。 親ウィンドウは、構造に関連情報を入力する必要があります。

[ ツール バーのカスタマイズ ] ダイアログ ボックスには、[ヘルプ] ボタンと [リセット] ボタンがあります。 ユーザーが [ヘルプ] ボタンを選択すると、ツール バー コントロールから TBN_CUSTHELP 通知メッセージが送信されます。 親ウィンドウは、ヘルプ情報を表示して応答する必要があります。 ダイアログ ボックスは、ユーザーが [リセット] ボタンを選択すると、 TBN_RESET 通知メッセージを送信します。 このメッセージは、ツール バーがダイアログ ボックスを再初期化しようとしていることを示します。

これらのメッセージはすべて WM_NOTIFY メッセージであり、所有者ウィンドウのメッセージ マップに次のフォームのメッセージ マップ エントリを追加することで、所有者ウィンドウで処理できます。

ON_NOTIFY( wNotifyCode, idControl, memberFxn )
  • wNotifyCode

    TBN_BEGINADJUSTなどの通知メッセージ識別子コード。

  • idControl

    通知を送信するコントロールの識別子。

  • memberFxn

    この通知を受信したときに呼び出されるメンバー関数。

メンバー関数は、次のプロトタイプで宣言されます。

afx_msg void memberFxn( NMHDR * pNotifyStruct, LRESULT * result );

通知メッセージ ハンドラーが値を返す場合は、結果によって指される LRESULT に値を配置する必要があります。

メッセージごとに、 pNotifyStructNMHDR 構造体または TBNOTIFY 構造体を指します。 これらの構造を次に示します。

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

    通知を送信するコントロールの識別子。

  • コード

    通知コード。 このメンバーには、 TBN_BEGINADJUSTTTN_NEEDTEXTなど、コントロールの種類に固有の値を指定することも、次に示す一般的な通知値のいずれかを指定することもできます。

    • 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 メンバーには、ドラッグするボタンの 0 から始まるインデックスが含まれています。 ハンドラーは、特定の値を返す必要はありません。

  • TBN_CUSTHELP

    ユーザーが [ツール バーのカスタマイズ] ダイアログ ボックスで [ヘルプ] ボタンを選択したときに送信されます。 戻り値はありません。 ポインターは、通知メッセージに関する情報を含む NMHDR 構造体を指します。 ハンドラーは、特定の値を返す必要はありません。

  • TBN_ENDADJUST

    ユーザーがツール バー コントロールのカスタマイズを停止したときに送信されます。 ポインターは、通知メッセージに関する情報を含む NMHDR 構造体を指します。 ハンドラーは、特定の値を返す必要はありません。

  • TBN_ENDDRAG

    ユーザーがツール バー コントロール内のボタンのドラッグを停止したときに送信されます。 ポインターは TBNOTIFY 構造体を指します。 iItem メンバーには、ドラッグするボタンの 0 から始まるインデックスが含まれています。 ハンドラーは、特定の値を返す必要はありません。

  • TBN_GETBUTTONINFO

    ユーザーがツール バー コントロールをカスタマイズしているときに送信されます。 ツール バーでは、この通知メッセージを使用して、[ツール バーのカスタマイズ] ダイアログ ボックスで必要な情報を取得します。 ポインターは TBNOTIFY 構造体を指します。 iItem メンバーは、ボタンの 0 から始まるインデックスを指定します。 pszText メンバーと cchText メンバーは、現在のボタン テキストのアドレスと長さを文字で指定します。 アプリケーションは、ボタンに関する情報を構造体に入力する必要があります。 ボタン情報が構造体にコピーされた場合は TRUE 、それ以外の場合は FALSE を 返します。

  • TBN_QUERYDELETE

    ツール バー コントロールからボタンを削除できるかどうかを判断するために、ユーザーがツール バーをカスタマイズしている間に送信されます。 ポインターは TBNOTIFY 構造体を指します。 iItem メンバーには、削除するボタンの 0 から始まるインデックスが含まれています。 ボタンの削除を許可する 場合は TRUE 、ボタンが削除されないように するには FALSE を 返します。

  • TBN_QUERYINSERT

    ユーザーがツール バー コントロールをカスタマイズして、特定のボタンの左側にボタンを挿入できるかどうかを判断するときに送信されます。 ポインターは TBNOTIFY 構造体を指します。 iItem メンバーには、挿入するボタンの 0 から始まるインデックスが含まれています。 指定したボタンの前にボタンを挿入できるようにする場合は TRUE、ボタンが挿入されないようにするには FALSE を返します。

  • TBN_RESET

    ユーザーが [ツール バーのカスタマイズ] ダイアログ ボックスの内容をリセットしたときに送信されます。 ポインターは、通知メッセージに関する情報を含む NMHDR 構造体を指します。 ハンドラーは、特定の値を返す必要はありません。

  • TBN_TOOLBARCHANGE

    ユーザーがツール バー コントロールをカスタマイズした後に送信されます。 ポインターは、通知メッセージに関する情報を含む NMHDR 構造体を指します。 ハンドラーは、特定の値を返す必要はありません。

こちらも参照ください

CToolBarCtrl の使用
コントロール