墙裂建议界面版常驻人士讨论一下GDI/GDI+函数的使用

「已注销」 「已注销」 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区


先贴一部分代码


CRect rect;
GetWindowRect(&rect);
CClientDC dc(this);
CDC dcMem;
dcMem.CreateCompatibleDC(&dc);
if (1)
{
BITMAPINFO bitmapinfo;
bitmapinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bitmapinfo.bmiHeader.biBitCount = 32;
bitmapinfo.bmiHeader.biHeight = rect.Height();
bitmapinfo.bmiHeader.biWidth = rect.Width();
bitmapinfo.bmiHeader.biPlanes = 1;
bitmapinfo.bmiHeader.biCompression = BI_RGB;
bitmapinfo.bmiHeader.biXPelsPerMeter = 0;
bitmapinfo.bmiHeader.biYPelsPerMeter = 0;
bitmapinfo.bmiHeader.biClrUsed = 0;
bitmapinfo.bmiHeader.biClrImportant = 0;
bitmapinfo.bmiHeader.biSizeImage =
bitmapinfo.bmiHeader.biWidth * bitmapinfo.bmiHeader.biHeight * bitmapinfo.bmiHeader.biBitCount / 8;

hBitmap=::CreateDIBSection (dcMem,&bitmapinfo, 0,NULL, 0, 0);
hOldBitmap = (HBITMAP)dcMem.SelectObject(hBitmap);
}
else
{
bmpMem.CreateCompatibleBitmap(&dc, rect.Width(), rect.Height());
pOldBmpMem = (HBITMAP)dcMem.SelectObject(&bmpMem);
}



新手(比如说我) 都一般使用判断下面的CreateCompatibleBitmap 来使用双缓存做贴图程序
但是这个星期写程序的时候 遇到了一个要常常刷新的窗口 CPU使用在很快刷新的情况下达到 40%~50%
后来无奈 也正好学学用CreateDIBSection 这个函数 结果发现是用CPU 20%~30% 我瞬间无言....
代码这么麻烦的函数居然要优秀这么多....

这不禁让我想起创建字体的函数 别人写的很多代码都使用 CreateFont() 这个复杂的函数 我一般直接CreatePointFont()
我不知道是不是这样速度会更快 但是我代码中的那个例子可是事实...

另外 如果把dcMem 定义成 类的成员变量 和函数的局部变量 CPU的使用差别貌似没区别

所以 墙裂建议界面版常驻人士讨论一下GDI/GDI+函数的使用!!! 有木有!!! 有木有!!!
比如说 您会常常使用什么函数 而不会使用另一种函数 如果有原因就更好了
之类之类的 您认为好的 都可以说说 :)

大家互相学习 希望大家不吝赐教




...全文
评论 25
收藏 已收藏
分享
返回顶部
「已注销」
界面 15,976 成员 115,866 内容