《线程返回结果到主界面显示》由会员分享,可在线阅读,更多相关《线程返回结果到主界面显示(5页珍藏版)》请在金锄头文库上搜索。
1、线程返回结果到主界面显示1. 定义消息:在对话框类的头文件中定义一个自定义消息#define WM_MY_MESSAGE WM_USER+100 2.在类的消息映射表中加入映射项方法:打开对话框的 cpp 文件,在 BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP()之间添加消息映射 ON_MESSAGE(WM_MY_MESSAGE, MyMessage)3.在类中声明该消息的处理函数:方法:在对话框类点击右键,选择“添加成员函数”方法返回值:LRESULT方法名称:MyMessage(WPARAM wParam, LPARAM lParam)4.实现该处理函数long
2、CScanDlg:MyMessage(WPARAM wParam, LPARAM lParam)char * temp = (char *)lParam;char port20;strcpy(port,temp);m_Result.AddString(port);delete temp;return 0;5.实现线程函数方法:在类视图中,点开 Global,双击 theApp,在文件的最后添加一个全局函数,即线程处理函数 RecvThread内容如下:UINT _stdcall RecvThread(LPVOID lParam)char* port = new char20;strcpy(po
3、rt,80);PostMessage(AfxGetMainWnd()-GetSafeHwnd(),WM_MY_MESSAGE,0,(LPARAM)port);return 0;其中:PostMessage 即线程向主程序的窗口发送一个消息,消息名称为WM_MY_MESSAGE,AfxGetMainWnd()-GetSafeHwnd()为获取主窗口的句柄,消息传递的参数为 port6.将此全局函数加入到对话框的头文件中声明内容:UINT _stdcall RecvThread(LPVOID lParam);7.在 button 的处理函数中调用线程内容:_beginthreadex(NULL,NULL,RecvThread,NULL,NULL,NULL);注意:此例子中,在启动线程的函数中没有给线程函数传递参数。在端口扫描中需要给这个线程传递参数。参考多线程 server.cpp 的例子。8.编译程序注意要在 VC 的工程菜单中设置多线程支持9.运行结果:点击扫描后,线程的执行结果在 ListBox 中显示出来了。