GDI编程双缓冲问题求解释啊?

boolRender(floattimeDelta){MemDChdc(CFrameWork::GetInstance().GetDC(),800,600);//这是初始... bool Render(float timeDelta)
{
MemDC hdc(CFrameWork::GetInstance().GetDC(),800,600); //这是初始化主窗口DC的。

memDC = CreateCompatibleDC(hdc);
sageDC = CreateCompatibleDC(NULL);
bitmap = CreateCompatibleBitmap(memDC,800,600);
SelectObject(memDC,bitmap);
map = (HBITMAP)LoadImage(NULL,L"sage1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
SelectObject(sageDC,map);
BitBlt(memDC,0,0,800,600,sageDC,0,0,SRCCOPY);
BitBlt(hdc,0,0,800,600,memDC,0,0,SRCCOPY);
为什么画不出来图。。。把第一个memDC改成hdc就能画出来,到底是哪出了问题?
为什么会是这样啊????求大神解释下啊。。。。。

return false;
}
展开
 我来答
RedBaronVIP
2013-01-10 · TA获得超过1147个赞
知道小有建树答主
回答量:655
采纳率:0%
帮助的人:239万
展开全部
内存DC和内存位图最好独立创建,依据内存DC创建的内存位图是黑白的,不能用。另外,CreateCompatibleDC的参数用NULL就行了,直接与屏幕兼容,你又不用打印机:
memDC = CreateCompatibleDC(NULL);
sageDC = CreateCompatibleDC(NULL);
bitmap = CreateCompatibleBitmap(hdc, 800, 600);
余下的不用改...
追问
这个兼容的位图具体的作用是什么呢???谢谢你的回答啊
追答
获得DC只表示你拥有作图的权利,真正使用时全靠Bitmap,你所有用GDI函数画出来的东西其实全都画在了Bitmap上。创建内存位图用CreateCompatibleBitmap,它的第一个参数一般都是一个与屏幕兼容的DC,保证Bitmap有丰富的调色板和高质量的位数。
bitmap = CreateCompatibleBitmap(hdc, 800, 600)这句也可以改成下面的形式,从而省去CFrameWork::GetInstance...那些啰里吧嗦的东西:
HDC scrDC = GetDC(0); //取得屏幕的DC
bitmap = CreateCompatibleBitmap(scrDC, 800, 600); //创建与屏幕兼容的内存位图
ReleaseDC(0, scrDC);
意法半导体(中国)投资有限公司
2023-06-12 广告
STM32F103C8T6是一款基于ARM Cortex-M3内核的微控制器,具有以下基本参数:1. 工作频率:72MHz2. 外部时钟:最高可达120MHz3. 存储器容量:64K bytes4. 数据总线宽度:32位5. 输入/输出端口... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式