下面是鼠标的例子,在客户按下鼠标左键时,将会显示鼠标的当前位置坐标void CTestt1View::OnLButtonDown(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default CClientDC dc(this); 
char str[32];
    sprintf(str,"(%d,%d)",point.x ,point.y); 
dc.TextOut(point.x ,point.y ,str ,strlen(str));

  CView::OnLButtonDown(nFlags, point);
}
各位大虾:
CClientDC dc(this);  //这句话有什么用啊?sprintf(str,"(%d,%d)",point.x ,point.y);  //这句话有什么用?
                                          //执行这句话后,str 的值是多少呢?
dc.TextOut(point.x ,point.y ,str ,strlen(str)); //这句话有什么用呢?
                                         //这里为什么要 四个参数呢?
                                         //确定一个位置 point.x ,point.y 就够了啊?
CView::OnLButtonDown(nFlags, point);  //这句话有什么作用?
还有一个问题是,如果我把 sprintf(str,"(%d,%d)",point.x ,point.y);  注释掉则显示的是乱码,这是什么原因呢?谢谢!

解决方案 »

  1.   

    CClientDC dc(this);  //这句话有什么用啊?
    -- 获得当前对象的客户区DC(即画布)sprintf(str,"(%d,%d)",point.x ,point.y);  //这句话有什么用?
                                              //执行这句话后,str 的值是多少呢?
    -- 将point.x,point.y(即鼠标当前的坐标)格式化到str中
    -- 例如:如果鼠标的坐标是90,12则str的输出是“(90,12)”CView::OnLButtonDown(nFlags, point);  //这句话有什么作用?
    -- 调用父类的函数
    -- 父类可能还需要处理一些东西,如果不调用,可能会导致未知的错误sprintf(str,"(%d,%d)",point.x ,point.y);  注释掉
    -- 把这一句注释掉,str的值则不确定,输出自然是乱码
      

  2.   

    谢谢  lonely001 大哥:
    dc.TextOut(point.x ,point.y ,str ,strlen(str)); 这句话的意思是不是:
    在坐标值为(point.x ,point.y)的点输出 str 的值 和 strlen(str) 的值?但是 为什么要 strlen(str) 这个参数呢?是不是表示输出的长度?
    还向大哥请教的是:我不小心把 VC IDE 改变了模样,我想恢复为默认的,我我要怎么操作啊?谢谢大哥!
      

  3.   

    和我拿到的代码基本一样
    void CTestt1View::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default CClientDC dc(this); 
    char str[32];
        sprintf(str,"(%d,%d)",point.x ,point.y); 
    dc.TextOut(point.x ,point.y ,str ,strlen(str));

      CView::OnLButtonDown(nFlags, point);
    }
    各位大虾:
    CClientDC dc(this);  //这句话有什么用啊?  和GetDC一类的作用把参看
    http://www.yourblog.org/Data/20059/327387.html
    类CClientDC派生于CDC,在构造时调用了Windows函数GetDC,在析构时调用了ReleaseDC。这意味着和CClientDC对象相关的设备上下文是窗口的客户区。要了解有关CClientDC的更详细的信息,请参阅联机文档“Visual C++程序员指南斨械摹吧璞干舷挛臄部分。#include <afxwin.h> 
    请参阅  CDC sprintf(str,"(%d,%d)",point.x ,point.y);  //这句话有什么用?
                                              //执行这句话后,str 的值是多少呢?两个坐标值变为字符输出注意[应该这样看],%d。 这函数 和printf 基本一样 不过基于窗口 要由TextOut输出
    文字输出函式是TextOut。该函式的格式如下:TextOut (hdc, x, y, psText, iLength) ;
    dc.TextOut(point.x ,point.y ,str ,strlen(str)); //这句话有什么用呢?这个 只是MFC派生出来的用法 其实 [TextOut 也是派生出来吧 竟然没有原型,找不到] //Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
    //
                                             //这里为什么要 四个参数呢?
                                             //确定一个位置 point.x ,point.y 就够了啊?
    CView::OnLButtonDown(nFlags, point);  //这句话有什么作用?看名字就知道是按下鼠标左键
    还有一个问题是,如果我把 sprintf(str,"(%d,%d)",point.x ,point.y);  注释掉则显示的是乱码,这是什么原因呢?str hui 会是什么值 你说呢?谢谢!
    青下载我的帖子 熟读 
    书        名:Programming Windows程式开发设计指南
    出版日期:2000/6/2
    书        号:957-8239-73-4
     I  S  B  N:957-8239-73-4
    原  作  者:Charles Petzold
    译        者:余孟学
      

  4.   

    CClientDC dc(this);  //这句话有什么用啊?
    获得设备上下文,作图或文本输出时必须获得设备上下文