void CLesson9View::OnMouseMove(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
CString str;
str.Format("x=%d, y=%d", point.x, point.y);//输出的同时将数据保存到了str中了?
// ((CMainFrame *)GetParent())->m_wndStatusBar.SetPaneText(0, str);//与下面的方法效果一样
((CMainFrame *)GetParent())->m_wndStatusBar.SetWindowText(str);
//系统是怎么知道在状态栏处输出坐标值的?这里我不太明白!
CView::OnMouseMove(nFlags, point);
}
这个函数就想在鼠标移动的过程中在状态栏中显示鼠标的坐标值,str.Format("x=%d, y=%d", point.x, point.y);是什么意思?输出坐标x,y?还是将point.x和 point.y放置到一个内存buffer(即str)中?

解决方案 »

  1.   

    CString是一个类。假设现在你的point.x=20,point.y=30,那么就是将"x=20, y=30"这个字符串放进了str的Buff中了,你可以理解成它的实质性内容。系统是怎么知道在状态栏处输出坐标值的?这里我不太明白!这是你的问题,不是系统知道,而是你的程序强制把这段字符给写上去了。((CMainFrame *)GetParent())->m_wndStatusBar.SetWindowText(str); 
    这句话是得到父窗口的状态栏的指针后,将状态栏的字符刷成了str在Windows编程中,所有的控件都是窗口,都有句柄和指针
      

  2.   

    以前不知道这种用法,调试了一下,CString真是比较强大。是不是还可以有类似
    str.Format("x=%d, y=%d,z=%d", point.x, point.y,Z);的用法?
    测试了一下,真是可以。不过,不知道到底能有多少个这样参数?a,b.,c,d,e,f,g,hi,j,……?
      

  3.   

    系统是怎么知道在状态栏处输出坐标值的?这里我不太明白!m_wndStatusBar是一个状态栏对象指针,((CMainFrame *)GetParent())->m_wndStatusBar.SetWindowText(str);其中,SetWindowText(str)是让状态栏显示str中的字符串,而你在str中保存了鼠标的坐标值,最后当然会在状态栏处输出坐标值。
    str.Format("x=%d, y=%d", point.x, point.y);是什么意思?
    将鼠标的CPoint类型坐标值转换成CString类型的字符串,并保存在str中。