编写个c++接收并发送信息到目标窗口
时间: 2024-09-08 21:03:31 浏览: 50
在C++中,实现接收和发送消息到特定窗口通常需要使用Windows API,特别是User32.dll库中的功能。这个过程涉及到了解窗口句柄、消息传递以及WM_COPYDATA消息。以下是一个简单的例子,展示了如何创建一个发送和接收消息的小程序:
```cpp
#include <windows.h>
#include <iostream>
// 发送数据到指定窗口
void SendMessageToWindow(HWND targetWindow, WPARAM wParam, LPARAM lParam)
{
COPYDATASTRUCT cds = { sizeof(COPYDATASTRUCT), (LPARAM)"Data to send", nullptr };
SendData(targetWindow, wParam, lParam, &cds);
}
// 发送数据,内部使用PostMessage,避免阻塞
BOOL SendData(HWND hWnd, WPARAM wparam, LPARAM lparam, const COPYDATASTRUCT* pCD)
{
return PostMessage(hWnd, WM_COPYDATA, wparam, reinterpret_cast<LPARAM>(pCD));
}
// 接收数据
LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
if (msg == WM_COPYDATA) {
LPARAM lpData = lParam;
COPYDATASTRUCT* pCD = static_cast<COPYDATASTRUCT*>(lpData);
std::cout << "Received message: " << pCD->lpszData << std::endl;
// 可在此处处理接收到的数据
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}
int main()
{
// 创建窗口
WNDCLASS wc = {};
wc.lpfnWndProc = WindowProc; // 设置窗口处理器函数
wc.hInstance = GetModuleHandle(NULL); // 获取当前模块的句柄
wc.lpszClassName = L"MyClass"; // 窗口类名
RegisterClass(&wc);
HWND hWnd = CreateWindow(L"MyClass", L"My Window", WS_OVERLAPPEDWINDOW, 0, 0, 640, 480, NULL, NULL, wc.hInstance, NULL);
ShowWindow(hWnd, SW_SHOW);
// 发送消息
SendMessageToWindow(hWnd, WPARAM(0x1234), LPARAM("Hello, Target Window!")); // 使用自定义的数据作为wParam和lParam
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
UnregisterClass(L"MyClass", wc.hInstance);
return 0;
}
```
在这个例子中,`SendMessageToWindow`函数用于向指定窗口发送数据,而窗口自身的消息处理函数`WindowProc`负责接收并打印接收到的消息。你需要替换`WM_COPYDATA`和`COPYDATASTRUCT`的参数以适应你的实际需求。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![application/x-zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231044937.png)
![-](https://img-home.csdnimg.cn/images/20241231044937.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)