如何从HDC建立一个CDC类
1个回答
展开全部
例如:下拉式列表、组合框和按钮。通过hDC你将接收到绘制消息。下面是将HDC转换成你更熟悉的CDC的程序段。你也可以将该技巧用在其他任何MFC类和Windows句柄的转换中。void MyODList::DrawItem(LPDRAWITEMSTRUCT lpDrawItem){CDC myDC;myDC.Attach(lpDrawItem->hDC);
//在此插入其他需要的代码。
//如果你不将句柄分离,它将被删除,从而导致问题。
myDC.Detach();}另一个方法是调用CDC类的FromHandle方法:
CDC * pDC = CDC:FromHandle(lpDrawItem->hDC);相互转换:
方法一: 此方法在设备结束时不会销毁原来的资源(即:hDC,hBitmap)
CDC *pDC = CDC::FromHandle(hDC);方法二: 此方法在设备结束时会销毁原来的资源(即:hDC,hBitmap)CDC dc;dc.Attach(hDC);关于HDC CDC
首先:CDC 不可以释放. FromHandle 是通过 HDC 来创建了一个CDC 对象,以方便操作,释放 DC 的操作应该针对于HDC 而非此CDC , 如果释放了它 pDC->ReleaseDC,就会造成隐患.
HDC hDC = GetDC(hWnd);
CDC *pDC = CDC::FromHandle(hDC);
这两者是指向的一个DC对象,只能释放一次,而这个释放应该针对 hDC 而非 pDC. 然后:GetDC和ReleaseDC的调用匹配,CreateDC和DeleteDC的调用匹配。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询