我想将程序运行过程中的运行数字输出给编辑框,显示给用户,我是这样做的
hWnd->Invalidate(true);
m_Total=OldDis;           //就想在这里给编辑框赋值
hWnd->UpdateData(false);
其中m_Total是编辑框的成员变量,oldDis是运行过程中产生的结果,但是运行中编辑框的值一直不变是0
具体代码如下:
void CTextBoxView::OnButton1() 
{
// TODO: Add your control notification handler code here
Thread_Info.hWnd=m_hWnd;
Worker=AfxBeginThread(ShowValue,(LPVOID)&Thread_Info);
//m_Value=20;
UpdateData(false);

}UINT CTextBoxView::ShowValue(LPVOID lparam)
{
THREAD_INFO * infor=(THREAD_INFO *)lparam;
CTextBoxView * hWnd=(CTextBoxView *)CWnd::FromHandle((HWND)infor->hWnd);
for(int i=0;i<15;i++)
{
hWnd->m_Value=(float)i;
hWnd->UpdateData(false);
Sleep(50);
}
return 0;
}
其中m_value是编辑框的关联变量!
为什么编辑框中的值一直不变 0。

解决方案 »

  1.   

    void CTextBoxView::OnButton1() 

    // TODO: Add your control notification handler code here 
    Thread_Info.hWnd=this; 
    Worker=AfxBeginThread(ShowValue,(LPVOID)&Thread_Info); 
    //m_Value=20; 
    UpdateData(false); } UINT CTextBoxView::ShowValue(LPVOID lparam) 

    THREAD_INFO * infor=(THREAD_INFO *)lparam; 
    CTextBoxView * hWnd=(CTextBoxView *)infor->hWnd; 
    for(int i=0;i <15;i++) 

    hWnd->m_Value=(float)i; 
    hWnd->UpdateData(false); 
    Sleep(50); 

    return 0; 
    } 试试
      

  2.   

    试了一下Thread_Info.hWnd=*this;但还是不行啊!
      

  3.   

    Thread_Info.hWnd=this; 不是 *this
      

  4.   

    DDX是与具体的对象相关的 而不是绑定在句柄上的
      

  5.   

    Worker=AfxBeginThread(ShowValue,(LPVOID)this); 
    CTextBoxView *pView =(CTextBoxView *)lparam; 
    OR
    Thread_Info.hWnd=this; //hWnd是CTextBoxView * hWnd定义的指针变量
    THREAD_INFO * infor=(THREAD_INFO *)lparam;
    CTextBoxView * hWnd=(CTextBoxView *)infor->hWnd; 
      

  6.   

    无论怎样传参数,只要你在子线程中操作窗口对象,必然如此参考:
    http://blog.vckbase.com/arong/archive/2009/05/17/15578.html
      

  7.   

    这种问题 一般查看变量和控件是否绑定 二看调用变量的类指针是否空值 三换种方法实现
    如:
    UINT CTextBoxView::ShowValue(LPVOID lparam) 

    THREAD_INFO * infor=(THREAD_INFO *)lparam; 
    CTextBoxView * hWnd=(CTextBoxView *)CWnd::FromHandle((HWND)infor->hWnd); 
    for(int i=0;i <15;i++) 
    { hWnd->GetDlgItem(IDD_TEST).SetWindowText(...)
    Sleep(50); 

    return 0;