微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

GDI +双缓冲:backbuffer双色单色

我正在尝试使用C ++,windows api和GDI +构build一个非常简单的graphics应用程序。 当第一次尝试构build应用程序时,引入了严重的闪烁,所以此代码尝试使用双缓冲,但失败。 hdcBuf是backbuffer。

当试图使用GDI + Graphics :: DrawCachedBitmap绘制一些东西给后台缓冲区时,位图会以黑白两色绘制。

LoadBitmapRes从EXE资源创build一个CachedBitmap; 这个function可以与单缓冲一起使用。

代码中有什么错误吗? 提前致谢!

混合来自不同编译器的C ++代码

如何将c结构定义转换为c ++

c#wcf文件文件夹浏览器

在内核模块中没有键盘中断

如何检测某些设备的存在

全球:

CachedBitmaP* fish; HDC hdc; HDC hdcBuf; HBITMAP hbmpBuf; Graphics* gfxBuf;

WM_CREATE:

hdc = GetDC(hwnd); hdcBuf = CreateCompatibleDC(hdc); hbmpBuf = CreateCompatibleBitmap(hdcBuf,640,480); SelectObject(hdcBuf,hbmpBuf); gfxBuf = Graphics::FromHDC(hdcBuf); fish = LoadBitmapRes(gfxBuf,MAKEINTRESOURCE(FISH2),"SPRITE");

WM_PAINT:

HDC temp = BeginPaint(hwnd,&ps); gfxBuf->DrawCachedBitmap(fish,x,y); BitBlt(temp,480,hdcBuf,SRCcopY); EndPaint(hwnd,&ps);

通过命名pipe道发送DWORD

命名pipe道服务和应用程序之间的通信

C:为什么CLOCKS_PER_SEC在我的处理器速度是3.10GHz时打印1000

结构中的“s”是什么意思?

webkit尖锐的Windows包

当使用CreateCompatibleDC创建内存DC时,其显示表面恰好是一个单色像素宽和一个单色像素高。 因此,在这个内存DC上调用CreateCompatibleBitmap ,会创建一个单色的位图。

由于选择到内存DC中的位图控制着颜色特性,所以必须确保它与最终用来显示内存DC内容的DC相匹配。 为此,您应该将目标DC传递给CreateCompatibleBitmap 。

更正后的代码

hdc = GetDC(hwnd); hdcBuf = CreateCompatibleDC(hdc); hbmpBuf = CreateCompatibleBitmap(hdc,480); // uses source DC SelectObject(hdcBuf,hbmpBuf);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐