void ThreadFunc()
{

  CDlgA* pDlg(CDlgA*);
  pDlg->CDC* pDC=GetDC();

}我是想用线程函数实现一个WHILE(),并在此线程中画线,需要用CDC* pDC=GetDC();来取得绘图空间。但是编译一直不通过。求各路高人指点,小弟在此先谢谢啦。(本程序写的是MFC)

解决方案 »

  1.   

    线程函数可以传窗体的指针进入的啊。
    void ThreadFunc( LPVOID pParameter )
    {
        CDlgA* pDlg = ( CDlgA* )pParameter;
        CDC* pDC = pDlg->GetDC( );
        //使用pDC
    }
    调用的时候用AfxBeginThread( ThreadFunc, this ); 这里的this就是 LPVOID pParameter对应的参数。所以,如果AfxBeginThread( ThreadFunc, this );这样调用,肯定是再CDlgA类中调用的。
    如果在其他地方调用也可以。
    事前得到CDlgA* pDlgA = ; 然后AfxBeginThread( ThreadFunc, pDlgA );

    如果不能传上面这样的参数,那么设置CDlgA类型的全局变量也可以。注意一定要事前初始化
      

  2.   

    1楼你好,谢谢您的回帖,线程函数可以传窗体的指针进入,CDlgA* pDlg = ( CDlgA* )pParameter;编译通过了。
    我的问题是CDC* pDC=GetDC()这句怎么在线程函数里面实现。麻烦再告知一下。
      

  3.   

    TLS的问题,操作界面最好是发送消息到界面,别在后台线程操作界面
      

  4.   

    GetDC()在那个类里面?你的线程不属于窗口类的,要么传递窗口句柄到线程来,然后HDC hDc=GetDC(hwnd)