主要步驟概括:
1、使用類嚮導創建CWinThread的派生類(以CUIThread類爲例)。
2、使用類嚮導創建CDialog的派生類(以CUIThreadDlg類爲例)。
3、在CUIThread類的頭文件中,添加CUIThreadDlg類變量m_dlg。
4、利用m_dlg新建對話框窗口和關閉對話框窗口來重載CUIThread的InitInstance()和ExitInstance()。
5、對CUIThreadDlg類,對應的對話框資源,進行功能設計。(如重載OnLButtonDown())。
下面以一個簡單例子詳細介紹如何實現界面線程:
1、建立一個對話框工程MultiThread,在對話框中加入一個按鈕IDC_UI_THREAD,標題爲“用戶界面線程”。
2、利用類嚮導爲工程添加一個新類CUIThread,基類爲CWinThread。
3、在資源視圖裏面插入一個對話框,ID爲IDD_UITHREADDLG,標題爲“線程對話框”。
4、爲該對話框創建一個基於CDialog類的CUIThreadDlg。該步驟還是利用類嚮導,點擊添加類,選擇基類CDialog,輸入前面的類名,在ID框中選擇剛纔插入的那個對話框ID。
5、到此爲止我們已經建立了一個對話框工程,新建了一個線程類,一個對話框,併爲此對話框建立了一個對話框類。現在需要將該對話框和線程類關聯起來。在CUIThread類的頭文件裏面將對話框類CUIThreadDlg.h包含進來。並添加protected型成員變量CUIThreadDlg m_dlg。這樣便在線程類裏面創建了對話框類對象,可以利用該對象去重載InitInstance()和Exitinstance()。
BOOL CUIThread::InitInstance()
{
m_dlg.Create(IDD_UITHREADDLG);//創建此ID號的對話框窗口
m_dlg.ShowWindow(SW_SHOW);//顯示窗口
m_pMainWnd=&m_dlg;//獲取對話框窗口指針
return TRUE;
}
int CUIThread::ExitInstance()
{
m_dlg.DestoryWindow();//銷燬窗口
return CWinThread::ExitInstance();
}
以上重載函數內容顯而易見,就是在線程類裏面關聯起之前建立的對話框,有開始,也有結束。
6、接下來我們只需要在主對話框中開啓這個界面線程就好了,雙擊按鈕IDC_UI_THREAD,添加消息響應函數,在函數裏面只需一句話開啓界面線程就可以了
CWinThread* pThread=AfxBeginThread(RUNTIME_CLASS(CUIThread));
當然,既然用到了這個線程類,那麼就得把它的頭文件包含進來#include "UIThread.h"。這樣一個簡單的用戶界面線程就做好了。編譯運行整個工程,就可以在主對話框裏面點擊按鈕開啓這個界面線程。
7、進一步我們便可以對這個界面線程產生的對話框進行功能設計了,比如添加一個進度條,或者添加一個消息響應,也可以在裏面開啓其他的工作線程等。拿最簡單的添加一個消息響應來說,利用類嚮導選中項目裏面的UIThreadDlg類,選中一個消息例如WM_LBUTTONDOWN,點擊添加處理函數,或者雙擊就好。然後在裏面添加代碼即可。例如彈出一個提示框AfxMessageBox(“You clicked zhe left button!!!”)等。