我们举一个例子:
点击按钮创建线程,并把字符串显示在编辑框中
按钮ID:IDC_BUT_CreateThread
Edit编辑框ID:IDC_ShowStr
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()
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);
- }
联系客服