我想在日历控件上(MFC的DateTimePicker控件)上弹出TAH(上下文菜单,类似pc上的右键弹出菜单),请问该如何实现,能给个例子吗?

yqivy   2009-2-5 14:57 楼主
网上的例子都千篇一律的出自codeproject上一位葡萄牙工程师的论文,看了几遍都没看懂,里面很多函数参数不知从何而来.不知大哥能否给小弟指导一下?感激不尽

回复评论 (5)

对COM有概念吗?而且在日历上完成和在那个控件上完成是两个完全不同的概念。
点赞  2009-2-5 15:04
我是新手 不懂com.
跟这有关系吗?
不懂com难道就做不出来这个吗?
点赞  2009-2-5 15:18
刚才做了个实验  在对话框上实现了该功能  看来我的弹出菜单被控件挡住了

  1. void CfdDlg::OnLButtonDown(UINT nFlags, CPoint point)
  2. {
  3.         // TODO: Add your message handler code here and/or call default
  4.         SHRGINFO shrgi = {0};

  5.         shrgi.cbSize        = sizeof(SHRGINFO);
  6.         shrgi.hwndClient    = m_hWnd;
  7.         shrgi.ptDown.x      = point.x;
  8.         shrgi.ptDown.y      = point.y;
  9.         shrgi.dwFlags       = SHRG_RETURNCMD;

  10.         if(GN_CONTEXTMENU == ::SHRecognizeGesture(&shrgi))
  11.                 ContextMenu(point);
  12.         else
  13.                 Default();
  14.         CDialog::OnLButtonDown(nFlags, point);
  15. }

  16. void CfdDlg::ContextMenu(CPoint point)
  17. {
  18.         CMenu        mnuCtxt;
  19.         CMenu*        pMenu;
  20.         CWnd*        pWnd;

  21.         if(!IDM_MENU1)
  22.                 return;

  23.         if(mnuCtxt.LoadMenu(IDM_MENU1))
  24.         {
  25.                pWnd = (/*m_pWndMenu ? m_pWndMenu : */AfxGetMainWnd());//就这个m_pWndMenu参数不知什么意思我直接用的AfxGetMainWnd()

  26.                 pMenu = mnuCtxt.GetSubMenu(0);
  27.                 if(pMenu)
  28.                 {

  29.                         ClientToScreen(&point);pMenu->TrackPopupMenu(TPM_LEFTALIGN,
  30.                                 point.x, point.y, pWnd);
  31.                 }
  32.         }
  33. }



The m_pWndMenu member variable holds a pointer to the command-processing window. This is useful if you want to show TAH context menus on controls placed in dialogs. In these situations you cannot use AfxGetMainWnd() because your menu commands might be either grayed, or worse, handled by another (hidden) window. So, m_pWndMenu will have the containing CDialog pointer.
这是codeproject上面对这个参数的解释,可惜小弟英文不行,没看懂.望各位大哥给予解释说明.
点赞  2009-2-5 15:37
弹出菜单就是用TrackPopupMenu,在什么位置弹出都可以,不过最好响应鼠标的UP消息,因为DOWN消息通常会有其它作用。
点赞  2009-2-5 16:39
忘记说明了,我这个是在WinCE下想要在控件上实现上下文菜单.必须用OnLbuttonDown()
BEYONDMA 大哥知道我的意思
我觉得关键就在于m_pWndMenu这个参数如何赋值
点赞  2009-2-5 18:35
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复