繁体   English   中英

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

[英]Trying to capture text from an edit box on button click and then display to another edit box

我对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)显示任何内容-在执行GetWindowText(hwnd_path, buffer, 5)命令后,缓冲区保持为空。

如果有人可以提供任何建议,我将不胜感激。

插口

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM