在线用户    站点地图 技术论坛 文档中心 站点导航 资源下载 语言参考 教程专题 站点统计 业务项目 使用帮助
您的位置
MSDN参考新加了CSS2参考,全中文,制作精良。245k下载。           新加了sxf_sxf推荐的"动态网页专家指导" 下载!          新加了lsg2002lsg推荐的"ASP.NET高级编程(PDF)" 下载!          新加了DHTML代码预览!!,功能强大哦!欢迎试用          新加了网友lincong为大家提供的SQL Server 2000 程序员指南,有点大,但同时也就说明内容全咯!           新加了网友ibra为大家提供的北大的JAVA课件,很适合初学者入门           新加了一个java的连接缓冲池代码示例           新加了人月神话电子版下载!软件工程巨著哦~~           更新了评分标准,引入了“专家分”概念,相信可以更好的激励大家的学习!详情请看“使用帮助”           新加了由网友GGG提供的“IIS超级管理手册”,值得一看哦!(虽然我没看过 :P )           新加了“英雄榜”,欢迎测试!           “无组件上传·从原理剖析到实践”已经全部完成,源码全部开放,有兴趣的朋友请到文档中心一探究竟。  您的位置  首页>文档中心>C++>文档A0000971 在同一窗口中打开页面中的链接 在新窗口中打开页面中的链接 将ASPCHINA设为首页 将ASPCHINA加入书签    
 LOGIN HERE
用户:
密码: 忘记密码
记住密码 用户注册 游客进入
相关文章

DIY文档视图

如何在 Visual C++.NET 2003 下编译eMule
发表文章
让左键弹出菜单响应自动更新

作者:happiness     提交人:happiness     发布时间:10-08-10     文章类型:原创     浏览量:3265
参考链结:http://    
关键字:MFC|PopupMenu|AutoUpdate
[本文档没有附件]
字体:    视力保护色: 杏仁黄  秋叶褐  胭脂红  芥末绿  天蓝  雪青  灰  银河白(默认色) [A0000971]

使用过MFC的都知道,自制的左键弹出菜单不会响应自动更新.除非你的左键菜单同时做到了主菜单上,才能响应自动更新,这是让人无法容忍的.如:你在资源中做好弹出菜单,如IDR_POPUP,项ID从ID_POPUPMENU_FIRST到ID_POPUPMENU_LAST,按照自动更新的常规做法:
//首先做好自动更新宏
ON_UPDATE_COMMAND_UI_RANGE(ID_POPUPMENU_FIRST, ID_POPUPMENU_LAST, OnUpdatePopupMenuCmd)
//再声明更新消息函数
afx_msg void OnUpdatePopupMenuCmd(CCmdUI* pCmdUI);
//再做好函数
void CYourView::OnUpdatePopupMenuCmd(CCmdUI* pCmdUI)
{
  BOOL bEnable = FALSE;
  switch (pCmdUI->m_nID)
  {
    case ID_POPUPMENU_FIRST:
      if (....)
      {
        bEnable = TRUE;
      }
      break;
    case //........
    case ID_POPUPMENU_LAST:
      if (....)
      {
        bEnable = TRUE;
      }
      break;
    }
    pCmdUI->Enable(bEnable);
}
//在WM_CONTEXTMENU消息中做好弹出代码,或把代码放到WM_RBUTTONUP消息中
void CYourView::OnContextMenu(CWnd* pWnd, CPoint point)
{
  HMENU hMenu = ::LoadMenu(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDR_POPUP));//弹出菜单资源
  HMENU hPopup = GetSubMenu(hMenu, 0);//第0个子菜单
  POINT pt = {point.x, point.y};
  ::ClientToScreen(m_hWnd, &pt);
  ::TrackPopupMenu(hPopup, TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_VERTICAL, pt.x, pt.y, 0, m_hWnd, NULL);//弹出它
}

你运行时会发现,你的弹出的菜单不会响应自动更新.跟踪一下,你会发现,你的自动更新函数没有被执行.如何做才能让左键弹出菜单响应自动更新呢?其实很简单:
//添加WM_INITMENUPOPUP消息响应函数
void CYourView::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu)
{
  CScrollView::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);
  int nCount = pPopupMenu->GetMenuItemCount();
  CCmdUI cmd;//创建自动更新类
  cmd.m_pMenu = pPopupMenu;
  cmd.m_nIndexMax = nCount;//MSDN上未介绍的成员变量
  for (int i = 0; i < nCount; i ++)
  {
    UINT nID = pPopupMenu->GetMenuItemID(i);
    if (nID != 0)//如果不是分隔符
    {
      cmd.m_nIndex = i;
      cmd.m_nID = nID;
      cmd.DoUpdate(this, TRUE);//MSDN上未介绍的成员函数,可以找到自动更新宏,传入CCmdUI指针,来执行自动更新
    }
  }
}
这样就可以了,以上代码测试通过...

关于这篇文章的评论 [注意:这里仅仅是给大家提供了一个发表对文章本身看法的地方,如果有疑问,请到论坛提出] 我要提问!
标题
内容
发言
*您尚未以注册用户身份登录,不能发表评论。这里登录
您的位置
  (c)2000-2018 Yup Studio, all rights reserved.  
62.5