MFC线程中向主窗口发送消息来操作控件

MFC线程中向主窗口发送消息来操作控件

1.在头文件stdafx.h中添加一个自定义消息宏:

#define WM_USER_MSG_HDL    (WM_USER + 100)  //100以上最安全

2.在增加新消息的窗口或对话框类头文件中增加一个回调函数声明,注意要声明为public

afx_msg LRESULT OnUserMsgHdl(WPARAM wParam, LPARAM lParam);  //信息函数声明

3.在窗口或对话框的cpp文件的BEGIN_MESSAGE_MAP,END_MESSAGE_MAP中增加一行

ON_MESSAGE(WM_USER_MSG_HDL, OnUserMsgHdl)   //消息映射

4.在窗口或对话框的cpp文件中添加回调函数的实现,如:

//wParam和lParam为sendMessage或PostMessage传递过来的参数
LRESULT ThreadDialog::OnUserMsgHdl(WPARAM wParam, LPARAM lParam)
{
    TRACE("WM_USER_MSG_HDL message /n");
    return 0;
}    

5.自定义消息的触发:

::PostMessage(GetSafeHwnd(), WM_USER_MSG_HDL, 0, 0);  //还可以用SendMessage

其中,GetSafeHwnd()得到了一个当前窗口的句柄,此消息将发送给当前窗口,如果想发送消息给其他窗口只需改变这个句柄,前提示目的的窗口也实现了此消息的处理函数。

举例:

//CtestDlg.h
#define WM_UPDATE_STATIC (WM_USER + 100)     //更新主界面static控件信息 
 
DWORD  m_dwThreadID;
HANDLE m_hThread;
static DWORD  TestThread(LPVOID lpParam);
afx_msg LRESULT OnUpdateStatic(WPARAM wParam, LPARAM lParam);   //添加用户自定义消息
 
 
 
//CtestDlg.cpp
BEGIN_MESSAGE_MAP(CtestDlg, CDialogEx)	
    ON_MESSAGE(WM_UPDATE_STATIC, &CtestDlg::OnUpdateStatic)	
END_MESSAGE_MAP()
 
void CtestDlg::OnBnClickedButton4()
{
    // TODO:  在此添加控件通知处理程序代码
    m_hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)TestThread, this, 0, &m_dwThreadID);
}
 
DWORD  CtestDlg::TestThread(LPVOID lpParam)
{
    CtestDlg* pInfo = (CtestDlg*)lpParam;
    ::PostMessage(pInfo->m_hWnd, WM_UPDATE_STATIC, 0, 0);
 
    return false;
}
 
 
LRESULT CtestDlg::OnUpdateStatic(WPARAM wParam, LPARAM lParam)
{
    if (wParam == 0)
    {
	GetDlgItem(IDC_STATIC)->SetWindowText(L"Hello Linux");
    }
    else
    {
	GetDlgItem(IDC_STATIC)->SetWindowText(L"Hello Windows");
    }
 
    return 0;
}

原文链接:https://blog.csdn.net/lidandan2016/article/details/91414756

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值