天天看点

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绘图