天天看点

Windows绘图-双缓冲-GDI初始化

hDeskTop = GetDesktopWindow();// 获取桌面窗口句柄

hDeskTopDC =GetDC(hDeskTop);//获取桌面窗口DC

hMemDc = CreateCompatibleDC(hDesktopDC);//建立与桌面窗口DC兼容得内存设备上下文DC

绘图:

CDC *pDC =GetDC();//获取窗口DC

CDC MemDC;    //定义一个显示设备对象

CBitmap MemBitmap;    //定义一个位图对象

MemDC.CreateCompatibleDC(pDC);//建立窗口显示兼容得内存显示设备

这时还不能画图,需要建立一个能画画得位图。

MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight);//建立与窗口兼容得位图。大小根据实际情况指定。

//将位图选入到内存显示设备中。只有选入了位图的内存显示设备才有地方绘图。画到指定的位图上。

CBitmap *pOldBit = MemDC.SelectObject(&MemBitmap);

//设置字体、画笔、画刷等。

//清楚一下背景

MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255));

//绘图 画线、写字、绘制图片、画圆等。。。

MemDC.MoveTo(...);

MemDC.LineTo(...);

//将内存中的图拷贝到屏幕上进行显示

pDC->BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY);

//绘图完成进行清理

MemDC.SelectObject(*pOldBit) ;

MemBitMap.DeleteObject();

MemDC.DeleteDC();

ReleaseDc(pDc);

GDI+

VC使用GDI+初始化准备工作

#include “gdiplus.h”

using namespace Gdiplus;

#pragma commet(lib,"gidplus.lib")

//在CWinApp派生类的InitInstance函数中加入:

//初始化gdiplus的环境

GdiplusStartupInput gdiplusStartupInput;

ULONG_PTR gdiplusToken;

//初始化GDI+

GdiplusStartup(&gdiplusToken,&gdiplusStartupInput);

//在CWinApp派生类的ExitInstance函数中加入:

//关闭gdiplus的环境

GdiplusShutdown(gdiplusToken);

GDI+ API包含54个类、12个函数、6类(226个)图像常量、55种枚举和19中结构。