CWnd::OnMeasureItem
會在建立控制項時,架構會由主控描繪 (Owner-Drawn) 按鈕、下拉式方塊、清單方塊或功能表項目的擁有者的框架呼叫此成員函式。
afx_msg void OnMeasureItem(
int nIDCtl,
LPMEASUREITEMSTRUCT lpMeasureItemStruct
);
參數
nIDCtl
控制項的識別碼。lpMeasureItemStruct
out 包含主控描繪控制項的維度 MEASUREITEMSTRUCT 資料結構的點。
備註
覆寫這個成員函式並填入 MEASUREITEMSTRUCT 資料結構所指向的 lpMeasureItemStruct 並傳回;此通知 Windows 控制項的大小並允許 Windows 正確處理與控制項的使用者互動。
如果清單方塊或下拉式方塊會以 LBS_OWNERDRAWVARIABLE 或 CBS_OWNERDRAWVARIABLE 樣式,架構會呼叫擁有者之這個函式在控制項中的每個項目的,否則這個函式會被呼叫一次。
視窗啟始呼叫至下拉式方塊和清單方塊的擁有人的 OnMeasureItem 建立 OWNERDRAWFIXED 樣式 WM_INITDIALOG 在傳送訊息之前。 因此,當,擁有者會接收這個呼叫時,視窗尚未決定控制項所使用的字型的高度和寬度,需要這些值的函式呼叫和計算是在應用程式或程式庫的主函式應該會失敗。
如果指定的項目是 CMenu, CListBox 或物件,則 CComboBox 適當類別的 MeasureItem 虛擬函式呼叫。 覆寫適當的控制項類別的 MeasureItem 成員函式來計算和設定每個項目的大小。
OnMeasureItem 會呼叫,因此只有在控制項的類別會在執行階段,或是建立 LBS_OWNERDRAWVARIABLE 或 CBS_OWNERDRAWVARIABLE 樣式。 如果控制項是對話方塊編輯器建立, OnMeasureItem 不會呼叫。 這是因為, WM_MEASUREITEM 資訊及早在控制項建立處理序傳送。 如果您使用 DDX_Control、 SubclassDlgItem或 SubclassWindow的子類別,子類別化時,通常就會發生在建立處理序。 因此,沒有任何方法可以處理控制項的 OnChildNotify 函式的 WM_MEASUREITEM 訊息是機制, MFC 會使用該實作 ON_WM_MEASUREITEM_REFLECT。
注意事項 |
---|
此成員函式由架構呼叫可以讓您的應用程式處理 Windows 訊息。接收訊息時,參數會傳遞至函式反映這個框架接收的參數。如果您呼叫這個函式的基底類別實作,該實作會使用這個參數起始傳入訊息所提供函式取代的參數。 |
需求
Header: afxwin.h