在Windows中创建一个简单的GDI程序

213 阅读2分钟

GDI介绍

GDI英文全称 Graphics Device Interface,简称GDI。我们可以使用GDI进行绘图等操作

使用

在对话框画图

画一条线和矩形

VOID GdiOut(HDC hdc)
{
	::LineTo(hdc, 500, 500);  // 画一条线
	::Rectangle(hdc, 200, 200, 500, 500);  // 画一个矩形

}

void CMFCApplication2Dlg::OnBnClickedButton1()
{
	HWND hwnd = GetSafeHwnd();  // 获取窗口句柄
	HDC hdc = ::GetDC(hwnd);    // 获取窗口DC, GetDC函数在默认的名称空间中

	GdiOut(hdc);


	// 释放DC

	::ReleaseDC(hwnd, hdc);
}

测试效果

drawLine.gif

在桌面进行绘图

代码

VOID GdiOut(HDC hdc)
{
	::LineTo(hdc, 500, 500);  // 画一条线
	::Rectangle(hdc, 200, 200, 500, 500);  // 画一个矩形

}

void CMFCApplication2Dlg::OnBnClickedButton2()
{
	// 用nullptr做DC得到的是桌面的DC
	HDC hdc = ::GetDC(nullptr);

	GdiOut(hdc);

	// 释放DC

	::ReleaseDC(nullptr, hdc);

}

测试效果

drawLine1.gif

设置画笔和画刷不同的颜色

代码

VOID GdiOut(HDC hdc)
{
	HPEN hpen; // 创建新的画笔
	HPEN hpenold;  // 旧的画笔保存设置画笔之前的画笔         
	HBRUSH hbrush;  // 创建画刷
	HBRUSH hbrushold;  // 旧的画刷保存设置画刷之前的画刷

	BYTE bRed = 0;
	BYTE bGreen = 0;
	BYTE bBlue = 0;

	COLORREF cPen = RGB(bRed, bGreen, bBlue);   // 画笔颜色
	COLORREF cBrush = RGB(233, 0, 255);   // 画刷颜色

	// 创建一个画笔
	// PS_SOLID代表画的线的样式,为实心
	// 10为线的宽度
	hpen = CreatePen(PS_SOLID, 10, cPen);

	// 创建一个实心的画刷
	hbrush = CreateSolidBrush(cBrush);


	// 将新创建的画笔和画刷设置到DC中,同时保存下旧的画笔和画刷
	hpenold = (HPEN)SelectObject(hdc, hpen);
	hbrushold = (HBRUSH)SelectObject(hdc, hbrush);

	::LineTo(hdc, 500, 500);  // 画一条线
	::Rectangle(hdc, 200, 200, 500, 500);  // 画一个矩形


	// 将旧的画笔恢复
	SelectObject(hdc, hpenold);
	DeleteObject(hpen);  // 删除画笔

	// 将旧的画刷恢复
	SelectObject(hdc, hbrushold);
	DeleteObject(hbrush);  // 删除画笔

}

void CMFCApplication2Dlg::OnBnClickedButton1()
{
	HWND hwnd = GetSafeHwnd();  // 获取窗口句柄
	HDC hdc = ::GetDC(hwnd);    // 获取窗口DC, GetDC函数在默认的名称空间中

	GdiOut(hdc);


	// 释放DC

	::ReleaseDC(hwnd, hdc);
}


void CMFCApplication2Dlg::OnBnClickedButton2()
{
	// 用nullptr做DC得到的是桌面的DC
	HDC hdc = ::GetDC(nullptr);

	GdiOut(hdc);

	// 释放DC

	::ReleaseDC(nullptr, hdc);

}

测试效果

drawLine2.gif