函数是:
UINT WorkerThread( LPVOID pParam )
{
CDC *pDc=(CDC*)pParam;
pDc->LineTo(50,50);
pDc->SetPixel(i,30,RGB(0,0,255));
Sleep(10);
AfxMessageBox("aaaaaa");
return 0;   // 返回并退出线程
}
调用的时候,我用:
AfxBeginThread(WorkerThread,&m_pic);
执行后,AfxMessageBox("aaaaaa");正常。
但是,
pDc->LineTo(50,50);pDc->SetPixel(i,30,RGB(0,0,255));都没有,为什么?

解决方案 »

  1.   

    一个线程的MFC对象不能直接用于另外一个线程。最好的方法是这个线程发送一条消息给创建dc的线程,由创建dc的线程画图。
      

  2.   

    就是在调用WorkerThread线程 的  那个线程  里画
      

  3.   

    调用的时候要用:
    AfxBeginThread((AFX_THREADPROC)WorkerThread,this);  LPVOID pParam 的值请用 this指针,
    然后再调用主线程的函数,这里假如为MyFunction();
    void CMyView::MyFunction()
    {
        CDC *pDc=GetDC();
        if(pDc!=NULL)
        {
             pDc->LineTo(50,50);
    pDc->SetPixel(i,30,RGB(0,0,255));
        }
    }
    #include "MyView.h"
    UINT WorkerThread( LPVOID pParam )
    {
       CMyView* pView=(CMyView*)pParam;
       pView->MyFunction();
       Sleep(10);
    }