在這裡提供一個C++類(CCustomMenu),該類是CMenu的子類,並且擁有自繪能力。
它可以向你提供以下的功能:
設置字體顏色。
設置高亮度顏色。
設置高亮度時的風格。
設置選中時和在普通狀態下的菜單顯示的圖標。
設置顯示圖標大小。
在CCustomMenu中定義了結構MENUDATA,你必須根據你的需要填充該結構,並且
在增加菜單時提供該結構的指針(調用AppendMenu,InsertMenu)。下面是一個例子:
1、定義CCustomMenu的實例,和MENUDATA結構變量。
CCustomMenu m_cCustomMenu;
MENUDATA menuData [8]; // as many menu items are present , You should be able to use
//new and do the same
2、調用CreateMenu()設置有關參數。
m_customMenu.CreateMenu ();
m_customMenu.SetIconSize (25,25); //This is to set the size of the Icon.
// This should be used only once for any menu
// in order to resize it, destroy and create the menu again with different size.
m_customMenu.SetHighlightStyle (Normal); //Or TextOnly, if you want the
// background color to remain the same
// and the Text color to change to the Highlight color.
// The following setXXXColor sets the menu colors. If you dont want to change any, Dont call these member functions.
m_customMenu.SetTextColor (RGB (255,0,0));
m_customMenu.SetBackColor (RGB (255,255,255));
m_customMenu.SetHighlightColor (RGB (0,0,255));
3、設置MENUDATA變量,並增加菜單項。
lstrcpy (menuData[0].menuText , "text1");
menuData[0].menuIconNormal= IDI_ICON1;
m_customMenu.AppendMenu (MF_OWNERDRAW,3,(LPCTSTR)menuData);
3、在你的窗口中重載OnMeasureItem(...)函數。
void CMyView::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
if ( lpMeasureItemStruct->CtlType == ODT_MENU &&
IsMenu((HMENU)lpMeasureItemStruct->itemID) &&