VC编程练习之API笔记(四)

1、  标记弹出菜单:

    GetMenu():获得指向窗口的指针;

    GetSubMenu(int nPos):指向CMenu对象弹出菜单的指针,nPos为弹出菜单的位置

    CheckMenuItem(UINT nIDCheckItem, UINT nCheck):标记或取消弹出菜单;nIDCheckItem为被标识的菜单,nCheck表示如何标记菜单及如何表示弹出菜单位置

示例:GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_BYPOSITION|MF_CHECKED);

    新建菜单被标识了。CheckMenuItem()也可以用控件ID来标识,nCheck为MF_BYCOMMAND

如图1

2、设置菜单项字体为粗字体:

       SetDefaultItem( UINT uItem, BOOL fByPos = FALSE );

       uItem为新菜单的位置,fByPos为区域句柄,fByPos = FALSE设置无效

       示例:GetMenu()->GetSubMenu(0)->SetDefaultItem(2,TRUE);//设置第一个子菜单页的第三个选项为粗字体

如图2

3、  为菜单项添加图形标记:

       BOOL LoadBitmap( LPCTSTR lpszResourceName );// lpszResourceName为指向位图名字的字符串常量指针

       BOOL  LoadBitmap( UINT nIDResource );// nIDResource位图资源的ID号

       BOOL SetMenuItemBitmaps(UINT nPosition, UINT nFlags, const CBitmap* pBmpUnchecked, const CBitmap* pBmpChecked );// 1)、nPosition为菜单项位置

2)、nFlags= MF_BYCOMMAND时,nPosition为菜单项的ID,nFlags= MF_BYPOSITION时,nPosition为菜单项的索引。

3)、pBmpUnchecked为菜单项以前用的位图,pBmpChecked为新加载位图

       示例:

  m_bitmap.LoadBitmap(IDB_BITMAP1);//载入位图
       GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(0,MF_BYPOSITION,NULL,&m_bitmap);//用位图标记第一个子菜单项的第一个菜单
       m_bitmap2.LoadBitmap(IDB_BITMAP2); //载入位图
       GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(1,MF_BYPOSITION,NULL,&m_bitmap2);//用位图标记第一个子菜单项的第二个菜单

       设计位图的时候,需将位图压缩为13x13,否则在菜单中无法显示位图。

如图3

4、  设置菜单项不可选,即设置菜单项为灰色不可操作:

       UINT EnableMenuItem( UINT nIDEnableItem, UINT nEnable );

       nIDEnableItem:表示需要操作的菜单项

       nEnable:可选值为

              1)、MF_BYCOMMAND 第一个参数用ID号表示

              2)、MF_BYPOSITION   第一个参数用菜单所在位置表示

              3)、MF_DISABLED   菜单不可用

              4)、MF_ENABLED  菜单可用

              5)、 MF_GRAYED   菜单变灰

示例:GetMenu()->GetSubMenu(0)->EnableMenuItem(1,MF_BYPOSITION | MF_DISABLED | MF_GRAYED);//设置第一个菜单页的第二个菜单项为灰色,不可选

如图4:

5、  单击菜单使菜单栏消失:

添加菜单响应函数SetMenu(CMenu* pMenu),pMenu为NULL则菜单栏消失。

菜单生效/无效:

为菜单项添加CN_UPDATE_COMMAND_UI的消息响应函数,代码如下:

if(ID_FILE_NEW==pCmdUI->m_nID)

           pCmdUI->Enable(FALSE);//令ID无效,Enable(TRUE)为有效

6、  鼠标右键按下弹出菜单项:

       BOOL TrackPopupMenu( UINT nFlags, int x, int y, CWnd* pWnd, LPCRECT lpRect = NULL );

1)、nFlags:弹出菜单的位置

2)、x:弹出菜单的水平位置

3)、y:弹出菜单的垂直位置

4)、pWnd:弹出菜单的拥有者

5)、lpRect:包含矩形坐标的RECT结构体指针

示例:

void CCMenu_7View::OnRButtonDown(UINT nFlags, CPoint point) //添加鼠标右键按下消息

{
       // TODO: Add your message handler code here and/or call default
        CMenu menu;
       menu.LoadMenu(IDR_MENU1);
       CMenu *pPopup=menu.GetSubMenu(0);
       ClientToScreen(&point); //坐标换算
    pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,
                     this);
       CView::OnRButtonDown(nFlags, point);
}

右键弹出菜单还可以这样做:选择【project】->【Add to Project】->【component and controls】->【Visual c++ component】->【Pop-up】

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值