c++ gdi+双缓冲透明绘制

    技术2026-10-03  9

    这里只是提供一个大体框架, 实际上应该封装成一个类, 并在main中加入消息循环, 在窗口过程回调中绘制(或者创建一个线程)

    // 序日新说 2020-07-05 // 交流群: 921673324 #include <gdiplus.h> #pragma comment(lib, "gdiplus.lib") using namespace Gdiplus; int main(){ // 1. 初始化 ULONG_PTR token; GdiplusStartupInput gdiplusStartupInput; GdiplusStartup(&token, &gdiplusStartupInput, nullptr); // Window是自己封装的一个窗口类 Window win; // 创建透明窗口, win_proc是窗口过程回调 win.create(win_proc, 0, 0, width, height); // 2. 在内存位图上绘制 // win.get()返回窗口句柄 auto dc = GetDC(win.get()); // win.rect()返回窗口矩形对象 auto rect = win.rect(); // 创建兼容位图 (透明) auto bitmap = CreateCompatibleBitmap(dc, rect.width, rect.height); // 创建gdi+位图 Bitmap bmp(bitmap, nullptr); // 释放兼容位图 DeleteObject(bitmap); // 位图画板 Graphics bmp_graph(bmp); // 在位图上绘制 bmp_graph.Draw...(...); // 3. 将内存位图绘制到窗口 Graphics graph(dc); CachedBitmap cached(&bmp, &bmp_graph); graph.DrawCachedBitmap(&cached, 0, 0); // 释放dc ReleaseDC(win.get(), dc); // 释放 GdiplusShutdown(token); }
    Processed: 0.010, SQL: 9