zoukankan      html  css  js  c++  java
  • 工具管理菜单位图加载

    菜单背景色设置,主要用到的函数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_LOGOUT
    10 };
    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_LOGOUT
    21 };
     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     else
    26     {
    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 }
    高山流水,海纳百川!
  • 相关阅读:
    JDBC的步骤
    Java异常
    两个init方法的区别
    迭代器、foreach循环、泛型集合
    servlet的生命周期
    集合类对比
    在servlet中的中文乱码,相对路径和绝对路径
    【转】学习使用Jmeter做压力测试(一)--压力测试基本概念
    【转】jmeter压力测试
    【转】配置Jmeter的自定义参数
  • 原文地址:https://www.cnblogs.com/ahcc08/p/4033567.html
Copyright © 2011-2022 走看看