自绘菜单的问题,怎么WM_MEASUREITEM中设置的菜单大小不起作用???
想把菜单的背景色和字体颜色做个修改,要设置MF_OWNERDRAW属性,并响应WM_MEASUREITEM消息来设置各个item的大小,同时还有WM_DRAWITEM来画。
可奇怪的是我在WM_MEASUREITEM中设置的大小根本不起作用!!!另外弹出的菜单总是边框的一小部分无法刷上我所设置的颜色?
部分代码:
switch(cwps.message)
{
case WM_INITMENUPOPUP:
{
HMENU hMenu = (HMENU)cwps.wParam;
int nCount = GetMenuItemCount(hMenu);
for( int i = 0; i < nCount; ++i )
{
UINT nId = GetMenuItemID(hMenu, i);
ModifyMenu(hMenu, i, MF_BYPOSITION|MF_OWNERDRAW, nId, (LPCSTR)cwps.lParam); // 改变菜单的自绘属性
}
}
break;
case WM_MEASUREITEM:
{
LPMEASUREITEMSTRUCT lpmis = (LPMEASUREITEMSTRUCT)cwps.lParam;
if( lpmis->CtlType == ODT_MENU )
{
lpmis->itemHeight = 30; // 设置大小,却不起作用???!!!
lpmis->itemWidth = 150;
return 0;
}
}
break;
case WM_DRAWITEM:
{
COLORREF clrSel, clrUnSel;
COLORREF clrBkSel, clrBkUnSel;
LPDRAWITEMSTRUCT lpdis = (LPDRAWITEMSTRUCT)cwps.lParam;
if( lpdis->itemState & ODS_SELECTED )
{
clrSel = SetTextColor(lpdis->hDC, RGB(255, 0, 0));
FillRect(lpdis->hDC, &lpdis->rcItem, (HBRUSH)GetStockObject(WHITE_BRUSH));
}
else
{
clrUnSel = SetTextColor(lpdis->hDC, RGB(0, 255, 0));
FillRect(lpdis->hDC, &lpdis->rcItem, (HBRUSH)GetStockObject(BLACK_BRUSH));
}
TextOut(lpdis->hDC, lpdis->rcItem.left+13, lpdis->rcItem.top, "Good", 4);
} // 得到的UI显示有些异常,菜单项的边框部分总是有一点点灰色,不是自定义的颜色!!??
return 0;
求高手指点~~~~