+ -
当前位置:首页 → 问答吧 → 怎么用多线程传送一个窗口指针?

怎么用多线程传送一个窗口指针?

时间:2011-12-07

来源:互联网

我想用多线程发送消息实时刷新窗口中的静态文本框。
但是,创建线程函数中,有一个参数是需要发送窗口指针,我不知道怎么才能获得窗口指针。
一共三个问题,用【】标注,谢谢啦~

C/C++ code

//线程的创建
void CHTTPDlg::OnBtnRight() //按下按钮后,开始自动刷新窗口
{
    HANDLE hThread1;
    hThread1=CreateThread(NULL,0,SEE_PAGE,【这里窗口指针怎么写?m_hWnd怎么转窗口指针?】,0,NULL);
    CloseHandle(hThread1);
}

//线程函数
DWORD WINAPI CHTTPDlg::SEE_PAGE(LPVOID IpParameter)
{
    HWND thread_hwnd=((CWnd*)IpParameter)->m_hWnd;    //【窗口指针转换成窗口句柄,这么写对吗?】
    CString URLX=URL1+URL2+URL3;    //URLX是要动态显示的文字
    ::PostMessage(thread_hwnd,WM_SHUAXIN,0,(LPARAM)&URLX);
    Sleep(1000);
    //将消息传递回窗口
}

//消息响应函数
void CHTTPDlg::OnSHUAXIN(WPARAM wParam,LPARAM lParam)    //消息执行函数
{
        CString str=(LPTSTR)lParam;    //【lParam转CString,这么写对吗?】
        GetDlgItem(IDC_STATIC_NUM)->SetWindowText(str);
        UpdateData(false);
}

作者: tztztz   发布时间: 2011-12-07

hThread1=CreateThread(NULL,0,SEE_PAGE,this,0,NULL);

CHTTPDlg *pDlg = (CHTTPDlg *)IpParameter;
pDlg->PostMessage(thread_hwnd,WM_SHUAXIN,0,(LPARAM)&URLX);

经供参考

作者: hpf976149   发布时间: 2011-12-07

觉得你没有必要为了刷新控件而创建个线程去做,可以直接PostMessage就可以了,也不会堵住界面:
void CHTTPDlg::OnBtnRight() //按下按钮后,开始自动刷新窗口
{
  PostMessage(WM_REFRESH, 0, 0);
}
再写个WM_REFRESH的响应函数去刷新控件

作者: hideforever   发布时间: 2011-12-07