首页 > 代码库 > 工具管理----菜单位图加载

工具管理----菜单位图加载

菜单背景色设置,主要用到的函数SetMenuInfo

函数原型:BOOL SetMenultemlnfo(HMENU hMenu,UINT uitem,BOOL fByPosition,LPMENUITEMINFO lpmii);
参数:
hMenu:包含菜单项的菜单的句柄。
ultem:将被修改的菜单项的标识符或位置。此参数的含义由参数fByPosition确定。
FByPosition:用于指定参数ultem的含义的值。如果此参数值为FALSE,则参数ultem是菜单项的标识符,否则,表示菜单项的位置。
lpmii:指向结构MENUITEMINFO的指针。该结构含有菜单项的信息,并且.指定将被修改的菜单项的属性。
返回值:如果函数调用成功,返回非零值:如果函数调用失败,返回值是零。
 

菜单位图加载,主要用到的函数SetMenuItemBitmaps

CMenu::SetMenuItemBitmaps
BOOLSetMenuItemBitmaps(UINTnPosition,UINTnFlags,constCBitmap*pBmpUnchecked,constCBitmap*pBmpChecked);
返回值:如果调用成功会返回非零值,否则为0.
参数:第一个参数nPosition的取值由第二个参数nFlags的取值决定。如果第二个参数的取值为MF_BYPOSITION,即使用位置索引,那么第一个参数为菜单项位置索引;如果第二个参数的取值为MF_BYCOMMAND,那么第一个参数为菜单项标示,应该使用该菜单项的ID。后两个参数都是CBitmap类的指针,用来设置与菜单项关联的两个位图,其中第三个参数表示该菜单项未被选中时的位图,第四个参数表示该菜单项被选中之后的显示的位图。
 
主要代码如下:
 1 // 菜单数组 2 const  int g_MenuIDArray[] =  3 { 4     ID_RMENU_RUN,  5     ID_RMENU_ADD, 6     ID_RMENU_REMOVE, 7     ID_RMENU_SEEKFILE, 8     ID_TMENU_VIEW, 9     ID_TMENU_LOGOUT10 };11 12 // 位图数组13 const int g_BMPIDArray[] = 14 {15     IDB_BITMAP_RUN,16     IDB_BITMAP_ADD,17     IDB_BITMAP_REMOVE,18     IDB_BITMAP_SEEKFILE,19     IDB_BITMAP_VIEW,20     IDB_BITMAP_LOGOUT21 };
 1 // 初始化cmdID和bitmap的关系 2 void CToolBoxDlg::InitBMPMap() 3 { 4     for (int i = 0; i < sizeof(g_MenuIDArray)/sizeof(g_MenuIDArray[0]); i++) 5     { 6         CBitmap * bmp = new CBitmap; 7         bmp->LoadBitmap(g_BMPIDArray[i]); 8         m_bmpMap[g_MenuIDArray[i]] = bmp; 9     }10 }
 1 // 设置菜单背景 2 void CToolBoxDlg::SetMenuBkColor(CMenu * pMenu) 3 { 4     if (NULL == pMenu) 5     { 6         return; 7     } 8  9     MENUINFO menuInfo;10     memset(&menuInfo, 0, sizeof(menuInfo));11     menuInfo.cbSize = sizeof(menuInfo);12     menuInfo.hbrBack = m_brush; 13     menuInfo.fMask = MIM_BACKGROUND;14     ::SetMenuInfo(pMenu->m_hMenu, &menuInfo);15 }16 17 // 加载菜单位图18 void CToolBoxDlg::SetMenuBMP(CMenu * pMenu)19 {20     for (UINT i = 0; i < pMenu->GetMenuItemCount(); i++)21     {22         int nMenuId = pMenu->GetMenuItemID(i);23 24         if (0 < nMenuId)25         {26             pMenu->SetMenuItemBitmaps(nMenuId, MF_BYCOMMAND,27                                m_bmpMap[nMenuId], m_bmpMap[nMenuId]);28         }29     }30 }
1 // 设置菜单背景色和位图2 void CToolBoxDlg::SetMenuBKInfo(CMenu * pMenu)3 {4     SetMenuBkColor(pMenu);5     SetMenuBMP(pMenu);6 }
 1 // 右键列表框,弹出右键菜单 2 void CToolBoxDlg::OnNMRClickListToolbox(NMHDR *pNMHDR, LRESULT *pResult) 3 { 4     LPNMITEMACTIVATE pNMItemActivate = (LPNMITEMACTIVATE)(pNMHDR); 5  6     CPoint pt; 7  8     GetCursorPos(&pt); 9 10     CMenu menu;11     menu.LoadMenu(IDR_MENU_RIGHT);12 13     CMenu *pPopup = menu.GetSubMenu(0);14 15     SetMenuBKInfo(pPopup);16 17     int nSelectIndex = pNMItemActivate->iItem;18 19     if (Not_Find != nSelectIndex)20     {21         pPopup->EnableMenuItem(ID_RMENU_RUN, MF_BYCOMMAND | MF_ENABLED);22         pPopup->EnableMenuItem(ID_RMENU_REMOVE, MF_BYCOMMAND | MF_ENABLED);23         pPopup->EnableMenuItem(ID_RMENU_SEEKFILE, MF_BYCOMMAND | MF_ENABLED);24     }25     else26     {27         pPopup->EnableMenuItem(ID_RMENU_RUN, MF_BYCOMMAND | MF_DISABLED);28         pPopup->EnableMenuItem(ID_RMENU_REMOVE, MF_BYCOMMAND | MF_DISABLED);29         pPopup->EnableMenuItem(ID_RMENU_SEEKFILE, MF_BYCOMMAND | MF_DISABLED);30     }31 32     pPopup->TrackPopupMenu(TPM_LEFTALIGN, pt.x, pt.y, this);33 34     *pResult = 0;35 }

 

工具管理----菜单位图加载