像CPaintDC是专门用在OnPaint消息的,而用到CClientDC的地方,我感觉都可以用GetDC()获取CDC*,
然后照样可以绘图(莫笑),只是完了要手动ReleaseDC()而已,我把CClientDC转到定义,也没看到比CDC多了什么函数,难道仅仅是为省一个ReleaseDC吗,有这个必要吗?
void Ctest01Dlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 CRect rt; GetClientRect(&rt); CClientDC dc(this); dc.Ellipse(&rt); CDC* pdc=GetDC(); pdc->Ellipse(&rt); ReleaseDC(pdc); //OnOK(); }
GetDC需要ReleaseDC,在代码较复杂的情况下忘记了ReleaseDC怎么办?CClientDC在析构时会释放DC
你这个问题,如果你不用MFC的东西,用WIN32句柄和WIN32 API函数的话,就不至于如此纠结了
CClientDC就是对GetDC 和ReleaseDC 进行了一次封装,用起来方便些罢了