CWnd::OnMeasureItem 是 MFC(Microsoft Foundation Classes)库中 CWnd 类的一个受保护方法,用于自定义菜单项或者控件的尺寸。这个方法通常用于 Owner-Draw 菜单或者控件,允许你指定菜单项或者控件的自定义尺寸。

以下是一个简单的示例:
// MyWnd.h

class MyWnd : public CWnd
{
   // 声明消息映射
   afx_msg void OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct);
   DECLARE_MESSAGE_MAP()
};

// MyWnd.cpp

BEGIN_MESSAGE_MAP(MyWnd, CWnd)
   ON_WM_MEASUREITEM()
END_MESSAGE_MAP()

// 实现消息处理函数
void MyWnd::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
   // 在这里处理菜单项或控件的尺寸
   if (nIDCtl == ID_MY_MENU_ITEM) {
      lpMeasureItemStruct->itemWidth = MY_MENU_ITEM_WIDTH;
      lpMeasureItemStruct->itemHeight = MY_MENU_ITEM_HEIGHT;
   }

   // 调用基类的处理函数
   CWnd::OnMeasureItem(nIDCtl, lpMeasureItemStruct);
}

在这个示例中,MyWnd 类继承自 CWnd,并声明了 OnMeasureItem 方法。在消息映射中,使用 ON_WM_MEASUREITEM 宏将消息映射到相应的处理函数。

当菜单项或者控件的尺寸需要被测量时,OnMeasureItem 方法会被调用。在方法中,你可以根据需要设置 lpMeasureItemStruct 结构体的 itemWidth 和 itemHeight 成员来指定菜单项或者控件的尺寸。在处理完自定义尺寸后,调用 CWnd::OnMeasureItem 以确保默认的处理也能继续进行。


转载请注明出处:http://www.pingtaimeng.com/article/detail/23631/MFC/CWnd