初学者 简单的问题
能不能给解释一下这几句代码?
也就是说,想弄清楚 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




