MFC创建用户界面线程

主要步骤概括:

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!!!”)等。












你可能感兴趣的:(mfc,界面线程)