各位大虾,请帮我解释这几句话,好吗?谢谢!

tiger_wolf 2005-11-22 04:56:28
下面是鼠标的例子,在客户按下鼠标左键时,将会显示鼠标的当前位置坐标

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); 注释掉

则显示的是乱码,这是什么原因呢?

谢谢!
...全文
222 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tiger_wolf 2005-11-23
  • 打赏
  • 举报
回复
谢谢各位大哥!
各位大哥真是太好了!
Pipi0714 2005-11-22
  • 打赏
  • 举报
回复
呵呵,你的问题还挺多!
baggio1984 2005-11-22
  • 打赏
  • 举报
回复
CClientDC dc(this); //这句话有什么用啊?
获得设备上下文,作图或文本输出时必须获得设备上下文
kzzk 2005-11-22
  • 打赏
  • 举报
回复
和我拿到的代码基本一样


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
译 者:余孟学
tiger_wolf 2005-11-22
  • 打赏
  • 举报
回复
谢谢 lonely001 大哥:
dc.TextOut(point.x ,point.y ,str ,strlen(str));

这句话的意思是不是:
在坐标值为(point.x ,point.y)的点输出 str 的值 和 strlen(str) 的值?

但是 为什么要 strlen(str) 这个参数呢?是不是表示输出的长度?


还向大哥请教的是:

我不小心把 VC IDE 改变了模样,我想恢复为默认的,我我要怎么操作啊?

谢谢大哥!
布学无数 2005-11-22
  • 打赏
  • 举报
回复
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的值则不确定,输出自然是乱码

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧