天天看點

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中結構。