有关CreateCompatibleDC的问题

来源:百度知道 编辑:UC知道 时间:2024/05/28 11:23:42
我刚刚看了这么一段程序:
CPaintDC dc(GetDlgItem(IDC_STA1));
CDC mdc;
mdc.CreateCompatibleDC(&dc);作用是什么?
GetDlgItem(IDC_STA1)->ShowWindow(SW_SHOW);//显示控件
调用第一行后,已经重绘IDC_STA1所代表的窗口,为什么还要调用后面的CreateCompatibleDC,不能直接的显示控件

CreateCompatibleDC它是产生与pDC指定设备兼容的设备上下文内存,设备上下文内存包含显示表面的信息,它用于在向实际的兼容设备表面发送图象之前在内存中作好准备的。

用于创建与支持的设备上下文,只有在位图已被创建并被选入设备上下文之中时,才使用GDI输出函数。
所以参数要添加&dc..

希望对楼主有用。

CreateCompatibleDC 创建兼容dc,也就是内存dc,一般用来双缓存绘制的。
这个dc不关联窗口句柄。只是在内存中的一个dc,颜色格式/索引表,取自参数dc。

你的这段代码里面,只是创建了 mdc,并没用使用她。

CDC mdc;
mdc.CreateCompatibleDC(&dc);作用是什么?

这2行,删除是没影响的。可能面的代码要用到mdc吧。

可以直接显示控件。
CDC mdc;
mdc.CreateCompatibleDC(&dc);这一组放在GetDlgItem(IDC_STA1)->ShowWindow(SW_SHOW);前后是没有关系的。
mdc.CreateCompatibleDC(&dc);这句是说mdc是一个对应于IDC_STA1这个控件所拥有的CPaintDC的一个内存DC(亦称兼容DC)。后面应该用到的吧,或是在ShowWindow之前对这个内存DC进行处理,然后恢复到原来的CPaintDC中,如果没用到,那这组代码是干扰代码/垃圾代码。