FromHandle不能获取类外的hdc吗??? CDC* pDC2;pDC2->FromHandle(gdipDraw.hMemDC);//获取类成员HDC,报错跳出 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CDC* pDC2; 你的指针都没有分配空间,不出错才怪~ 因为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 somethingdc.Detach(); 如果说,我CDC dc dc.Attach(gdipDraw.hMemDc);//dc局部变量.Attach()不需要Deach() pDC = new CDC(); 不调用Detach()的话,CDC类的析构函数里会调用Detact操作,还会做DeleteDC删除DC操作 FromHandle是静态函数,是不需要分配,但是如果你后面使用pDC,比如绘制东西的话,肯定会出错的。 关于DirectX截屏的问题 怎么建立一个SOCKET侦听队列 关于memcpy函数 我手头上有几个.ax文件(Demux,decode,render),还有几个头文件,请问具体怎么在vc中调用他进行解码显示呢 ?? 输入焦点问题 哪有vc++ socket编程的电子教程下载啊?急!!! 关于菜单的 代码解释 简单问题:CommandLineToArgvW [请教]VC for函数体内不适合声明本地变量吗? 文件覆盖问题 如何用URL起动一个应用程序
你的指针都没有分配空间,不出错才怪~
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();