小弟实现单一功能是显示图片,用的是MFC工程   好用
是在对话框响button中添加的那句话:
{
                CBMPView       m_MBMPView;
                m_MBMPView.LoadBMPFile(_T(   "qinzhi.bmp   "));
                CClientDC       dc(this);
                m_MBMPView.ShowBMP(&dc,100,200);
            }  
但是在多线程中,调用出错,线程是创建成功了,但是执行到那句话就有错误。
我认为是不是在实现单一功能的时候,this默认知道是那个窗口句柄,而在实现
多线程的时候,如果不指定this是哪个窗口的句柄,就出错了??那么如果是这样
如何更改,谢谢各位!

解决方案 »

  1.   

    什么是this?是当前对象的指针。你只有在CWnd派生类才能用this作为CClientDC的参数,否则传递一个窗口指针给它。
      

  2.   

    首先这个this必然指向一个CWnd的派生类,否则不符合CClientDC的要求其次:如果是CWnd派生类,则这是禁止跨线程访问的,任何调用和窗口对象(不是C++对象)有关的函数,都会导致异常你可以看看http://blog.vckbase.com/arong/archive/2005/12/03/15578.aspx
      

  3.   

    当然,你对this的理解是错误的,this在整个进程都有效,因为内存地址永远是和进程密切相关的
      

  4.   

    这样看下CWinThread* hThread=AfxBeginThread(WorkProc,this);UINT WorkProc(LPVOID lParam)
    {
    CMyDialog* pTalk=(CMyDialog*)lParam;
    CBMPView m_MBMPView; 
    m_MBMPView.LoadBMPFile(_T("qinzhi.bmp")); 
    CClientDC dc(pTalk); 
    m_MBMPView.ShowBMP(&dc,100,200); return 0;
    }