尝试从按钮单击的编辑框中捕获文本,然后显示到另一个编辑框

时间:2013-12-02 12:26:35

标签: c++ c winapi settext

我是Win32 gui编码的新手,在捕获用户输入方面遇到了很多困难。

基本上我要做的是让用户在文本框中输入一些文本(称之为文本框A),单击一个按钮,然后将该文本复制到另一个文本框中(称之为文本框B)。我正在尝试使用GetWindowsText()函数将文本框A中的文本复制到缓冲区,然后在单击按钮时向文本框B发送消息,将文本设置为等于缓冲区的内容。简单吧? ...我的回调代码是:

    case WM_COMMAND:
    switch(LOWORD(wParam))
    {
        case IDC_MAIN_BUTTON:
        {
            GetWindowText(hwnd_path, buffer, 5);
            SendMessage(hEdit,WM_SETTEXT,NULL,(LPARAM)buffer);
            MessageBox(NULL, buffer, TEXT("Edit Text"), MB_OK);
        }
        break;
    }
    break;

hwnd_path是文本框A的句柄,hEdit是文本框B的句柄,缓冲区已声明为:TCHAR buffer[6] - 这些变量已全局声明,因此它们都应该在回调函数的范围内。我已经添加了消息框,只是为了仔细检查缓冲区的值。

问题是单击按钮后文本框B或消息框中都没有显示任何内容 - 在GetWindowText(hwnd_path, buffer, 5)命令后,缓冲区似乎仍为空。

如果有人能提供任何建议,我将非常感激。

杰克

1 个答案:

答案 0 :(得分:1)

使用SetWindowText而不是调用SendMessage。

我怀疑你的hEdit和/或hwnd_path句柄不是你认为的那样。确保这些HWND变量在创建时实际引用了编辑和文本控制句柄。

在调用“MessageBox”后,不要指望对话框立即更新。可能需要一些内部消息帖子才能使SetWindowText API实际完成。 MessageBox会在内部发送消息,所以这可能没问题。

这是一些可行的示例代码。它是在DialogBox wndproc中编写的。如果您在一个对话框中,请将两个对GetDlgItem的调用替换为创建编辑和文本字段时返回的窗口句柄的分配。

    case WM_COMMAND:
    {
        switch LOWORD(wParam)
        {
            case IDC_BUTTON1:
            {
                wchar_t szEditText[300] = {0};

                // If you aren't using DialogBox(), then replace these apis by assigneing hEdit and hText with the HANDLES of your created controls.
                HWND hEdit = GetDlgItem(hwnd, IDC_EDIT1);
                HWND hText = GetDlgItem(hwnd, IDC_TEXT1);

                GetWindowText(hEdit, szEditText, ARRAYSIZE(szEditText));
                SetWindowText(hText, szEditText);

                // If this Window was created with DialogBox, then return TRUE
                // Otherwise, return 0.
                return TRUE;
            }