我有一个情况,我不知道出了什么问题。 我有一个父母和2个晒太阳的孩子。他们都是编辑类型。 现在我使用第一个控件(第一个孩子)来获取用户的输入,一切正常, 然后我通过自定义消息向父母发送消息,而不是当我使用时,我想将消息转发给第二个控件
SendMessage();
什么都没发生......
我的自定义消息定义如下:
#define WM_USERMESSAGE 0x0401
我的另一个问题是如何发送字符串?因为我把信息发给父亲 通过lParam它说它的值是72,但我没有看到我发送的文本的任何参考。
这些是代码段: 孩子1在收到输入后向父亲发送信息:
case WM_KEYUP:
{
switch (wParam) {
case VK_RETURN:
{
length = GetWindowTextLength(hwnd);
GetWindowText(hwnd, buf,length);
SetWindowText(hwnd,NULL);
tempa = SendMessage(GetParent(hwnd), WM_USERMESSAGE,sizeof(buf),*buf);
return 0;
}
}
return 0;
}
父亲得到消息并试图转发它:
case WM_USERMESSAGE:
{
int tempb = SendMessage(nhwnd, WM_USERMESSAGE, wParam, (LPARAM)"Hi");
}
并且2号儿童正在收听消息:
case WM_USERMESSAGE:
{
SetWindowText(window, "hi");//(TCHAR*)lParam);
return 0;
}
(现在如你所见,我使用静态字符串检查功能是否有效,但我想更改它们以便我可以从消息中重新获取信息) 感谢您的帮助!
答案 0 :(得分:0)
从第一次编辑到父窗口的初始SendMessage()
未正确发送字符串数据。您正在取消引用缓冲区指针,因此您只发送第一个字符(72是ASCII 'H'
字符)。您需要摆脱该取消引用并按原样传递缓冲区指针。如果您要发送缓冲区长度(您不使用),则需要发送GetWindowText()
返回的长度,而不是缓冲区的完整大小,因此接收方确切知道有多少字符实际上在缓冲区中。
试试这个:
case WM_KEYUP:
{
switch (wParam)
{
case VK_RETURN:
{
ZeroMemory(buf, sizeof(buf));
length = GetWindowTextLength(hwnd);
if (length > 0)
length = GetWindowText(hwnd, buf, min(length+1, sizeof(buf)));
SetWindowText(hwnd, NULL);
tempa = SendMessage(GetParent(hwnd), WM_USERMESSAGE, length, (LPARAM)buf);
return 0;
}
}
return 0;
}
case WM_USERMESSAGE:
{
int tempb = SendMessage(nhwnd, WM_USERMESSAGE, wParam, lParam);
return 0;
}
case WM_USERMESSAGE:
{
SetWindowText(window, (LPTSTR)lParam);
return 0;
}
假设您的所有HWNDs
都有效,那么转发应该可以正常工作。如果消息没有完全显示,那么您的HWNDs
之一无效。