0

我这里有一个情况,我不知道出了什么问题。我有一个父母和 2 个 sunclassed 孩子。两者都是编辑类型。现在我正在使用第一个控件(第一个子控件)从用户那里获取输入,一切正常,然后我通过自定义消息向父级发送消息,然后我想将消息转发到第二个控件,但当我采用

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;
            }

(现在如您所见,我使用静态字符串来检查函数是否有效,但我想更改它们以便从消息中接收信息)提前感谢您的帮助!

4

1 回答 1

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是无效的。

于 2013-02-14T19:06:35.013 回答