您的位置:首页 > 其它

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