小弟写了一个tab属性页 共有两页,在主窗口中想一页创建一个线程 可是定义完子线程后DWORD WINAPI FunPorc1(LPVOID lpPara) 却发现不能用属性页id了 比如:
CPara1 m_Para1;
CPara2 m_Para2;
在整个.cpp文件中都能用 可是在子线程里却用不了m_Para1等控件 我想在子线程里动态更新一个lable的caption 所以想得到其id  请大哥们 帮帮忙 谢谢!

解决方案 »

  1.   

    子线程要通过lpPara调用主线程的变量,如m_Para1、m_Para2
    也就是说,子线程要通过主线程的句柄,才能调用主线程的变量
      

  2.   

    UINT CXXX::YYYProc(LPVOID pParam)
    {
    // 获得当前实例的句柄
    CXXX* pInstance = (CXXX*)pParam; // 当前实例pInstance->abc = zzz; // 句柄->变量 = 值
    pInstance->m_Para1.???;
    // 其它代码return 0;
    }
      

  3.   

    另外,头文件中,YYYProc要声明为staticstatic UINT YYYProc(LPVOID pParam);
      

  4.   

    static UINT YYYFunc(LPVOID pParam);
    UINT CTabDlg::YYYFunc(LPVOID pParam)
    {
    return UINT();
    }
    hTheard1=CreateThread(NULL,0,YYYFunc,NULL,0,NULL);错误提示:
    错误 2 error C2664: 'CreateThread' : cannot convert parameter 3 from 'UINT (__cdecl *)(LPVOID)' to 'LPTHREAD_START_ROUTINE'
    望提示 谢谢!
      

  5.   

    现在能跑了
    UINT CTabDlg::YYYFunc(LPVOID pParam)
    {
    CTabDlg* aa=(CTabDlg*)pParam;
    aa->m_Para1.SetDlgItemText(IDC_bb,(LPCTSTR)(_T("sdafas"))); return UINT();
    }
    一写这句的话就会提示异常:0X000000005读取位置0X00000134时访问冲突!
      

  6.   

    哥们儿,给你讲个好方法,你传递的是窗口的指针。何必这么麻烦你,你直接传递this指针多好呢?
    然后就用this指针调用,和在类的内部调用一样的。
      

  7.   

    aa->m_Para1.SetDlgItemText(IDC_bb,(LPCTSTR)(_T("sdafas")));这个地方如果aa为NULL,会导致程序崩溃。
    判断一下吧。