在線程中實現給文本框複製

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)
 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章