MFC单文档关于界面坐标的一个问题
我用单文档创建了一个按钮,然后想实现鼠标移动进按钮的范围时候的一些功能。
代码简单如下:
- C/C++ code
int CMyUIView::OnCreate( LPCREATESTRUCT lpCreateStruct ){ CRect rc; rc.left=100;rc.top=100;rc.right=200;rc.bottom=150; m_btn.Create("MyUI",WS_CHILD|WS_VISIBLE,rc,this,IDC_MY); return CView::OnCreate(lpCreateStruct);}void CMyUIView::OnMouseMove( UINT nFlags, CPoint point ){ CRect rc1; m_btn.GetWindowRect(&rc1); ScreenToClient(&rc1); ScreenToClient(&point); if (PtInRect(rc1,point)) { AfxMessageBox("HAHA"); } CDC* pDC=GetDC(); CString str; str.Format("%d,%d",point.x,point.y); pDC->DrawText(str,CRect(0,0,200,20),DT_LEFT); UpdateData(TRUE); CView::OnMouseMove(nFlags,point);}
rc1的区域算是对的(100,100,200,150),,但是point的坐标却是错的,我在下面输出point的坐标,发现0,0点怎么不是在界面的左上角,导致我鼠标的坐标和rc1的坐标是对应不上的,没办法实现功能。大家知道这是什么原因吗?
还有一个小问题是我DrawText输出的话,没办法更新整个绘制区,导致新的文字在旧文字上面,不知道有什么可以改进的吗?
[解决办法]
还有种方法,比如说在CRect rc1;这句后加上SetCapture();你再看看结果,这里是举个例子,在这个地方用的不对,另外SetCapture必须和ReleaseCapture配套使用