CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  界面

初学者 简单的问题

楼主beihaiting(北海亭)2004-12-04 18:37:08 在 VC/MFC / 界面 提问

能不能给解释一下这几句代码?  
  也就是说,想弄清楚   CRect     CDC       CBitmap       CPaintDC     这几个类的具体关系。最好能说得通俗一点。初学者,不会什么,只知道这段代码的功能,却不很明白具体的类的作用。   谢谢。  
  代码如下:        
                  CPaintDC   dc(this);  
                  CRect   rect  
                  GetClientRect(&rect);  
                  CDC   dcMem;    
                  dcMem.CreateCompatibleDC(&dc);    
                  CBitmap   bmpBackground;  
                  bmpBackground.LoadBitmap(IDB_BITMAP1);  
                  BITMAP   bitMap;  
                  bmpBackground.GetBitmap(&bitMap);  
                  CBitmap   *pbmpOld=dcMem.SelectObject(&bmpBackground);  
                  dc.BitBlt(0,0,bitMap.bmWidth,bitMap.bmHeight,&dcMem,0,0,SRCCOPY); 问题点数:20、回复次数:12Top

1 楼EnochShen(小疯子:真的好菜—知耻而后勇!)回复于 2004-12-04 18:39:15 得分 0

CWnd::SetFont  
  void   SetFont(   CFont*   pFont,   BOOL   bRedraw   =   TRUE   );  
   
  Parameters  
   
  pFont  
   
  Specifies   the   new   font.  
   
  bRedraw  
   
  If   TRUE,   redraw   the   CWnd   object.  
   
  Top

2 楼EnochShen(小疯子:真的好菜—知耻而后勇!)回复于 2004-12-04 18:43:18 得分 0

发错了  
  CRect     得到客户区的大小  
  CDC       创建内存DC  
  CBitmap       你要画的图片  
  CPaintDC     用他来画Top

3 楼beihaiting(北海亭)回复于 2004-12-04 19:01:19 得分 0

可是,CRect不是一个矩形类吗?为什么CRect   rect;       GetClientRect(&rect);   会当前对话框的大小呢?  
  还有,CPaintDC   dc(this);为什么要dc(this)呢?  
  还有,CPaintDC   类和CDC究竟有什么区别?  
  能不能通俗一点用白话解释一下?  
  我最看不明白书上说得半文半白的话了。  
  谢谢  
  Top

4 楼beihaiting(北海亭)回复于 2004-12-05 10:07:41 得分 0

EnochShen的解释我倒是早知道  
  不过,想知道他们具体一点的关系Top

5 楼Jaogoy(想你)回复于 2004-12-05 10:27:35 得分 10

GetClientRect(&rect);//得到当前的类的CView或CWnd的客户窗口大小。  
  dcMem.CreateCompatibleDC(&dc);//得到一个兼容的CDC,可在上面画画什么的  
                  CBitmap   bmpBackground;  
                  bmpBackground.LoadBitmap(IDB_BITMAP1);//bmpBackground这个BMP图的类对象连接到ID为IDB_BITMAP1的一张BMP图  
   
                  BITMAP   bitMap;  
                  bmpBackground.GetBitmap(&bitMap);//得到这张BMP图的大小等信息放在BITMAP对象中  
                  CBitmap   *pbmpOld=dcMem.SelectObject(&bmpBackground);//让dcMem得到这张图,相当于在dcMem上画画,你也可以用dcMem.MoveTo(,);dcMem.LineTo(,);等画直线呀  
   
                  dc.BitBlt(0,0,bitMap.bmWidth,bitMap.bmHeight,&dcMem,0,0,SRCCOPY);//将画好的整张图画到当前的窗体上  
   
  明白了吗,我也是这段日子在用,才渐渐懂的。  
  加油哦!Top

6 楼wangjia184(我就是传说中的。。。。。。SB)回复于 2004-12-05 10:29:57 得分 0

就是画一个BMP图Top

7 楼beihaiting(北海亭)回复于 2004-12-05 14:49:13 得分 0

谢谢Jaogoy好像明白了一点  
  可是,我在后面再申请一个CDC   *PDC  
  让PDC->textout(0,0,"aaaaaa");  
  却调试通过,运行报错了  
  那是怎么回事啊?  
  是不是要先给PDC付一个值呢?  
  继续学习ingTop

8 楼beihaiting(北海亭)回复于 2004-12-05 14:54:45 得分 0

用lineto函数,没反应啊  
  怎么回事呢?Top

9 楼dengyl(龙)回复于 2004-12-05 15:28:37 得分 0

你CDC   *pdc;当然要给它个真正的DC值。要不这个指针指向的是哪,呵呵,不给指针赋值就使用,当然会出问题的。  
   
  你还是用这个,应该可以:  
  CDC   dc(this);//定义一个DC,它是和当前窗口联系的,所以给一个构造函数参数thisTop

10 楼beihaiting(北海亭)回复于 2004-12-05 15:33:45 得分 0

可是,直接用dcMem.lineto(100,100);  
  没反应啊Top

11 楼dengyl(龙)回复于 2004-12-06 09:25:00 得分 10

dcMem上的操作是在内存中画,要想窗口客户区有反应,就加上这句:  
   
  //下面这个dc是窗口的,可别搞成内存的了  
  dc.BitBlt(0,0,bitMap.bmWidth,bitMap.bmHeight,&dcMem,0,0,SRCCOPY);  
  Top

12 楼beihaiting(北海亭)回复于 2004-12-06 19:43:34 得分 0

明白了  
  谢谢Top

相关问题

  • 简单!
  • 简单
  • 简单~~~
  • 简单
  • 简单!
  • 简单
  • 简单
  • 简单……
  • 简单问题不简单!
  • 简单的简单啊!

关键词

  • dc
  • 内存
  • 代码
  • 客户
  • dcmem
  • bmpbackground
  • bitmap
  • cpaintdc
  • cdc
  • cbitmap

得分解答快速导航

  • 帖主:beihaiting
  • Jaogoy
  • dengyl

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo