天天看點

windows程式設計學習筆記(4)GDI繪圖

一.繪制線條&使用畫刷

繪制線條和使用畫刷等都是先獲得視窗裝置環境句柄,然後選取一個繪圖的工具,使用繪圖工具在裝置環境中繪圖 下面有線條和畫刷的使用方法:

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	HDC hdc;
	COLORREF color = RGB(0, 255, 0);
	HPEN hpen = CreatePen(PS_SOLID, 20, color);
	HBRUSH hbrush = CreateSolidBrush(color);
	PAINTSTRUCT ps;
	switch (message)
	{
<p>		case WM_PAINT:</p>			//采用BeginPaint方法擷取裝置環境句柄
			hdc = BeginPaint(hWnd, &ps);
			//選取繪圖使用的工具
			SelectObject(hdc, hpen);
			//移動焦點
			MoveToEx(hdc, 0, 0, NULL);
			//畫線
			LineTo(hdc, 1000, 1000);
			//選擇畫刷作為繪圖工具
			SelectObject(hdc, hbrush);
			//繪制方形函數
			Rectangle(hdc, 150, 200, 200, 250);
			//繪圖結束釋放裝置環境
			EndPaint(hWnd, &ps);
			break;
		case WM_DESTROY:
			PostQuitMessage(0);
			CleanUp();
			break;
		default:
			return DefWindowProc(hWnd, message, wParam, lParam);
		}
		return 0;
}
           

運作程式,結果如下:

windows程式設計學習筆記(4)GDI繪圖

二.繪制位圖

位圖,即bitmap類型的圖像,在windows平台下結尾為.bmp。GDI支援最好的就是位圖。據說GDI+支援png等格式的圖像,但是GDI+是對GDI的封裝,效率不怎麼樣。是以在這裡還是使用GDI繪制位圖。 繪制位圖有4個步驟: 1)加載位圖

HANDLE LoadImage(

HINSTANCE hinst,//如果是從硬碟加載可以置為NULL

LPCTSTR lpszName,//圖像的路徑及檔案名

UINT uType,//類型

int cxDesired,//寬度(如果為0則按照圖像原大小加載)

int cyDesired,//高度(如果為0則按照圖像原大小加載)

UINT fuLoad//加載方式

);

2)建立相容DC HDC CreateCompatibleDC(HDC hdc); 在記憶體中建立一個和螢幕DC相容的記憶體環境 3)選取位圖對象 HGDIOBJ SelectObject(HDC hdc, HGDIOBJ hgdiobj); 前面使用畫筆畫刷時也使用過這個函數,其實就是選取一個用來繪圖的工具,在這裡就是選取位圖作為畫筆 4)繪圖 BOOL BitBlt(HDC hdcDest,//目标DC int nXDest,//目标貼圖x坐标 int nYDest,//目标貼圖y坐标 int nWidth,//寬度 int nHeight,//高度 HDC hdcSrc,//源DC int nXSrc,//貼圖源起始x坐标 int nYSrc,//貼圖源起始y坐标 DWORD dwRop);//光栅操作标示符,詳情可以查閱MSDN 代碼如下:

void Init(HWND hwnd)//加載部分
{
	g_hdc = GetDC(hwnd);//獲得裝置環境句柄
	g_hbitmap = (HBITMAP)LoadImage(NULL, L"xie.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);//加載位圖,步驟(1)
	g_mdc = CreateCompatibleDC(g_hdc);//建立相容記憶體裝置環境步驟(2)
	ReleaseDC(hwnd, g_hdc);//釋放裝置
}
           
void Paint(HWND hwnd)//貼圖部分
{
	g_hdc = GetDC(hwnd);
	SelectObject(g_bufdc, g_hbitmap);//選取位圖作為繪圖工具,步驟(3)
	BitBlt(g_mdc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, g_bufdc, 0, 0, SRCCOPY);//貼圖操作,步驟(4)
	ReleaseDC(hwnd, g_hdc);
}
           

運作結果如下:

windows程式設計學習筆記(4)GDI繪圖
windows程式設計學習筆記(4)GDI繪圖

繼續閱讀