MFC GDI+双缓冲

来源:互联网 发布:如何生成数据字典 编辑:程序博客网 时间:2024/06/15 22:36

添加头文件

#include <GdiPlus.h>#pragma comment(lib, "Gdiplus.lib")using namespace Gdiplus;

定义变量:
ULONG_PTR gdiplusToken;DWORD dwScreenWidth;DWORD dwScreenHeight;

在OninitDialog()函数里面初始化对象

Gdiplus::GdiplusStartupInput gdiplusStartupInput;Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);dwScreenWidth = GetSystemMetrics(SM_CXSCREEN);dwScreenHeight = GetSystemMetrics(SM_CYSCREEN);


在定时器里面绘制:

CClientDC dcDraw(this);{/************************************************************************//*创建logo的双缓冲dc                                                     *//************************************************************************/CBitmap bitmap;bitmap.CreateCompatibleBitmap(&dcDraw, dwScreenWidth, dwScreenHeight);// 创建内存DCCDC memDC;memDC.CreateCompatibleDC(&dcDraw);// 将创建的目标位图选入内存DCCBitmap* pOldBitmap = memDC.SelectObject(&bitmap);// 设置DC贴图模式dcDraw.SetStretchBltMode(COLORONCOLOR);// Gdi+绘制背景和logo部分Gdiplus::Graphics graphics(memDC);/************************************************************************//*if (iplCamera){Gdiplus::Bitmap bitmap(iplCamera->width, iplCamera->height, iplCamera->widthStep, PixelFormat24bppRGB, (BYTE*)iplCamera->imageData);graphics.DrawImage(&bitmap, 0, 0);}*/{{//画当前时间LOGFONT lf = { 0 };lf.lfHeight = 20;lf.lfWeight = FW_BOLD;wcscpy_s(lf.lfFaceName, _T("Arial"));//Gdiplus::Font font(_T("微软雅黑加粗"), (Gdiplus::REAL)60);Gdiplus::Font font(dcDraw, &lf);Gdiplus::RectF orgin(50, 50, 100, 100);Gdiplus::StringFormat stringformat;stringformat.SetAlignment(Gdiplus::StringAlignmentNear);Gdiplus::SolidBrush solidBrush(Gdiplus::Color(255, 251, 254, 255));SYSTEMTIME stNow;GetLocalTime(&stNow);WCHAR wcTime[MAX_PATH] = { 0 };wsprintf(wcTime, L"%d-%02d-%02d %02d:%02d:%02d", stNow.wYear, stNow.wMonth, stNow.wDay, stNow.wHour, stNow.wMinute, stNow.wSecond);graphics.DrawString(wcTime, -1, &font, orgin, &stringformat, &solidBrush);}// 贴图dcDraw.BitBlt(0, 0, dwScreenWidth, dwScreenHeight, &memDC, 0, 0, SRCCOPY);// 将旧的对象选择回来memDC.SelectObject(pOldBitmap);// 释放内存DCmemDC.DeleteDC();// 删除对象DeleteObject(pOldBitmap);// 是否Gdi+ DCgraphics.ReleaseHDC(dcDraw);}}


在Onclose函数里面关闭GDI+对象

Gdiplus::GdiplusShutdown(gdiplusToken);


0 0