线程中如何使用pDC

yichenwuheng 2008-08-07 04:20:49
//首先将窗体句柄传给线程参数
hWnd=GetSafeHwnd();
m_pThread=AfxBeginThread(ThreadAcquireData,hWnd);//启动线程

//接下来我在线程中新建CDC对象
UINT ThreadAcquireData(LPVOID ThreadParam)
{//新线程,读取采集卡数据
CDC* pDC=GetDC((HWND)ThreadParam);
......
}

但是提示错误:
error C2440: 'initializing' : cannot convert from 'struct HDC__ *' to 'class CDC *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

请各位英雄帮忙啊!!!!
...全文
124 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yichenwuheng 2008-08-07
  • 打赏
  • 举报
回复
谢谢hxingz老兄的帮助,呵呵
yichenwuheng 2008-08-07
  • 打赏
  • 举报
回复
使用pDC->Attach(hDC);
提示错误:
Unhandled exception in BioForcen.exe (MFC42D.DLL):0xC0000005: Access Violation
hxingz 2008-08-07
  • 打赏
  • 举报
回复
是API函数
hxingz 2008-08-07
  • 打赏
  • 举报
回复
或者如楼上直接用SDK函数SetMapMode(hDC,MM_ANISOTROPIC);
这个样子。
ouyh12345 2008-08-07
  • 打赏
  • 举报
回复
用句柄操作....
hxingz 2008-08-07
  • 打赏
  • 举报
回复
HDC hDC = GetDC((HWND)ThreadParam);
CDC *pDC;
pDC->Attach(hDC);
告诉过你了,这样子写,GetDC函数还是你自己的哪个样子!
yichenwuheng 2008-08-07
  • 打赏
  • 举报
回复
我改了,但下面的成员都找不到了啊
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetWindowExt(CSize(20400,11720));
pDC->SetViewportExt(rectClient.right,-rectClient.bottom);
pDC->SetViewportOrg(rectClient.left,rectClient.bottom/2-80); //设置窗口左下角为原点坐标
......
gray01 2008-08-07
  • 打赏
  • 举报
回复
改成

//首先将窗体句柄传给线程参数
hWnd=GetSafeHwnd();
m_pThread=AfxBeginThread(ThreadAcquireData,hWnd);//启动线程

//接下来我在线程中新建CDC对象
UINT ThreadAcquireData(LPVOID ThreadParam)
{//新线程,读取采集卡数据
HDC pDC=GetDC((HWND)ThreadParam);
......
}
yichenwuheng 2008-08-07
  • 打赏
  • 举报
回复
我还不太理解啊!能麻烦你说仔细些好吗?谢谢
ouyh12345 2008-08-07
  • 打赏
  • 举报
回复
用hdc

用句柄,而不是对象
yichenwuheng 2008-08-07
  • 打赏
  • 举报
回复
不行啊!
把那段代码加上去 提示:
error C2660: 'GetDC' : function does not take 0 parameters

我的MSN:bchhf@msn.com
QQ:175789045
hxingz 2008-08-07
  • 打赏
  • 举报
回复
HDC hDC = GetDC();
CDC *pDC;
pDC->Attach(hDC);

15,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧