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 函数可以获得位图的尺寸。  

  • 相关阅读:
    解析大型.NET ERP系统 20条数据库设计规范
    vi显示行号
    shell awk
    Linux使用Shell脚本实现ftp的自动上传下载
    MySQL Replication的Reset slave重置命令
    怎么样调整FreeBSD时区问题
    Basic Memory Structures
    States of Integrity Constraints
    Merging into a Table: Example
    oracle 单独开始一个事物的写法 。
  • 原文地址:https://www.cnblogs.com/haoyuanyuan/p/2879390.html
Copyright © 2011-2022 走看看