zoukankan      html  css  js  c++  java
  • MFC菜单项添加图标 禁用菜单项 设置默认菜单项

    void CbuttonDlg::OnLButtonDown(UINT nFlags, CPoint point) {  // TODO: 在此添加消息处理程序代码和/或调用默认值  CMenu menu;//菜单  CMenu* pPopupMenu;//菜单指针  CBitmap m_bitmap1,m_bitmap2,m_bitmap3;//位图

     menu.LoadMenu(IDR_MENU1);//加载ID为IDR_MENU1的菜单  m_bitmap1.LoadBitmap(IDB_BITMAP1);//加载ID为IDB_BITMAP1的位图  m_bitmap2.LoadBitmap(IDB_BITMAP2);//加载ID为IDB_BITMAP2的位图  m_bitmap3.LoadBitmap(IDB_BITMAP3);

     pPopupMenu = menu.GetSubMenu(0); //获取弹出菜单的第一层子菜单的类指针

     //为菜单的第一和第三项设置图标  pPopupMenu->CheckMenuItem(0,MF_BYPOSITION|MF_CHECKED); //设置第1个为被选中状态 图标显示为选中后的图标  pPopupMenu->CheckMenuItem(1,MF_BYPOSITION|MF_CHECKED); //设置第2个为被选中状态 因为没有加载图标 前面会显示 勾  pPopupMenu->EnableMenuItem(4,MF_BYPOSITION|MF_GRAYED); //设置第四项为灰色禁用  pPopupMenu->SetDefaultItem(ID_MENU1_32772,FALSE);  //当第二个参数为FALSE时,前面一个参数需要为ID标识名称 这里是设置第二个菜单为默认菜单项 会显示粗体  pPopupMenu->SetDefaultItem(3,TRUE);      //因为菜单中有分隔符,所有这里要设置标号为3 即第4项为默认菜单项  并且一个菜单中只能有一个默认项  pPopupMenu->SetMenuItemBitmaps(0,MF_BYPOSITION,&m_bitmap1,&m_bitmap3); // 其中第三个参数是未选中时图标,第四个参数是选中的图标,由于上面设置该菜单已选中,图标显示m_bitmap2  pPopupMenu->SetMenuItemBitmaps(3,MF_BYPOSITION,&m_bitmap2,&m_bitmap3);

     ClientToScreen(&point);//将鼠标单击处的坐标转换为屏幕坐标

     //弹出菜单函数,第一个参数表示快捷菜单的下边界与由参数y指定的坐标对齐

     //第二和第三个为x、y坐标,第四个表示拥有此菜单的窗口句柄,

     //第五个默认为NULL,表示当用户在菜单以外的区域按鼠标键时,菜单会消失

     pPopupMenu->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this,NULL);

     CDialog::OnLButtonDown(nFlags, point); }

    void CbuttonDlg::OnMenu132771() {  // TODO: 在此添加命令处理程序代码  MessageBox(L"点击菜单弹出的对话框"); }

    CheckMenuItem函数

        函数功能:该函数取得与指定菜单项相联系的菜单标志。如果该菜单项打开了一个子菜单,该函数也返回子菜单里的菜单项数。

      函数原型:DWORD CheckMenuItem(HMENU hmenu, UINT uIDCheckItem, UINT uCheck); 

      参数:

      hmenu:含有其菜单项的标志将被提取得的菜单的句柄。

      uIDCheckItem:制定要修改的菜单项。

      uCheck:表示标记的状态。此参数可取下列值之一:

      MF_BYCOMMAND:表示参数uId给出菜单项的标识符。如果MF_BYCOMMAND和MF_BYPOSITION都没被指定,则MF_BYCOMMAND是缺省值。

      MF_BYPOSITION:表示参数uId给出菜单项相对于零的位置。

      返回值:如果指定的项不存在,返回值是OXFFFFFFFF;如果菜单项打开了一个子菜单,则返回值的低位含有与菜单相联系的菜单标志,高位含有子菜单的项数。否则,返回值是莱单标志的掩码(布尔OR)。

      下面列出与菜单项相关的菜单标志。

      MF_CHECKED:放置选取标记于菜单项旁边(只用于下拉式菜单、子菜单或快捷菜单)。

      MF_DISABLED:使菜单项无效。MF_GRAYED:使菜单项无效并交灰。MF_HILITE:加亮菜单项。

      MF_MENUBARBREAK:对下拉式菜单、子菜单和快捷菜单,新列和旧列由垂直线隔开,其余功能同MF_MENUBREAK标志。

      MF_MENUBREAK:将菜单项放于新行(对菜单条)或无分隔列地放于新列(对下拉式菜单、子菜单或快捷菜单)。

      MF_SEPARATOR:创建一个水平分隔线(只用于下拉式菜单、子菜单或快捷菜单)。

      MF_UNCHECKED: Acts as a toggle with MF_CHECKED to remove a check mark next to the item

    SetMenuItemBitmaps 函数

    该函数将一个位图与制定菜单条目相关联。无论菜单条目被选中或被清除,系统都将在菜单条目之前显示一个(大小适当的)位图。

    Syntax

    BOOL SetMenuItemBitmaps(      HMENU hMenu, UINT uPosition, UINT uFlags, HBITMAP hBitmapUnchecked, HBITMAP hBitmapChecked );

    Parameters

    hMenu [in] 菜单句柄 uPosition [in] 指定将要改变的菜单条目,由uFlags参数决定。 uFlags [in] 指定uPosition参数如何被解释。该参数必须为下列值之一:

    MF_BYCOMMAND 表明uPosition参数赋给菜单条目的标识符。如果MF_BYCOMMAND和MF_BYPOSITION都未被指定,MF_BYCOMMAND就是默认的标识。 MF_BYPOSITION 表明uPosition赋给菜单条目相对位置。

    hBitmapUnchecked [in] 菜单项未被选中时的位图句柄 hBitmapChecked [in] 菜单项被选中时位图的句柄

    Return Value

    如果函数成功,返回非零值;如果函数失败,返回零值。

    Remarks

    如果hBitmapUnchecked 或 hBitmapChecked 参数为NULL,系统将不会在相应的选择状态下显示任何位图。如果此二参数都为NULL,系统将在菜单项被选中时显示默认的选中位图,并在取消该菜单项的选择后移除该位图。 当菜单被摧毁后,这些位图不会被摧毁;直到应用程序来摧毁他们为止。

    选择和清除位图应该为单色的。系统使用布尔值AND操作符来合并位图和菜单项,这样位图白色部分会变得透明,黑色部分会变成与菜单项颜色一致的颜色。如果使用彩色位图,结果可能出乎意料。 使用带有 CXMENUCHECK 和 CYMENUCHECK 值的GetSystemMetrics 函数可以获得位图的尺寸。  

  • 相关阅读:
    A Node Influence Based Label Propagation Algorithm for Community detection in networks 文章算法实现的疑问
    Fast Newman-FN算法以及模块度定义介绍
    Label Propagation Algorithm LPA 标签传播算法解析及matlab代码实现
    设计一个smartnic
    Intel GEN11 GPU
    Intel GEN9 GPU
    Shared Virtual Memory (SVM) Functions
    connect via ssh to virtualbox guest vm without knowing ip address
    smartnic
    技术精品翻译
  • 原文地址:https://www.cnblogs.com/haoyuanyuan/p/2879390.html
Copyright © 2011-2022 走看看