本人建一个对话框形式的PROJECT,其中创建一个工作进程,在进程中想修改对话框中某个控件
的值,请问要怎样实现.

解决方案 »

  1.   

    将对话框类的this指针作为参数,传给线程回调函数。
      

  2.   

    danyueer,还有没有其它可以得到对话框句柄的办法呢?然后用SetDlgItemText来修改
    还想请教,线程回调函数只能接收一个参数吧?
      

  3.   

    在Worker线程中操作CWnd*,不行。class CYourDialog
    {
    ...
    static UINT ThreadFunc(LPVOID pUser){//AfxBeginThread(ThreadFunc,this);
    return (reinterpret_cast<CYourDialog*>(pUser))->ThreadProc();
    }
    UINT ThreadProc();
    ...
    }
      

  4.   

    我试了下用this->m_hWnd做全局变量,在THREADPROC中使用::SetDlgItemText(窗口句柄,..,..)是可行的;还有其它好办法吗?
      

  5.   

    // 要在线程中改变对话框上的值关键还是要把类的指针传进去才行// 创建线程把this指传进去
    AfxBeginThread(ThreadFunc,this);// 线程函数
    UINT CXxx::ThreadProc(LPVOID lparam)
    {
       CXxx* pDlg = (CXxx*)lparam;
       CString str;
       for(int i=0;i<1000;i++)
      {
         str.Format("This:%d",i);
         pDlg->m_edit.SetWindowText(str);
         pDlg->m_edit.UpdateWindow();
      }
       return 0;
    }
      

  6.   

    再AfxBeginThread函数中,第二个参数传递对话框的指针。
      

  7.   

    HWND hwndEdit;
    void CTestView::OnButton7() 
    {
    int x;
         DWORD dwThreadID; LastData = Data = 0;
    bExit = false; GetDlgItem(IDC_EDIT3,&hwndEdit); FThread=CreateThread(NULL,0,DisplayData,
    (LPVOID )&x,CREATE_SUSPENDED,&dwThreadID); ResumeThread(FThread);
    }
    DWORD WINAPI DisplayData(LPVOID param)
    {
    MSG msg;
    CString s_Data;

    while(TRUE)
    {

    Data++;
    if(LastData != Data)
    {
    s_Data.Format("%d",Data);
    ::SetWindowText(hwndEdit,s_Data);
    LastData = Data;
    } if(bExit)
    ExitThread(0); }
    return 0;
    }