开发工具: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);
}
类似于在对话框编辑器放置的一个按钮控件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);
}
解决方案 »
- 写好的MFC程序不能在未装VS的机器上运行
- [GDI]CreateCompatibleDC()和CreateCompatibleBitmap()分别可以创建多少个?
- GetVersionEx区分操作系统
- CSDN测试
- ~在线等~!!哪位高手能帮忙解决ActiveX控件发布的问题,马上送200分!!
- 如何在程序中向CEdit控件添加新的文本,而不删除CEdit原有的内容?
- 谁有MP3和WAV转midi的源代码!
- 资源编辑器的实现原理!
- 应用程序中播放声音文件出错
- 谁知道把OICQ移到边上就自动隐藏的技术吗??
- 'Deletefile' : undeclared identifier的问题
- 在MFC SDI 环境下, 单击右上角的关闭按钮后如何弹出一个MessasgeBox?
可以做消息反射,或者子類化OO這個控件
{
// TODO: 在此添加专用代码和/或调用基类 if (m_pSelectedCtrl)
{
if (ReflectLastMsg(m_pSelectedCtrl->m_hWnd, pResult)) //此时,m_pSelectedCtrl->m_hWnd,为发送窗口,即子窗口的窗口句柄
return TRUE; // 子窗口已处理了此消息
} return CDialog::OnNotify(wParam, lParam, pResult);
}
可是没反应啊,还是不解!请指点,谢谢了。