Win32 - Сбой при получении элемента управления DialogBox с использованием GetDlgItem - PullRequest
0 голосов
/ 24 декабря 2010

В моем главном окне, после нажатия на пункт меню, появляется диалоговое окно, которое запрашивает ввод у пользователя. Затем этот ввод должен быть получен.

Вот файл ресурсов для диалогового окна:

//
// Dialog resources
//
IDD_PID DIALOG 0, 0, 158, 84
STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP
FONT 8, "MS Sans Serif"
{
    PUSHBUTTON  "&Ok", ID_PID_RET, 14, 60, 58, 14
    PUSHBUTTON  "&Cancel", ID_PID_CANCEL, 86, 60, 52, 14
    CTEXT       "Enter the PID of the process", -1, 32, 16, 91, 15, SS_CENTER
    CONTROL     "", ID_PID_INPUT, RICHEDIT_CLASS, WS_TABSTOP | WS_BORDER | ES_AUTOHSCROLL, 47, 33, 59, 14, WS_EX_CLIENTEDGE
}

Вот WindowProc, где используется диалог:

//
// Message handling for main window
//
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
    case WM_COMMAND:
        switch (LOWORD(wParam))
        {
        case ID_FILE_PID:
            int choice = DialogBox(thishInstance, MAKEINTRESOURCE(IDD_PID), hWnd, AboutDlgProc);
            if (choice == ID_PID_RET)
            {
                HWND temp = GetDlgItem(hWnd, ID_PID_INPUT);
                HRESULT HR = GetLastError();
                SendMessage(temp, WM_GETTEXT, sizeof(buff), (LPARAM)&buff);

                [...]
            }
            break;
        }
    }
}

Я немного не уверен, как это работает, когда я пытаюсь получить HWND, если я создаю окна в файлах ресурсов. Это должно работать как-то, верно? hWnd управляет диалоговым окном, а ID_PID_RET - это идентификатор элемента управления Rich Edit для пользовательского ввода, поэтому я не знаю, почему GetDlgItem не удается. Он возвращает «Контрольный идентификатор не найден», но он определен в моем resource.h. Есть идеи?

1 Ответ

2 голосов
/ 24 декабря 2010

DialogBox возвращается только после вызова EndDialog и уничтожения диалога.Диалог больше не существует, когда вы вызываете GetDlgItem.Вы можете использовать DialogBoxParam и передать буфер / структуру / класс для диалога, чтобы заполнить его содержимым поля Rich Edit, прежде чем оно вызовет EndDialog.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...