class CDlgTest : CDialog 

public: 
    void StartThread(); 
    static DWORD __stdcall WorkThread(LPVOID pParam); 
    void DoWork(); 
    HANDLE m_hThread; 
}; void CDlgTest::StartThread() 

DOWRD dwThreadID = 0; 
m_hThread = CreateThread(NULL, 0, WorkThread, this, 0, &dwThreadID); 
} DWORD __stdcall CDlgTest::WorkThread(LPVOID pParam) 

CDlgTest* pDlg = (CDlgTest*)pParam; 
pDlg->DoWork(); 
return 0; 

void CDlgTest::DoWork() 

// 在这里可以调用GetSafeHwnd获取句柄的,然后就可以发送消息了。    
//  使用::PostMessageA (::GetDlgItem(GetSafeHwnd(),IDC_EDIT1),WM_SETTEXT,0,(LPARAM)"11");没反映  就是编辑框不会增加内容
//使用::SetDlgItemText(AfxGetMainWnd()->m_hWnd,IDC_EDIT1,"str"); 会被中断
//试了很多中方法 好多都断在 IsWindow(m_hWnd)
}我只想设置编辑框里的文本... 大家帮帮我吧

解决方案 »

  1.   

    你这段代码当然不行了,哈哈
    CDlgTest* pDlg你又创建了一个类的指针,已经不是你这个窗体了呀
      

  2.   

    断在 IsWindow(m_hWnd)这是当然的了
      

  3.   

    AfxGetMainWnd()取本窗体的窗口类指针
      

  4.   


    class CDlgTest : CDialog 

    public: 
        void StartThread(); 
        static DWORD __stdcall WorkThread(LPVOID pParam); 
        void DoWork(); 
        HANDLE m_hThread; 
    }; void CDlgTest::StartThread() 

    DOWRD dwThreadID = 0; 
    m_hThread = CreateThread(NULL, 0, WorkThread, this, 0, &dwThreadID); 
    } DWORD __stdcall CDlgTest::WorkThread(LPVOID pParam) 

    CDlgTest* pDlg = (CDlgTest*)pParam; 
    pDlg->DoWork(); 
    return 0; 

    void CDlgTest::DoWork() //你这时候调用直接按照如下的方法就可以了。

      CEdit *pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
      
      if(pEdit != NULL)
      {
    pEdit->SetWindowText(...);//之所以赋值出现错误,是由于窗口并没有完全创建以前,你就启动了线程,最好在OnitDialog之后(创建了窗口和上面的控件之后)
      }
    }其他的方面都是没错的
      

  5.   

    VC++中建议使用_beginthreadex函数替代CreateThread,否则存在不安全因素。
      

  6.   


    public:
    static DWORD __stdcall ReadPipe(LPVOID pParam);
    ---------------------------------------------- CreateThread(0,0,ReadPipe,GetDlgItem(IDC_EDIT1),0,&dwT); // TODO: 在此添加控件通知处理程序代码
    //OnOK();
    }DWORD CDlg::ReadPipe(LPVOID pParam)//LPVOID
    {
      ::PostMessageA ((HWND)pParam,WM_SETTEXT,0,(LPARAM)"11");我晕 传控件句柄怎么都没用   ::PostMessageA ((HWND)pParam,WM_SETTEXT,0,(LPARAM)"11");  这个地方写错了吗?
      

  7.   

    我用的VS2005   好像没有VC6.0编辑框控件通知属性?  我没找到......
      

  8.   

    public:
        static DWORD __stdcall ReadPipe(LPVOID pParam);
    ----------------------------------------------    CreateThread(0,0,ReadPipe,GetDlgItem(IDC_EDIT1)->GetSafeHwnd(),0,&dwT);    // TODO: 在此添加控件通知处理程序代码
        //OnOK();
    }DWORD CDlg::ReadPipe(LPVOID pParam)//LPVOID
    {
          ::PostMessageA ((HWND)pParam,WM_SETTEXT,0,(LPARAM)"11");