Диалоговое окно в C ++ не получает определенные нажатия клавиш - PullRequest
4 голосов
/ 27 декабря 2011

Когда я (наконец-то) учусь кодировать приложения Windows на C ++, я наткнулся на это: у меня есть диалоговое окно, которое я создаю с помощью CreateDialog(), а также кнопка по умолчанию.Однако каждый раз, когда я нажимаю TAB или ENTER, ничего не происходит, и фокус управления не изменяется, и кнопка по умолчанию не активируется.Вот ресурс для моего диалога.

IDD_MAINWIND DIALOG 0, 0, 312, 205
STYLE DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_GROUP | WS_POPUP | WS_SYSMENU
EXSTYLE WS_EX_WINDOWEDGE
CAPTION "Dialog"
FONT 8, "Tahoma"
{
    PUSHBUTTON      "&Send", IDC_BUTTON_SEND , 280, 168, 22, 14, BS_DEFPUSHBUTTON
    LTEXT           "Hello", IDC_STATIC1, 9, 9, 296, 149, SS_LEFT | SS_NOPREFIX | SS_SUNKEN, WS_EX_TRANSPARENT
    EDITTEXT        IDC_MESSAGE, 9, 168, 265, 13, ES_AUTOHSCROLL
    PUSHBUTTON      "Tools", IDC_BUTTON_TOOLS, 8, 185, 146, 14
    PUSHBUTTON      "Exit", IDC_BUTTON_EXIT, 163, 185, 136, 14
}

Любая помощь с благодарностью.Особенно сейчас, в третий день Рождества.

1 Ответ

3 голосов
/ 27 декабря 2011

Решение состоит в добавлении WS_TABSTOP стилей к каждому дочернему элементу диалогового окна.

Например:

PUSHBUTTON      "&Send", IDC_BUTTON_SEND , 280, 168, 22, 14, BS_DEFPUSHBUTTON | WS_TABSTOP

Убедитесь, что каждый элемент управления имеет WS_VISIBLE | WS_CHILD стилей,Также не забудьте добавить стиль WS_EX_CONTROLPARENT в окно и удалить стиль WS_GROUP из диалогового окна.

Более того

Проверьте ваш диалог

Или, если вместо этого вы используете Window Pro , используйте следующий фрагмент

Вкладка табуляции обеспечивается менеджером диалогов, а не менеджером окон.Поэтому, чтобы получить обработку табуляции, вам нужно вызвать IsDialogMessage в цикле сообщений с hwnd вашего окна:

/* Run the message loop. It will run until GetMessage() returns 0 */
while (GetMessage (&messages, NULL, 0, 0))
{
    if (!IsDialogMessage(hwnd, &messages))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }
}

Пожалуйста, узнайте об атрибутах элементов диалогового окна WS_TABSTOP и WS_GROUP.1029 * Эта ссылка должна быть полезной для вас: http://msdn.microsoft.com/en-us/library/windows/desktop/ms644994.aspx#controls

...