C++ MFC深入详解之----线程通过PostMessage发送消息(自定义消息)

我们举一个例子:

点击按钮创建线程,并把字符串显示在编辑框中

按钮ID:IDC_BUT_CreateThread

Edit编辑框ID:IDC_ShowStr

 

首先第一步:(第一步都是在xxxxDlg.h文件中)

1.在 xxxxDlg.h文件中定义消息(xxxxDlg.h中xxxx是创建时自己起的名字)

添加:#define WM_MY_MESSAGE (WM_USER+100)  

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#define WM_MY_MESSAGE (WM_USER+100)   

2.定义消息处理函数

添加:afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);

// Implementation
protected:
HICON m_hIcon;
// Generated message map functions
//{{AFX_MSG(CTestPostMessage_3Dlg)

//在此处加入

afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam); 

//}}AFX_MSG
DECLARE_MESSAGE_MAP()

 

第二步:在xxxxDlg.cpp中

1.添加消息映射

在BEGIN_MESSAGE_MAP(xxxxDlg, CDialog)   和     END_MESSAGE_MAP()  中间

添加:ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)

BEGIN_MESSAGE_MAP(xxxxDlg, CDialog)
//{{AFX_MSG_MAP(xxxxDlg)
ON_WM_SYSCOMMAND()
ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage) 
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUT_CreateThread, OnButtonSendMsg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

2.实现消息处理函数

要实现你消息映射对应的函数这里叫OnMyMessage

LRESULT   你的类名::OnMyMessage(WPARAM wParam, LPARAM lParam)

{ 
// TODO: 处理用户自定义消息 
//... 
CString str = (LPCTSTR)lParam;
SetWindowText(IDC_ShowStr,str);
 delete str;
return 0; 
}

这样在创建线程的时候将主窗口句柄作为参数传入线程,就可以用 PostMessage传递消息了。

 

鼠标事件:

在刚才的Button添加响应事件,写入如下代码

void xxxxDlg::OnButtonSendMsg() 
{
    CString *p_str=new CString("Hello EveryBody");
    CWnd *pWnd=CWnd::FindWindow(NULL,"xxxx(你的文件名字)");//获取目的窗口对象
         ::PostMessage(*pWnd,WM_MY_MESSAGE,0,(LPARAM)(LPCTSTR)p_str);
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿尔兹

如果觉得有用就推荐给你的朋友吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值