次の方法で共有


CWnd::OnMeasureItem

オーナー描画のボタン、コンボ ボックス、リスト ボックス、またはメニュー項目のコントロールが作成された場合に、そのコントロールのオーナーに対して、フレームワークからこのメンバー関数が呼び出されます。

afx_msg void OnMeasureItem(
   int nIDCtl,
   LPMEASUREITEMSTRUCT lpMeasureItemStruct 
);

パラメーター

  • nIDCtl
    コントロールの ID。

  • lpMeasureItemStruct
    オーナー描画コントロールの寸法を持つ MEASUREITEMSTRUCT データ構造体へのポインター。

解説

このメンバー関数をオーバーライドして、lpMeasureItemStruct が指す MEASUREITEMSTRUCT データ構造体にデータを格納し、呼び出し元に制御を戻します。これにより、Windows にコントロールの寸法が通知されるため、ユーザーのコントロールに対する操作を適切に処理できるようになります。

リスト ボックスやコンボ ボックスが LBS_OWNERDRAWVARIABLE または CBS_OWNERDRAWVARIABL スタイルで作成されているときは、コントロールの各項目のオーナーに対して、フレームワークからこの関数が呼び出されます。それ以外のときは、この関数は一度だけ呼び出されます。

Windows は、OWNERDRAWFIXED スタイルで作成されたコンボ ボックスやリスト ボックスのオーナーに対して、WM_INITDIALOG メッセージを送信する前に OnMeasureItem 関数を呼び出します。 つまり、オーナーがこの呼び出しを受けた時点では、Windows はコントロールで使用されるフォントの高さや幅を認識できていません。したがって、高さや幅の値を必要とする関数呼び出しや計算などは、アプリケーションのメイン関数またはライブラリで行う必要があります。

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

OnMeasureItem が呼び出されるのは、実行時に作成されたクラスのコントロールと、LBS_OWNERDRAWVARIABLE または CBS_OWNERDRAWVARIABLE スタイルで作成されたコントロールに対してだけです。 ダイアログ エディターで作成されたコントロールに対して OnMeasureItem が呼び出されることはありません。 そのようなコントロールに対しては、代わりに作成プロセスの早い段階で WM_MEASUREITEM メッセージが送られます。 ただし、DDX_ControlSubclassDlgItem、または SubclassWindow を使用してサブクラス化を行った場合、そのサブクラス化は通常作成プロセスの後で実行されます。 したがって、サブクラス化されたコントロールには、OnChildNotify 関数で WM_MEASUREITEM メッセージを処理する機会がありません。しかし、MFC はこの機構で ON_WM_MEASUREITEM_REFLECT を実装しています。

注意

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

必要条件

**ヘッダー:**afxwin.h

参照

参照

CWnd クラス

階層図

CMenu::MeasureItem

CListBox::MeasureItem

CComboBox::MeasureItem

CComboBox::MeasureItem

概念

CWnd のメンバー