【MFC】GetDC函数、GetWindowDC函数 与 ReleaseDC函数介绍

01、目录

02、GetDC()函数

GetDc函数:用于获得hWnd参数所指定窗口的客户区域的一个设备环境。

所获得的设备环境可以是通用、类或者私有类型,具体由指定窗口的类风格决定。对于通用设备环境,GetDc函数每次获取一个设备环境时都会用默认属性对它进行初始化。该函数获得的类和私有设备环境会与它们最后一次的设置保持一致。当设备环境不再需要时,应该调用ReleaseDC函数将其释放。

2.1 GetDC()示例

获取Pictrue control控件的变量,然后获取设备上下文,部分Code省略,只截取核心Code

//C++代码 :.h程序
class xxx : public CDialogEx
{//
public:
		CStatic m_picVar; //Pictrue control控件变量
}

//C++代码:.cpp程序
void xxx::OnBnClickedBtnPreview()
{
	UpDateData(TRUE); //更新界面参数
	
	CRect rectPictrue;
	//获取绘图控件的客户区坐标
	m_picVar.GetClientRect(&rectPictrue);
	HWND* hWnd = (HWND*)GetDlgItem(IDC_WAVE_DRAW); //获取控件句柄(暂时不用)
	
	if(m_nPaintLine == 0)
	{//画线
		TestLine(m_picVar.GetDC(), rectPictrue); //画线函数
	}
}

03、GetWindowDC()函数

GetWindowDC函数:返回hWnd参数所指定的窗口的设备环境。

获得的设备环境覆盖了整个窗口(包括非客户区),例如标题栏、菜单、滚动条,以及边框。这使得程序能够在非客户区域实现自定义图形,例如自定义标题或者边框。当不再需要该设备环境时,需要调用ReleaseDC函数释放设备环境。注意,该函数只获得通用设备环境,该设备环境的任何属性改变都不会反映到窗口的私有或者类设备环境中(如果窗口有的话)

3.1 GetWindowDC()示例
//C++代码 :.h程序
class xxx : public CDialogEx
{//
public:
		CStatic m_picVar; //Pictrue control控件变量
}

//C++代码:.cpp程序
void xxx::OnBnClickedBtnPreview()
{
	UpDateData(TRUE); //更新界面参数
	
	CRect rectPictrue;
	//获取绘图控件的客户区坐标
	m_picVar.GetClientRect(&rectPictrue);
	HWND* hWnd = (HWND*)GetDlgItem(IDC_WAVE_DRAW); //获取控件句柄(暂时不用)
	
	if(m_nPaintLine == 0)
	{//画圆
		TestCircle(m_picVar.GetWindowDC(), rectPictrue); //画圆函数
	}

	/*
		如果不用此设备了,就要及时释放,以免占资源,西面我写出第三个函数,我这里是不使用的
	*/
	m_picVar.ReleaseDC(m_pivcVar.GetDC()); //释放资源,这里前面两个都可以释放
}

04、ReleaseDC()函数

ReleaseDC()函数功能:函数释放设备上下文环境(DC)供其他应用程序使用。函数的效果与设备上下文环境类型有关。它只释放公用的和设备上下文环境,对于类或私有的则无数。

函数原型:

int ReleaseDC(HWND hWnd, HDC hdc)

参数说明:

  • hWnd:指向要释放的设备上下文环境所在的窗口的句柄。
  • hDC:指向要释放的设备上下文环境的句柄。

返回值:返回值说明了设备上下文环境是否释放;如果释放成功,则返回值为1;如果没有释放成功,则返回值为0。

PS:每次调用GetWindowDC和GetDC函数检索公用设备上下文环境之后,应用程序必须调用ReleaseDC函数来释放设备上下文环境。
应用程序不能调用ReleaseDC函数来释放由CreateDC函数创建的设备上下文环境,只能使用DeleteDC函数。

版权声明:转载请注明出处,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cain Xcy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值