在线程中实现给文本框复制

    xiaoxiao2022-07-04  144

    1)在主线程中完成修改     ::SetDlgItemText(::AfxGetMainWnd()->m_hWnd,IDC_EDIT1,strNumberCh1);//输入参数为CString。     AfxGetMainWnd获得窗口句柄。 (2)在子线程中完成修改     查阅网上资料,不能直接调用SetDlgItemText,原因未知。应向窗口类中发消息,在窗口类的消息响应函数     中添加SetDlgItemText相关代码。核心代码如下:      #define WM_ALLCH1 WM_USER+1 //自定义消息     ::PostMessage(::AfxGetApp()->m_pMainWnd->m_hWnd,WM_ALLCH1,0,0 ); //通过AfxGetApp获取窗口句柄     LRESULT  OnFunc1(WPARAM wParam,LPARAM lParam);     ...       ON_MESSAGE(WM_ALLCH1,OnFunc1)       . . .

                  LRESULT  CMyDlg::OnFunc1(WPARAM wParam,LPARAM lParam)  {}

    /

    AfxGetMainWnd()得到的是当前线程的主窗口(如果有的话),因为主窗口是属于主线程的,所以想得到主窗口HWND值, 只能在主线程中用AfxGetMainWnd(),但要不是处在主线程中,AfxGetMainWnd()是从当前线程查询主窗口的。但好像 AfxGetMainWnd()不能跨线程,要想在线程中使用主窗口的HWND值,可以把主窗口的HWND值传给线程.也 可以用AfxGetApp()先取得主线程,再通过CWinThread的类成员m_pMainWnd获得主窗口(AfxGetApp()->m_pMainWnd->m_hWnd)  

     

    最新回复(0)