我是靠谱客的博主 迷人小刺猬,最近开发中收集的这篇文章主要介绍MFC学习笔记——线程中控制窗口内容 .,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

简单概要

在前一篇的文章中写到了使用MFC的自定义消息,那个例子过于简单,今天就写一个比较实用而且用的地方也很多的例子。

预备知识

你得知道什么是 消息机制 ,或者你读了我前面上次的文章。

具体步骤

新建一个工程,名称为“ThreadControlUi”,使用 Unicode 编码。具体界面可以如下:

然后按照上一篇文章所写的方法添加一个 WM_CHENGE_EDIT_TEXT 消息(记得在.h文件添加消息ID)。

然后为消息添加如下代码:

[cpp] view plain copy print ?
  1. //------------------------------------------------------------------------------   
  2. // 函数命名:  CThreadControlUiDlg::OnChengeEditText   
  3. // 返回类型:  LRESULT   
  4. //------------------------------------------------------------------------------   
  5. // 参数信息:  WPARAM wParam 这个参数用来接收传入的字符   
  6. // 参数信息:  LPARAM lParam 保留参数   
  7. // 函数备注:    
  8. //------------------------------------------------------------------------------   
  9. afx_msg LRESULT CThreadControlUiDlg::OnChengeEditText(WPARAM wParam, LPARAM lParam)  
  10. {  
  11.     // 将WPARAM的参数强制转换为CString类型   
  12.     CString* strEdit = (CString*)wParam;  
  13.   
  14.     // 将字符串设置到控件中   
  15.     SetDlgItemText(IDC_EDIT1,*strEdit);  
  16.   
  17.     return 0;  
  18. }  
//------------------------------------------------------------------------------
// 函数命名:  CThreadControlUiDlg::OnChengeEditText
// 返回类型:  LRESULT
//------------------------------------------------------------------------------
// 参数信息:  WPARAM wParam 这个参数用来接收传入的字符
// 参数信息:  LPARAM lParam 保留参数
// 函数备注: 
//------------------------------------------------------------------------------
afx_msg LRESULT CThreadControlUiDlg::OnChengeEditText(WPARAM wParam, LPARAM lParam)
{
	// 将WPARAM的参数强制转换为CString类型
	CString* strEdit = (CString*)wParam;

	// 将字符串设置到控件中
	SetDlgItemText(IDC_EDIT1,*strEdit);

	return 0;
}
添加完消息代码之后再给“按钮”添加代码:


[cpp] view plain copy print ?
  1. void thread_proc(LPVOID lpVoid)  
  2. {  
  3.     CString strEdit;  
  4.   
  5.     for (int i = 0; i < 10 ; i++)  
  6.     {  
  7.         strEdit.Format( _T("我是在线程里哦~ ( ̄. ̄),现在值为:%d"),i);  
  8.   
  9.         // 在线程中向主窗口发送自己的消息   
  10.         SendMessage(  
  11.             AfxGetApp()->GetMainWnd()->GetSafeHwnd(), // 获得主窗口在句柄   
  12.             WM_CHENGE_EDIT_TEXT,  // 发送自己的窗口消息   
  13.             (WPARAM)&strEdit,     // 设置发送的内容   
  14.             NULL);                // 预留参数为空   
  15.   
  16.         Sleep(500);               // 使线程延时500毫秒,为了看清界面的数字变化   
  17.     }  
  18.   
  19. }  
  20.   
  21. void CThreadControlUiDlg::OnBnClickedButton1()  
  22. {  
  23.     // 创建一个新的线程   
  24.     CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)thread_proc,NULL,NULL,NULL);  
  25. }  
void thread_proc(LPVOID lpVoid)
{
	CString strEdit;

	for (int i = 0; i < 10 ; i++)
	{
		strEdit.Format( _T("我是在线程里哦~ ( ̄. ̄),现在值为:%d"),i);

		// 在线程中向主窗口发送自己的消息
		SendMessage(
			AfxGetApp()->GetMainWnd()->GetSafeHwnd(), // 获得主窗口在句柄
			WM_CHENGE_EDIT_TEXT,  // 发送自己的窗口消息
			(WPARAM)&strEdit,     // 设置发送的内容
			NULL);                // 预留参数为空

		Sleep(500);               // 使线程延时500毫秒,为了看清界面的数字变化
	}

}

void CThreadControlUiDlg::OnBnClickedButton1()
{
	// 创建一个新的线程
	CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)thread_proc,NULL,NULL,NULL);
}
这样我们的程序就算完成了。编译一下吧。

总结拓展

其实消息的用处是很广的,不值是在这里可以体现!

事例下载


下载地址:点击下载

最后

以上就是迷人小刺猬为你收集整理的MFC学习笔记——线程中控制窗口内容 .的全部内容,希望文章能够帮你解决MFC学习笔记——线程中控制窗口内容 .所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部