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

菜单背景色设置,主要用到的函数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 }
时间: 2024-10-29 05:07:09

工具管理----菜单位图加载的相关文章

Android 大位图加载

说明:没对图片进行缓存处理,只是使用软引用进行位图资源的释放,从而避免内存泄漏. 对位图进行解码显示: 1 public Bitmap decodeBitmap(Resources resources, int resId, int reqWith, reqHeight ) { 2 //对位图进行解码的参数设置 3 BitmapFactory.Options options = new BitmapFactory.Options(); 4 //在对位图进行解码的过程中,避免申请内存空间 5 op

工具管理----概括介绍

最近写了一个工具管理的小软件,可以使桌面变得不再凌乱.主要界面如下: 用到的主要知识: 1.单例模式                 2.单窗口启动                 3.任务托盘                                         4.热键                        同时按ctr + 数字键(0--9),可以快速启动对应工具箱的前10个工具.                 5.菜单以及菜单背景色和位图的加载           

关于地图加载

关于地图加载 .map文件记录了格子大小为107*160,关于.map文件时如何生成的我也不清楚,.map文件中已经有二维大小以及整个阻挡信息(0:无阻挡,1:阻挡,2:透明0) /** *m_nMapWidth 地图宽 *m_nMapHight 地图高 *m_dvecCollsion 地图阻挡信息 */ info->get_collsion(m_nMapWidth, m_nMapHight, m_dvecCollsion); 他这个获取.map是这样的 ^ |-------------> |

Android—大图or多图加载解决方案(完美解决OOM问题)

在开发应用的时候,很多时候都会涉及大量图片的加载和高精度图片的加载,这两种操作都是会导致应用程序OOM(OutOfMemory)的问题发生,合理的图片加载和图片内存管理就是必须解决的问题,以下将提供一个比较完善的技术方案,解决这两个问题. 首先,我们必须明确为什么会发生OOM(OutOfMemory)的问题,其原因就是因为在APP运行过程中,所使用的系统内存超出了当前APP的最大可用内存,就发生了OOM的问题.下面,我们来估算一下在一台中高档的手机上面,加载多少图片会导致OOM:假设系统分配给A

__利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载

利用PHP的debug_backtrace函数,实现PHP文件权限管理.动态加载 简述 可能大家都知道,php中有一个函数叫debug_backtrace,它可以回溯跟踪函数的调用信息,可以说是一个调试利器. 好,来复习一下.view source?01    one();02     03    function one() {04        two();05    }06     07    function two() {08        three();09    }10    

Openlayers+Geoserver(一):项目介绍以及地图加载

项目验收完,趁着事情不是很多,对这个项目进行梳理.我主要负责地图模块,网站其他模块主要有两个,一个是报表,主要是100多张报表,技术没有难度,主要是工作量的问题.另一个是数据的校验,就是校验数据的冲突. 现在主要介绍地图,地图主要使用openlayers+geoserver,通过Geoserver加载路线以及点状物的shape数据,将各个图层形成一个图层组,页面前端用openlayers加载该图层组,然后对此图层组进行查询.这样做的好处就是,如果有新的图层增加,如果没有特殊的需求,是不需要修改代

利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载

简述 可能大家都知道,php中有一个函数叫debug_backtrace,它可以回溯跟踪函数的调用信息,可以说是一个调试利器. 好,来复习一下 01 one(); 02 03 function one() { 04 two(); 05 } 06 07 function two() { 08 three(); 09 } 10 11 function three() { 12 print_r( debug_backtrace() ); 13 } 14 15 /* 16 输出: 17 Array 18

Android大图加载内存优化(如何防止OutOfMemory)

一.简介 移动设备不断发展的今天,有的人认为内存已经足够大了,不用再管什么内存优化,Java是虚拟机可以帮我维护内存.其实内存空间资源还是很宝贵的,不管手机内存有多大,系统分配给单个应用的内存空间还是很有限的大致有16M,64M,128M等.在Android中加载大图会非常消耗系统资源,16M的图片大致可以存储3张1024X1536质量为ARGB_8888的图片,这里边还不包含其它Object所占的资源.软件在系统上运行,环境是很复杂的,可能测试的时候有限的测试次数上没有发现内存泄漏问题,但是在

ORB-SLAM2 地图加载

一.前面说了ORB-SLAM地图的保存部分,继续说地图如何加载,因为加载部分相比保存要稍微复杂一些,所以要多说一点. 二.ORB-SLAM2地图加载构成 首先同样是在头文件中声明加载函数,包含地图点和关键帧类的加载. void Load( const string &filename, SystemSetting* mySystemSetting ); MapPoint* LoadMapPoint( ifstream &f ); KeyFrame* LoadKeyFrame( ifstre