我有一个存储窗口对象的对话框:
class CInputDlg : public CDialog
{
...
private:
CWnd m_cImageWindow;
...
};
在对话框类OnPaint
例程中,我绘制到窗口对象:
void CInputDlg::OnPaint()
{
CPaintDC dc(this);
if (IsIconic())
{
...
}
else
{
CDC* pDC = m_cImageWindow.GetDC();
CDC cDC;
cDC.CreateCompatibleDC(pDC);
cDC.SelectObject(m_hImageBitmap);
pDC->StretchBlt(...,...,...,...,&cDC,...,...,...,...,SRCCOPY);
cDC.DeleteDC();
m_cImageWindow.ReleaseDC(pDC);
}
}
我希望将它们存储为对话框类的成员变量,而不是在OnPaint
例程的每次执行上获取/释放和创建/删除这两个设备上下文,而不是在OnInitDialog
例程中初始化一次。
但是MSDN说"应用程序只有在必须在客户区绘制时才获得显示DC,并且当应用程序完成绘制时,它必须释放DC"。
我还读过某个地方,当一个进程分配DC时,它会影响系统中的其他进程,因为可以同时获取有限数量的DC。
所以我的问题是:
DeleteDC
和ReleaseDC
。我可以假设在销毁相应的实例期间会自动发生这种情况吗?谢谢。