首页 > 代码库 > 工具管理----菜单位图加载
工具管理----菜单位图加载
菜单背景色设置,主要用到的函数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 }
工具管理----菜单位图加载
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。