关于CMainFrame的鼠标响应

       今天碰到一个在工具栏处添加坐标显示鼠标当前位置的小问题。

       前辈留下的代码的处理方式,是把Cmainframe中的工具栏权限直接改成了public,而后在CView中的Mousemove添加编辑。很直接的方法,我却觉得更改MFC代码的方式不大合适。

       在网上查找了一些资料。发现如下:

        1.Cmainframe确实是完全可以相应鼠标事件的。例如在View下重写showwindow,

用ShowWindow(SW_MINIMIZE)将view最小化,此时Cmainframe可以捕捉并响应鼠标的各种消息。

        2.见到一些人以空白的工具栏处不能响应Cmainframe的鼠标消息为由,而断定Cmainframe不能响应鼠标事件。看来关于工具栏处对于鼠标事件的处理,还需要研究。

        最终我的解决方式是在CView下重载了Cmainframe中的mousemove消息,并用sendmessage发送给Cmainframe。

       代码如下:

 

void CMainFrame::OnMouseMove(UINT nFlags, CPoint point)
{
          // TODO: 在此添加消息处理程序代码和/或调用默认值
          CString str;
          CMainFrame *pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
          CStatusBar *pStatus=&pFrame->m_wndStatusBar;
          if(pStatus)
         {
                str.Format(_T("%d,%d"),point.x,point.y);
                pStatus->SetPaneText(2,str);
          }

          CFrameWnd::OnMouseMove(nFlags, point);
}

 

 

void CTestView::OnMouseMove(UINT nFlags, CPoint point)
{
 // TODO: 在此添加消息处理程序代码和/或调用默认值
 CWnd *p = GetParent();
 p->SendMessage(WM_MOUSEMOVE,0,MAKELPARAM(point.x,point.y) );
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值