CWnd::OnMeasureItem

afx_msg void OnMeasureItem( int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct );

参数:
nIDCtl控件的ID。
lpMeasureItemStruct指向一个MEASUREITEMSTRUCT数据结构,其中包含自画控件的大小。

说明:
当控件被创建的时候,框架为自画按钮、组合框、列表框或菜单项调用这个成员函数。
重载这个函数并填充lpMeasureItemStruct指向的MEASUREITEMSTRUCT数据结构,然后返回;这将通知Windows控件的大小,并使Windows能够正确地处理控件的用户交互。
如果列表框或组合框是用LBS_OWNERDRAWVARIABLE或CBS_OWNERDRAWVARIA_BLE风格创建的,则框架为控件中的每一个项调用这个函数;否则这个函数只被调用一次。
在发送WM_INITDIALOG消息之前,Windows为用OWNERDRAWFIXED风格创建的组合框和列表框的拥有者发出对OnMeasureItem的调用。其结果是,当拥有者接收到这个调用时,Windows还没有确定在控件中使用的字体的高度和宽度;需要这些值的函数调用和计算应该发生在应用程序或库的主函数中。
如果要测量的的项是CMenu,CListBox或CComboBox对象,则将调用适当的类的虚函数MeasureItem。重载适当的控件类的MeasureItem成员函数以计算并设置每个项的大小。
仅当控件类是在运行时创建,或者它是用LBS_OWNERDRAWVARIABLE或CBS_OWNERDRAWVARIABLE风格创建的时候,OnMeasureItem才会被调用。这是因为WM_MEASUREITEM消息时在控件创建过程的早期被发送的。
如果你使用DDX_Control,SubclassDlgItem或SubclassWindow进行了子类化,则子类化过程通常发生在创建过程之后。因此,在控件的OnChildNotify函数中无法处理WM_MEASUREITEM消息,这是MFC用来实现ON_WM_MEASUREITEM_REFLECT的机制。
注意 框架调用这个成员函数以允许你的应用程序处理一个Windows消息。传递给你的成员函数的参数反映了接收到消息时框架接收到的参数。如果你调用了这个函数的基类实现,则该实现将使用最初传递给消息的参数(而不是你提供给这个函数的参数)。

请参阅:
CMenu::MeasureItem, CListBox::MeasureItem, CComboBox::MeasureItem, WM_MEASUREITEM