右键弹出菜单

来灵 2008-01-10 11:43:43
开发工具:VS.Net 2003

各位好啊,碰到如下问题,不解,很纳闷,请指教!

问题描述:我想用鼠标右键点击动态所创建的一个对象OO,
类似于在对话框编辑器放置的一个按钮控件BB。我写的一个类CX,继承于CWnd 类,
然后在// AutoTestFlatDlg.cpp 文件中动态创建OO,创建的同时,加载一副位图显示到OO上,该OO非常类似于BB,当程序运行时,可以用鼠标来改变OO的大小和移动它的位置。现在,我想当OO被鼠标选中之后,光标在OO所在矩形区域内时,点右键即弹出菜单。可是,选中OO之后,将光标移动到对话框的其它地方才能弹出菜单。当我在函数头设置断点后,调试,发现当光标在OO所在矩形区域内根本不执行OnRButtonDown函数,请问这怎么回事呢?

代码:

//断点// void CAutoTestFlatDlg::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (nFlags = MK_RBUTTON )
{
BringWindowToTop();

//CWnd * dlg = m_pSelectedCtrl->GetParent();
//CRect WndRect;
//dlg->GetWindowRect(&WndRect);
//dlg->ScreenToClient(&WndRect);

//::GetCursorPos(&point);
//ScreenToClient(&point);


//m_pSelectedCtrl->GetDlgItem(dlgID);
//m_pSelectedCtrl->SetFocus();

if (m_pSelectedCtrl) //当所创建的对象被选中时,便执行if语句里的内容
{
CWnd *pWnd = ChildWindowFromPoint(point);
CMenu bar;
if (bar.LoadMenu(IDR_MENU2))
{
CMenu & popup = *bar.GetSubMenu(0);
ASSERT(popup.m_hMenu != NULL);

ClientToScreen(&point);
popup.TrackPopupMenu(TPM_RIGHTBUTTON, point.x, point.y, pWnd);
}

}
}

CDialog::OnRButtonDown(nFlags, point);
}

...全文
125 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hityct1 2008-01-11
  • 打赏
  • 举报
回复
popup.TrackPopupMenu(TPM_RIGHTBUTTON,point.x, point.y,pWnd);

这句。最后一个参数应该决定了右键菜单在哪个窗口显示。
pomelowu 2008-01-10
  • 打赏
  • 举报
回复
你的OO是控件吧?它自己攔截了鼠標消息,然後你在父窗口裡邊處理右鍵消息,自然收不到。
可以做消息反射,或者子類化OO這個控件
来灵 2008-01-10
  • 打赏
  • 举报
回复
请问怎么做呢?
来灵 2008-01-10
  • 打赏
  • 举报
回复
请问一下,如果用消息反射做的话,是不是要在AutoTestFlatDlg.cpp 中添加OnNotify函数呢?

如下,

BOOL CAutoTestFlatDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
// TODO: 在此添加专用代码和/或调用基类

if (m_pSelectedCtrl)
{
if (ReflectLastMsg(m_pSelectedCtrl->m_hWnd, pResult)) //此时,m_pSelectedCtrl->m_hWnd,为发送窗口,即子窗口的窗口句柄
return TRUE; // 子窗口已处理了此消息
}

return CDialog::OnNotify(wParam, lParam, pResult);
}


可是没反应啊,还是不解!请指点,谢谢了。
来灵 2008-01-10
  • 打赏
  • 举报
回复
谢谢版主大哥的点拨!嗯,我说的OO算是控件吧。不过你说的第一个做消息反射我还可以理解,第二个不明白啊,能不能讲详细一些呢?

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧