|
VC++ mfc在UNICODE下,写一段SendMessage发送及接收带字符串参数消息的代码
在VC++ MFC中,如果你想使用 `SendMessage` 发送和接收带字符串参数的消息,可以通过自定义消息和使用 `wParam` 和 `lParam` 参数来实现。以下是一个示例代码,展示如何发送和接收带字符串参数的消息。
### 示例代码
- #include <afxwin.h>
- #include <string>
- // 自定义消息
- #define WM_MYSTRINGMESSAGE (WM_USER + 1)
- class CMyWnd : public CWnd {
- public:
- CMyWnd() {
- // 创建窗口
- Create(NULL, _T("My Window"));
- }
- protected:
- afx_msg LRESULT OnMyStringMessage(WPARAM wParam, LPARAM lParam) {
- // lParam 为指向字符串的指针
- CString* pStr = reinterpret_cast<CString*>(lParam);
- if (pStr != nullptr) {
- // 输出接收到的字符串
- MessageBox(*pStr, _T("Received Message"), MB_OK);
- }
- return 0;
- }
- DECLARE_MESSAGE_MAP()
- };
- // 消息映射
- BEGIN_MESSAGE_MAP(CMyWnd, CWnd)
- ON_MESSAGE(WM_MYSTRINGMESSAGE, &CMyWnd::OnMyStringMessage)
- END_MESSAGE_MAP()
- class CMyApp : public CWinApp {
- public:
- virtual BOOL InitInstance() {
- CMyWnd* pWnd = new CMyWnd();
- pWnd->ShowWindow(SW_SHOW);
- // 发送字符串消息
- CString strMessage = _T("Hello, this is a test message!");
- SendMessage(pWnd->m_hWnd, WM_MYSTRINGMESSAGE, 0, reinterpret_cast<LPARAM>(&strMessage));
- return TRUE;
- }
- };
- CMyApp theApp;
复制代码
### 代码说明
1. **自定义消息**:定义了一个自定义消息 `WM_MYSTRINGMESSAGE` ,用于发送和接收字符串消息。
2. **窗口类 `CMyWnd` **:
- 在构造函数中创建窗口。
- 实现了 `OnMyStringMessage` 方法,该方法处理接收到的字符串消息。 `lParam` 被解释为指向 `CString` 的指针,并通过 `MessageBox` 显示接收到的字符串。
3. **消息映射**:使用 `BEGIN_MESSAGE_MAP` 和 `END_MESSAGE_MAP` 宏将自定义消息与处理函数关联。
4. **应用程序类 `CMyApp` **:
- 在 `InitInstance` 方法中创建窗口实例,并显示窗口。
- 创建一个 `CString` 消息字符串,并使用 `SendMessage` 发送自定义消息。 `lParam` 参数传递字符串的指针。
### 注意事项
- 确保在项目中正确配置了 MFC 库,并使用 Unicode 编码。
- 由于 `lParam` 传递的是指向 `CString` 的指针,因此在使用时要确保指针的有效性。
|
|