请教一个基本天天都看到的界面是怎么实现的?如下:QQ菜单 右键联系人->移动联系人至->组右键联系人,建立弹出式菜单,移动联系人至,需要根据QQ组的个数和名称动态创建组的菜单当组的菜单菜单创建完成后,怎么产生消息呢?譬如我要将该联系人从当前组移动至组A,鼠标单击即移动成功。

解决方案 »

  1.   

    第一步:
    在程序的适当位置(右键单击联系人响应函数里)动态生成菜单:
    String groupStr[] = GetDocument()->m_groupStr;//动态获取组的信息(一般以成员变量的方式保存到CDocument中或其派生类中)
    CMenu menu; //创建弹出菜单
    menu.CreatePopupMenu(); 
    for(int i=0; i<groupID.length; i++)
    {
      //将groupStr[i]中保存的组的字符串添加进Popup菜单
      GetMenu()->AppendMenu(MF_POPUP,(UINT)menu.m_hMenu,groupStr[i]); 
      menu.AppendMenu(MF_STRING,IDM_TEST(IDM_USER+i),groupStr[i]); 
      menu.Detach(); 
    }
    第二步:声明Popup菜单响应函数
    afx_msg void OnMoveToGroupID(int groupID); 
    第三步:将消息响应函数与菜单项关联起来
    ON_COMMAND(groupID[i].id,OnMoveToGroupID)
    第四步:在OnMoveToGroupID(int groupID)判断鼠标单击的位置以此来判断选中了那个菜单项,然后switch/case判断就可以了。最后一步是关键,大致流程就是这样子。
      

  2.   

    能不能通过 PreTranslateMessage(MSG* pMsg) 消息来实现呢?