karate框架UseParallelGC

硬盘兼容性hdc硬盘;

硬盘是现有的直流。 如果为NULL,则创建与当前程序显示器兼容的内存DC

hbitmapcreatecompatiblebitmap hdc hdc,int nWidth,int nHeight );

nWidth,nHeight是这个位图的宽度和高度

hdc必须是现有DC,不能为空,也不能是没有HBITMAP的hdc

在OnLButtonDown函数中,输入以下代码:

CDC *pDC=GetDC ;

CDC de;

CRect rect;

获取客户端rect;

de.createcompatibledcPDC;

CBitmap *pBmp;

pBmp=new CBitmap;

pbmp -创建兼容bitmap PDC,rect.Width ),rect.Height );

de .选择对象pbmp;

PDC-bitblt 0,0,rect.Width ),rect.Height ),de,0,0,SRCCOPY );

运行,点击鼠标左键,为什么会显示黑色画面? 是因为CreateCompatibleBitmap有什么问题吗? 请告诉我具体的原理~

使用CreateCompatibleBitmap创建兼容位图,并选择用于de,但没有在de中进行绘制操作,因此相应的位图中没有数据。 也就是说,都是0。 RGB 0,0,0 )为黑色,因此在支持PDC PDC )的程序的客户区域)中显示de时为黑色。

请尝试添加绘图代码。

例如,填充背景:

PDC-bitblt 0,0,rect.Width ),rect.Height ),de,0,0,SRCCOPY );

前面加一行

de.fillsolidrectrect,RGB ) 255,255,0 ); //填充背景颜色为黄色) )。

然后点击左键变成黄色。

CreateCompatibleBitmap函数功能:创建与指定设备环境相关联的设备兼容的位图。

函数原型: hbitmapcreatecompatiblebitmap hdc hdc,int nWidth,int nHeight );

参数:

hdc :设备环境句柄。

nWidth :指定位图的宽度以像素为单位)。

nHeight :指定位图的高度以像素为单位)。

返回值:如果函数成功执行,则返回值是位图的句柄。 如果函数执行失败,则返回值为空。 要获取更多错误消息,请调用GetLastError。

注:使用CreateCompatibleBitmap函数创建的位图的颜色格式与参数hdc标识的设备的颜色格式匹配。 可以为与原始设备兼容的任何内存设备环境选择位图。 因为内存设备环境允许彩色和单色两种位图。 因此,如果指定的设备环境是内存设备环境,则CreateCompatibleBitmap函数返回的位图格式不一定相同。 但是,为非内存设备环境创建的兼容位图通常具有相同的颜色格式,并使用与指定设备环境相同的调色板。

快查: Windows NT:3.1以上; Windows:95以上Windows CE:1.0以上头文件: wingdi.h; 库文件: gdi32.lib。

PS:与CreateCompatibleDC联合使用为什么有时候CDC的对象建立时用CreateDC,而有时候用CreateCompatibleDC?两者有什么不同?HDC CreateDC

lpctstr lpsz驱动器,//pointertostringspecifyingdrivername

lpctstr lpsz设备,//pointertostringspecifyingdevicename

LPCTSTR lpszOutput,//do not use; 设置为空

const devmode * LP initdata//pointertooptionalprinterdata

);

HDC CreateCompatibleDC

hdc hdc//handletothedevicecontext

);

CreateDC从设备创建直流,CreateCompatibleDC从现有直流创建与现有直流兼容的内存直流。 我在ondraw )上这么做了

CDC scrdc,memdc;

SCR DC.createdc 显示)、NULL、NULL、NULL );

memdc.createcompatibledcSCRDC;

memdc.bitblt 20,20,300,300,scrdc,0,0,SRCCOPY );

PDC-bitblt 20,20,300,300,memdc,0,0,SRCCOPY );

无法显示剪切的区域。

但如果是这样的话:

CDC scrdc,memdc;

SCR DC.createdc 显示)、NULL、NULL、NULL );

memdc.createcompatibledcSCRDC;

memdc.bitblt 20,20,300,300,scrdc,0,0,SRCCOPY );

PDC-bitblt 20,20,300,300,scrdc,0,0,SRCCOPY );

可以显示。

为什么通过兼容的直流就不行呢? 请说明白点。 在线等; 兼容直流就像照相机,里面没有你的底片,不能拍照。 与直流兼容的底片与位图兼容。

1 ) CDC scrdc,memdc;

2 ) SCR DC.createdc 显示)、NULL、NULL、NULL );

3 ) memdc.createcompatibledcSCRDC;

4 ) CBitmap memBMP; //制作底片

mem BMP.createcompatiblebitmap SCR DC,300,300 );

5 ) memdc.selectobjectmembmp ); //加入底片

//4 ),5 )少了两步

6 ) memdc.bitblt 0,0,300,300,scrdc,0,0,SRCCOPY );

7 ) PDC-bitblt 20,20,300,300,memDC,0,0,SRCCOPY ); caintDCDCthis;

CDC scrdc,memdc;

CBitmap buf;

SCRDC.createdcL’display ‘,NULL,NULL,NULL );

memdc.createcompatibledcSCRDC;

buf.createcompatiblebitmap SCR DC,300,300 );

memdc.selectobjectbuf;

memdc.bitblt 20,20,300,300,scrdc,0,0,SRCCOPY );

DC.bitblt 20,20,300,300,memdc,0,0,SRCCOPY );

只有CreateCompatibleDC是不够的,需要CreateCompatibleBitmap

然后选择对象

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注