次の方法で共有


CWnd::OnMeasureItem

フレームワークは、オーナー描画ボタン、コンボ ボックス、リスト ボックス、またはメニュー項目の所有者用に、フレームワークによってコントロールが作成されると、このメンバー関数を呼び出します。

afx_msg void OnMeasureItem(
   int nIDCtl,
   LPMEASUREITEMSTRUCT lpMeasureItemStruct 
);

パラメーター

  • nIDCtl
    コントロールの ID。

  • lpMeasureItemStruct
    オーナー描画コントロールのサイズを格納している MEASUREITEMSTRUCT のデータ構造体へのポインター。

解説

このメンバー関数をオーバーライドし、lpMeasureItemStruct が指す MEASUREITEMSTRUCT のデータ構造を設定し、を返します。; これは、コントロールのサイズを Windows に通知し、Windows がコントロールとの対話を正しく処理できるようにします。

リスト ボックスやコンボ ボックスが LBS_OWNERDRAWVARIABLE または CBS_OWNERDRAWVARIABLE のスタイルで作成されている場合、フレームワークは、コントロールの各項目の所有者用にこの関数を呼び出します; この関数は、それが呼び出されます。

Windows は OnMeasureItemWM_INITDIALOG のメッセージを送信する前に OWNERDRAWFIXED のスタイルで作成されたコンボ ボックスやリスト ボックスのオーナーの呼び出しを開始します。その結果、所有者がこの呼び出しを受け取ると、Windows は、コントロールで使用するフォントの高さと幅を決定できません; これらの値を要求する計算アプリケーションまたはライブラリの main 関数と関数呼び出しで発生します。

測定している項目が CMenuCListBox または CComboBox のオブジェクトの場合は、適切なクラスの MeasureItem の仮想関数が呼び出されます。各項目のサイズを計算して設定するには、適切なコントロール クラスの MeasureItem のメンバー関数をオーバーライドします。

OnMeasureItem、コントロールのクラスが実行時に作成または LBS_OWNERDRAWVARIABLE または CBS_OWNERDRAWVARIABLE のスタイルで作成されている場合のみ呼び出されます。コントロールがダイアログ エディターによって作成される場合、OnMeasureItem は呼び出されません。これは WM_MEASUREITEM のメッセージがコントロールの作成プロセスの早期に送信されるためです。サブクラス化後、作成プロセス発生した DDX_ControlSubclassDlgItem、または SubclassWindowを使用してサブクラス通常。したがって、ON_WM_MEASUREITEM_REFLECTを実装する機構の MFC には、コントロールの OnChildNotify 関数の WM_MEASUREITEM のメッセージを処理する方法はありません。

[!メモ]

このメンバー関数は、アプリケーションが Windows メッセージを処理できるようにするためにフレームワークによって呼び出されます。この関数に渡されるパラメーターの値は、フレームワークがメッセージ受信時に受け取ったパラメーターの値に基づいています。この関数の基本クラスの実装を呼び出した場合は、関数に渡したパラメーターではなく、メッセージと共に渡されたパラメーター自体が使用されます。

必要条件

ヘッダー: afxwin.h

参照

関連項目

CWnd クラス

階層図

CMenu::MeasureItem

CListBox::MeasureItem

CComboBox::MeasureItem

CComboBox::MeasureItem