图形标记菜单

来源:互联网 发布:sub在vb中是什么意思 编辑:程序博客网 时间:2024/06/04 07:50

标记菜单:就是菜单项前面打勾的就是标记菜单;

算法:

第一步:找到整个菜单栏,是包括文件、编辑、查看、菜单、帮助;

GetMenu();

第二步:找到其中一个子菜单,比如文件;

GetSunMenu();

第三步:找到其中一个子菜单项,比如新建;

CheckMenuItem(0,MF_BYPOSITION | MF_CHECKED);

★注意:子菜单是有索引号的;

★注意:子菜单项可以通过索引号和ID号去访问;

 

注意:CBitmap m_bitmap;要设置为CMainFrame类的成员变量;

注意:图形标记菜单里面的位图尺寸要比较小的;

 

程序如下:

m_bitmap.LoadBitmap(IDB_BITMAP1);

GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(0,MF_BYPOSITION,&m_bitmap,&m_bitmap);

这个程序位置仍旧在CMainFrame类里面的onCreate函数里面;

 

以下代码可以帮助我们获取菜单的大小,帮助我们设置位图的大小;

      CString str;

      str.Format("x=%d, y=%d", GetSystemMetrics(SM_CXMENUCHECK),GetSystemMetrics(SM_CYMENUCHECK));

      MessageBox(str);

     如果位图太大,会看不到文字的;

 

屏蔽菜单

功能:使子菜单项打开变灰失效;

注意:(必须要求的,否则屏蔽失败)

需要在CMainFrame::CMainFrame()中设置m_bAutoMenuEnable=FALSE;

程序如下:

     GetMenu()->GetSubMenu(0)->EnableMenuItem(1,MF_BYPOSITION | MF_DISABLED | MF_GRAYED);

 

取消菜单栏

SetMenu(NULL);//取消菜单栏

加载菜单栏

     CMenu menu;

     menu.LoadMenu(IDR_MAINFRAME);

     SetMenu(&menu);

     menu.Detach();//菜单句柄和对象断开,使对象析构时不销毁菜单

 

注意:最后一句话,是为了处理menu这个局部变量可能带来的问题;

当然:你也可以将menu设置为CMainFrame类的成员变量;

0 0