永发信息网

C语言中CreateCompatibleDC函数怎么使用?求一套例程

答案:2  悬赏:0  手机版
解决时间 2021-02-22 11:25
C语言中CreateCompatibleDC函数怎么使用?求一套例程
最佳答案
函数功能:该函数创建一个与指定设备兼容的内存设备上下文环境(DC)。
函数原型:HDC CreateCompatibleDC(HDC hdc);
参数:
hdc:现有设备上下文环境的句柄,如果该句柄为NULL,该函数创建一个与应用程序的当前显示器兼容的内存设备上下文环境。
返回值:如果成功,则返回内存设备上下文环境的句柄;如果失败,则返回值为NULL。

CreateCompatibleDc函数只适用于支持光栅操作的设备,应用程序可以通过调用GetDeviceCaps函数来确定一个设备是否支持这些操作。
当不再需要内存设备上下文环境时,可调用DeleteDc函数删除它。

用双缓冲的话还要再定义一个位图对象吧,然后用CreateCompatibleBitmap建立一个与屏幕显示兼容的位图,再用SelectObject将位图选入到内存显示设备中,不知道是不是这样

首先给出实现的程序,然后再解释,同样是在OnDraw(CDC *pDC)中:
CDC MemDC; //首先定义一个显示设备对象
CBitmap MemBitmap;//定义一个位图对象
//随后建立与屏幕显示兼容的内存显示设备
MemDC.CreateCompatibleDC(NULL);
//这时还不能绘图,因为没有地方画 ^_^
//下面建立一个与屏幕显示兼容的位图,至于位图的大小嘛,可以用窗口的大小,也可以自己定义(如:有滚动条时就要大于当前窗口的大小,在BitBlt时决定拷贝内存的哪部分到屏幕上)
MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight);

//将位图选入到内存显示设备中
//只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
//先用背景色将位图清除干净,这里我用的是白色作为背景
//你也可以用自己应该用的颜色
MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255));
//绘图
MemDC.MoveTo(……);
MemDC.LineTo(……);

//将内存中的图拷贝到屏幕上进行显示
pDC->BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY);
//绘图完成后的清理
MemBitmap.DeleteObject();
MemDC.DeleteDC();

gdi在sdk应该是很重要的东西,不过嘛自己的水平实在是不怎么够品。长久以来一直都没有认识到 CreateCompatibleDC 的用途到底在这里,不过还好从知道这个东西数起的200天内,我终于还是晓得一些关于这个函数或者说内存dc存在的意义了。
在这种情况下,假如你要对屏幕进行比较多的gdi函数操作,如果每一步操作都直接对屏幕dc进行操作,那出现的大多数可能性都是屏幕的闪烁。一个很好的解决方法就是使用内存dc,将这些操作全部先在内存dc上操作,然后依次性在屏幕上进行操作。
例如:如果你单单使用bitblt在屏幕上拷贝一个图,那可以直接使用屏幕的dc。但是如果你要先设置背景(fillrect)然后再bitblt的话,这就涉及到两个屏幕dc的操作,这样的话屏幕很容易闪烁。
全部回答
http://blog.csdn.net/gaoxin1076/article/details/7737694
这里有详细的介绍,较实用的为自定义屏幕截取功能.
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
【sele gift why not store clothes sweater
电脑不能识别固态硬盘怎么破
深圳泥岗村附近的邮政局在哪
KBNE银泰店地址有知道的么?有点事想过去
什么是低分化腺癌
威海市胶东地区引黄调水工程建设管理局这个地
编写程序对表达式求值
有个说法,很多国产四驱都是假四驱是什么意思
54和72的最大公因数
我想用L Z朗姿做店名,能不能,有侵权行为吗
Y613/Y003(路口)在什么地方啊,我要过去处理
剑侠2里荣耀怎么升级成武功施展速度+10%秘籍
衣服上很多水钻装饰,最近想全弄掉,但是粘得
橘黄色大理石抛釉踢脚线选择什么颜色的门套颜
南京国际马戏城地址在什么地方,想过去办事
推荐资讯
靶向给药系统
王志[面对面]节目的[与神话较量的人] 谁知道
鱼缸养几条鱼,里面可以放几块煤炭吗?
怎么看微博最近访客
淘宝直通车怎么开
科学家发现栽种含有抗除草剂基因的农作物后,
【市场经济的含义】市场经济的含义、优点、作
甲状腺结节会导致脖子疼吗
这是什么虫子,会装死。
天脉盛硒德源公司这个地址在什么地方,我要处
macbook pro现在用的什么系统
南昌高新医院怎么去啊,有知道地址的么
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?