读书人

MFC单文档关于界面坐标的一个有关问题

发布时间: 2012-03-09 16:54:57 作者: rapoo

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配套使用

读书人网 >C++

热点推荐