MFC学习笔记——线程中控制窗口内容 .
2013-04-28 17:20
330 查看
简单概要
在前一篇的文章中写到了使用MFC的自定义消息,那个例子过于简单,今天就写一个比较实用而且用的地方也很多的例子。预备知识
你得知道什么是 消息机制 ,或者你读了我前面上次的文章。具体步骤
新建一个工程,名称为“ThreadControlUi”,使用Unicode 编码。具体界面可以如下:
然后按照上一篇文章所写的方法添加一个 WM_CHENGE_EDIT_TEXT 消息(记得在.h文件添加消息ID)。
然后为消息添加如下代码:
[cpp]
view plaincopyprint?
//------------------------------------------------------------------------------
// 函数命名: 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;
}
//------------------------------------------------------------------------------ // 函数命名: 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 plaincopyprint?
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);
}
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消息三部曲(2)——线程中控制窗口内容
- MFC学习笔记(一)应用程序窗口初始化
- 学习笔记--MFC在滚动条窗口如何使所图的图形不产生偏移
- MFC学习笔记之六————更改appwizard生成的窗口外观
- MFC学习笔记之三————区分窗口类对象以及窗口&&四种获得DC方式画图
- MFC —— 线程控制主窗口的控件
- MFC学习笔记——多窗口之间的通信 .
- 学习笔记--MFC在滚动条窗口如何使所图的图形不产生偏移
- UNIX环境编程学习笔记(27)——多线程编程(二):控制线程属性
- MFC学习笔记之一(绘图+控制)
- MFC学习笔记之:MFC最基本动作(如创建窗口,点击取消等)函数的执行顺序
- [MFC学习笔记]--lesson15多线程与聊天室程序的设计
- Linux进程线程学习笔记:进程控制
- MFC 线程学习笔记
- VS2013MFC单文档工程学习笔记七 - 创建新的一个窗口并让窗口2透明
- Java学习笔记之线程的控制
- MFC学习笔记 线程之信号量
- [每日一学]MFC学习笔记——多窗口之间的通信
- MFC学习笔记之六————更改appwizard生成的窗口外观