在VC的自定义函数中怎么获得设备环境(设备上下文)

来源:百度知道 编辑:UC知道 时间:2024/06/28 11:52:19
在VC中创建基于对话框的工程,且自定义函数:DWORD WINAPI ThreadRun(LPVOID lpParam){***},该函数所实现的功能是根据布尔变量m_bRun的真或假绘制不同的图形——方形或圆形。
因为绘制图形要获得设备环境(设备上下文)DC,所以我尝试了几种方法:
(1)CClientDC dc(this);
编译提示:error C2673:"ThreadRun":global functions do not have "this" pointer.
(2)CDC dc(this);
编译提示同(1).
(3)CDC *dc=GetDC(hwnd);
如果将HWND hwnd定义在该函数中编译提示:error C2440: 'initializing' : cannot convert from 'struct HDC__ *' to 'class CDC *'
如果将HWND hwnd定义在类中则编译提示:rror C2065: 'hwnd' : undeclared identifier
请教如何获得该DC,或者怎么才能实现该功能,请各位不惜赐教,谢谢!

GetAfxApp或以获得当前进程,用GetMainFrm获得当前框架,用GetActiveView获得当前活动视图,所以,这样就可以了:GetAfxApp()->GetMainFrm()->GetActiveView(),代替this。
注意,上面的函数可能会差几个字母

比方 说 你的 对话框 工程的类是CMyDlg.cpp要 在里面使用 这个线程
AfxBeginThread(ThreadRun,this);

那么在该线程函数里面 首先要转换一下 传进来的参数
DWORD WINAPI ThreadRun(LPVOID lpParam)
{
CMyDlg* dlg = (CMyDlg*)lpParam;

CClientDC dc(dlg);//这样就 可以使用了
CDC dc(dlg);
CDC *dc=GetDC(dlg->m_hWnd);

}

直接用win32 API就不会有问题啦!