我在一个对话框MyDlg中,加入了一个EditBox--> MyEdit, 在MyEdit上单击鼠标右键,弹出自己定义的菜单MyMenu, 那么该菜单事件是否应该写入对话框MyDlg的事件中呢?

解决方案 »

  1.   

    TrackPopupMenu指定的窗口句柄是什么,由它接收消息。
      

  2.   

    BOOL TrackPopupMenu(          HMENU hMenu,
        UINT uFlags,
        int x,
        int y,
        int nReserved,
        HWND hWnd,
        HWND prcRect
    );
    hWnd
    [in] Handle to the window that owns the shortcut menu. This window receives all messages from the menu.
      

  3.   

    这时弹出的菜单显然大多数应该是对这个编辑框进行操作吧,
    如果是这样,当然应该把该菜单事件写入对话框MyDlg的事件中
      

  4.   

    是我说的不太清楚,下面是部分代码
    void CMyEdit::OnRButtonDown(UINT nFlags, CPoint point) 
    {
    ClientToScreen(&point);
    CMenu menu;
    VERIFY(menu.LoadMenu(IDR_MNU_FORMAT));
    CMenu* popup = menu.GetSubMenu(0);
    ASSERT( popup != NULL );
    popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);

    return;
    CEdit::OnRButtonDown(nFlags, point);
    }上面的 menu: IDR_MNU_FORMAT 中有一个项目 ID_LEFT, 我在点击该项目时,希望能够在 CMyEdit 所在对话框窗体 MyDlg 中接受到该消息。但是我利用向导生成的代码虽然包含该事件,却无法实现该事件的内容。如下示:
    MyDlg.h
    class MyDlg: public CDialog{protected:
              ..........
              afx_msg void OnLeft();
              ...........
    }MyDlg.Cpp
    {
               ...............          BEGIN_MESSAGE_MAP(FormatManagerDlg, CDialog)
           //{{AFX_MSG_MAP(FormatManagerDlg)
                      ......................
    ON_COMMAND(ID_LEFT, OnLeft)
                      ......................
           //}}AFX_MSG_MAP
              END_MESSAGE_MAP()
              
              ..............
    }void MyDlg::OnLeft() 
    {
    AfxMessageBox("ok");           ---->此处代码不执行
    }
    请大家帮忙想一下!谢谢大家!
      

  5.   

    popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
    这一句中的this改为this->GetParent()
    在这里指定哪个窗口接收消息。
      

  6.   

    谢谢 eterblue(云流) ,谢谢大家,问题解决!