182 LRESULT
OnDrawItem(UINT , WPARAM , LPARAM lParam, BOOL &bHandled)
184 T *pT =
static_cast<T *
>(
this);
185 pT->SetMsgHandled(TRUE);
186 pT->DrawItem((LPDRAWITEMSTRUCT)lParam);
187 bHandled = pT->IsMsgHandled();
188 return (LRESULT)TRUE;
201 T *pT =
static_cast<T *
>(
this);
202 pT->SetMsgHandled(TRUE);
203 pT->MeasureItem((LPMEASUREITEMSTRUCT)lParam);
204 bHandled = pT->IsMsgHandled();
205 return (LRESULT)TRUE;
218 T *pT =
static_cast<T *
>(
this);
219 pT->SetMsgHandled(TRUE);
220 bHandled = pT->IsMsgHandled();
221 return (LRESULT)pT->CompareItem((LPCOMPAREITEMSTRUCT)lParam);
234 T *pT =
static_cast<T *
>(
this);
235 pT->SetMsgHandled(TRUE);
236 pT->DeleteItem((LPDELETEITEMSTRUCT)lParam);
237 bHandled = pT->IsMsgHandled();
238 return (LRESULT)TRUE;
249 LRESULT
OnMenuChar(UINT , WPARAM wParam, LPARAM lParam, BOOL &bHandled)
251 T *pT =
static_cast<T *
>(
this);
252 pT->SetMsgHandled(TRUE);
254 UINT nChar = LOWORD(wParam);
255 UINT nFlags = HIWORD(wParam);
256 HMENU hMenu = (HMENU)lParam;
257 LRESULT lRes = pT->OnMenuChar(nChar, nFlags, hMenu);
259 bHandled = pT->IsMsgHandled();
280 if (lpMeasureItemStruct->CtlType != ODT_MENU)
283 T *pT =
static_cast<T *
>(
this);
284 HWND hWnd = pT->GetDlgItem(lpMeasureItemStruct->CtlID);
285 HDC dc = ::GetDC(hWnd);
286 TEXTMETRIC tm = { 0 };
287 GetTextMetrics(dc, &tm);
289 lpMeasureItemStruct->itemHeight = tm.tmHeight;
290 ::ReleaseDC(hWnd, dc);
293 lpMeasureItemStruct->itemHeight = ::GetSystemMetrics(SM_CYMENU);
358 void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
364 void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
372 void OnMenuSelect(UINT nItemID, UINT nFlags, HMENU menu);
381 LRESULT
OnMenuChar(UINT nChar, UINT nFlags, HMENU hMenu);
388 REFLECT_NOTIFICATIONS_EX()
411 SMenu(HMENU hMenu = 0);
427 STDMETHOD_(BOOL,
Attach)(THIS_ HMENU hMenu) OVERRIDE;
433 STDMETHOD_(HMENU,
Detach)(THIS) OVERRIDE;
439 STDMETHOD_(HMENU,
GetHMenu)(THIS) SCONST OVERRIDE;
446 STDMETHOD_(BOOL,
LoadMenu)(THIS_ LPCTSTR resId) OVERRIDE;
453 STDMETHOD_(BOOL,
LoadMenuU8)(THIS_ LPCSTR resId) OVERRIDE;
478 STDMETHOD_(BOOL,
InsertMenu)(THIS_ UINT uPosition, UINT uFlags, UINT_PTR nIDNewItem, LPCTSTR strText,
int iIcon DEF_VAL(-1), HICON hIcon DEF_VAL(0)) OVERRIDE;
489 STDMETHOD_(BOOL,
AppendMenu)(THIS_ UINT uFlags, UINT_PTR uIDNewItem, LPCTSTR lpNewItem,
int iIcon DEF_VAL(-1), HICON hIcon DEF_VAL(0)) OVERRIDE;
496 STDMETHOD_(BOOL,
CheckMenuItem)(THIS_ UINT uIdCheckItem, UINT uCheck) OVERRIDE;
506 STDMETHOD_(BOOL,
CheckMenuRadioItem)(THIS_ UINT idFirst, UINT idLast, UINT idCheck, UINT uFlags) OVERRIDE;
514 STDMETHOD_(BOOL,
DeleteMenu)(THIS_ UINT uPosition, UINT uFlags) OVERRIDE;
526 STDMETHOD_(UINT,
TrackPopupMenu)(THIS_ UINT uFlags,
int x,
int y, HWND hWnd, LPCRECT prcRect DEF_VAL(NULL),
int nScale DEF_VAL(100)) OVERRIDE;
540 STDMETHOD_(BOOL,
ModifyMenuString)(THIS_ UINT uPosition, UINT uFlags, LPCTSTR lpItemString) OVERRIDE;
549 STDMETHOD_(BOOL,
SetMenuUserData)(THIS_ UINT uPosition, UINT uFlags, ULONG_PTR ulUserData) OVERRIDE;
557 STDMETHOD_(ULONG_PTR,
GetMenuUserData)(THIS_ UINT uPosition, UINT uFlags) OVERRIDE;
576 STDMETHOD_(HMENU,
GetSubMenu)(THIS_
int nPos) OVERRIDE;
585 STDMETHOD_(BOOL,
GetMenuString)(THIS_ UINT uPosition, UINT uFlags, IStringT *lpItemString) OVERRIDE;