簡體   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