代码先锋网 代码片段及技术文章聚合

GetMenuItemInfo & InsertMenuItem 枚举和追加菜单操作



int _AppendMenuOp(HMENU hDst, HMENU hSrc)
{
  int iCnt = 0;
  
  ASSERT(hDst && hSrc);

  for(int iSrc=0, iDst=GetMenuItemCount(hDst); iSrc<GetMenuItemCount(hSrc); iSrc++)
  {
    TCHAR szMenuStr[256] = {0};
    MENUITEMINFO mInfo = {0};
    mInfo.cbSize = sizeof(mInfo);
    mInfo.fMask = 0
      | MIIM_CHECKMARKS //Retrieves or sets the hbmpChecked and hbmpUnchecked members. 
      | MIIM_DATA //Retrieves or sets the dwItemData member. 
      | MIIM_ID //Retrieves or sets the wID member. 
      | MIIM_STATE //Retrieves or sets the fState member. 
      | MIIM_SUBMENU //Retrieves or sets the hSubMenu member. 
      | MIIM_TYPE //Retrieves or sets the fType and dwTypeData members. 
      | 0;
    mInfo.dwTypeData = szMenuStr;
    mInfo.cch = _countof(szMenuStr);

    VERIFY(GetMenuItemInfo(hSrc, iSrc, TRUE, &mInfo));

    if(mInfo.hSubMenu)
    {
      HMENU hSub = CreatePopupMenu();
      _AppendMenuOp(hSub, mInfo.hSubMenu);
      mInfo.hSubMenu = hSub;                    
    }

    InsertMenuItem(hDst, iDst++, TRUE,  &mInfo);
    iCnt++;
  }

  return iCnt;
}

void CDlg3Dlg::OnContextMenu(CWnd* pWnd, CPoint point) 
{
  // TODO: Add your message handler code here
  CMenu m1,m2, pm;
  m1.LoadMenu(IDR_MENU1);
  m2.LoadMenu(IDR_MENU2);

  pm.CreatePopupMenu();
  _AppendMenuOp(pm.m_hMenu, m1.m_hMenu);
  pm.AppendMenu(MF_SEPARATOR, 0, _T(""));
  _AppendMenuOp(pm.m_hMenu, m2.m_hMenu);
 
  pm.TrackPopupMenu(0, point.x, point.y, this);

}


版权声明:本文为zgl7903原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zgl7903/article/details/71077441

智能推荐

JavaScript中的逻辑运算符&amp;amp;&amp;amp;和||详解(运算法则、短路实例)

运算原理: 1. 将 && 和 ||  两边的值转成Boolean 类型 2. 逻辑运算(数值换成Boolean值的规则:object、非零整数、非空字符串为 true; 其他为 false) 3. 若 true,&&运算返回后面的值;|| 运算返回前面的值  &&和|| 逻辑运算符也支持circuit原则: 具体运算过...

或操作(||)和与操作(&amp;&amp;)的执行顺序以及返回结果

js中|| 和&&的执行结果默认是0为false。 a && b ,如果 a 为true,直接返回b,而不管b为true或者false,否则返回a; a || b ,如果 a 为false,直接返回b,而不管b为true或者false,否则返回 a。 var result = true && false; (一)逻辑与的真值表(有假即假) 第一个操作...

牛客练习赛17 C-操作数&amp;&amp;矩阵快速幂

链接:https://www.nowcoder.com/acm/contest/109/C 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 给定长度为n的数组a,定义一次操作为: 1. 算出长度为n的数组s,使得si= (a[1] + a[2] + ... + a[i]) mod...

关于状态码中二进制计算操作的问题(&amp;amp;,^,|)

例如:有以下状态码需要进行操作 用户绑定手机状态码的状态为1(0001),用户绑定邮箱的状态为2(0010),则既有用户绑定手机状态码和用户绑定邮箱的状态为3(0011) ----------------------------------------------------->>> 判断是否有某个状态值,用&判断 以上面为例,0011&0010  &n...

常见算法 - 硬币找零 &amp;&amp; 等和拆分数组

动态规划练习: 1.硬币找零(leetcode322) 给定一组硬币数,找出一组最少的硬币数,来找换零钱N。 比如,可用来找零的硬币为: 1、3、4   待找的钱数为 6。用两个面值为3的硬币找零,最少硬币数为2。而不是 4,1,1 2.等和拆分数组     判断能否将给定数组拆分成数组和相等的两个数组(leetcode416)   &n...

猜你喜欢

关于 “与” &amp;&amp; 和 “或” || 在js开发中的实际应用

&&:与,全真才为真,一假则为假   |  |:或,一真则为真,全假才为假 但是这两个逻辑操作符绝对不是用来if()语句判断这么简单,如下例: &&:短路语句。基础应用: 高级应用:     |  |:基础应用 高级应用...

memcached &amp;amp; redis

参考http://www.cnblogs.com/wupeiqi/articles/5132791.html     以下例子在电脑上运行过,但是没有效果,暂时没有找到原因 管道:     redis-py默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作,如果想要在一次请求中指定多个命令,则可以使用piplin...

栈&amp;&amp;队列

1、stack stack 模板类的定义在<stack>头文件中。 stack 模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素类型是必要 的,在不指定容器类型时,默认的容器类型为deque。 定义stack 对象的示例代码如下: stack<int> s1; stack<string> s2; stack 的基本操作有: 入栈,如例:s.pus...

引用(&amp;amp;)

1、 引用(&)是对象的别名,不是新定义一个变量,对引用的操作与对对象的直接操作完全相同。引用本身不是一种数据类型,不占内存,系统也不给引用分配存储单元,因此对引用求地址就是对目标变量求地址。 2、 引用声明的时候必须初始化,且必须以对象初始化(初始化是指明引用指向哪个对象的唯一方法)。 3、 当引用初始化后,只要该引用存在,它就保持绑定到初始化时指向的对象,不能再指向其他对象。 4、 C...

Ubuntu 18.04 mysql安装

打算做个网站,学着安装mysql。网上查了一些教程,最后找到官网教程以及另一个教程,互为参照。我采用APT库安装方式,步骤如下: 在https://dev.mysql.com/downloads/repo/apt/下载.deb包并安装,出来图形界面直接默认选ok就行 更新 如果出现以下关于签名的问题 参考https://serverok.in/mysql-8-apt-error-the-follo...