FromHandle不能获取种外的hdc吗?
FromHandle不能获取类外的hdc吗???CDC* pDC2pDC2-FromHandle(gdipDraw.hMemDC)//获取类成员HDC,报错跳
FromHandle不能获取类外的hdc吗???
CDC* pDC2;
pDC2->FromHandle(gdipDraw.hMemDC);//获取类成员HDC,报错跳出
[解决办法]因为FromHandle本身是静态函数,从语法上讲这样使用是没有问题的,通常都是这样用:
CDC* pdc = CDC::FromHandle(hdc);
或者
CDC* pdc = NULL;
pdc = pdc->FromHandle(hdc);
这两种用法是一样的,看起来是空指针,但静态函数调用是允许使用空指针的。
你的问题不是语法,而是FromHandle的内部机制,MFC会把一些句柄资源永久或者临时缓存起来,只有被缓存的句柄才能用FromHandle转换成类指针,而只有MFC创建的句柄才会被缓存(比如CDC::CreateDC/CWnd::Create之类),外部句柄没有机会缓存,恰好你代码中提供的HDC是外部创建的(看名称貌似是GDI+创建的),超出了MFC的管理范围,不能被FromHandle查询到。
解决方案:
CDC dc;
dc.Attach(gdipDraw.hMemDc);
// do something
dc.Detach();
[解决办法]不调用Detach()的话,CDC类的析构函数里会调用Detact操作,还会做DeleteDC删除DC操作