Кнопки все выделены

У меня есть две кнопки. Каждая кнопка выделена, а не только первая. Как сделать, чтобы первая кнопка была только выделенной?

Кстати, это код для двух кнопок:

openFileButton = CreateWindowA("button", "Open File and start hashing", WS_VISIBLE | WS_CHILD | SS_CENTER, 220, 210, 200, 50, hWnd,
                (HMENU)BUTTON_OPEN_FILE, NULL, NULL);
  SendMessage(openFileButton, WM_SETFONT, my_font, true);
  hashFileButton = CreateWindowA("button", "Get the File hash", WS_VISIBLE | WS_CHILD | SS_CENTER, 220, 270, 200, 50, hWnd,
                (HMENU)BUTTON_HASH_FILE, NULL, NULL);
  SendMessage(hashFileButton, WM_SETFONT, my_font, true);

Пытался использовать SetFocus, но не повезло.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Во-первых, перестаньте вызывать A версии функций WinAPI. Они устарели еще в 90-х. Вместо этого используйте версии W с префиксами L в строковых литералах и wchar_t в качестве типа символа.

Во-вторых, вы передаете неправильные флаги стиля для кнопок. В частности, вы проходите SS_CENTER. Это стиль для статических элементов управления (отсюда и префикс SS_), а не для кнопок. SS_CENTER определяется в файлах заголовков Windows как значение 0x1, что эквивалентно стилю кнопки BS_DEFPUSHBUTTON. (Обратите внимание, что макросы #define не являются типобезопасными, поэтому компилятор не знает и не может предупредить вас, что вы указываете стиль статического элемента управления при создании элемента управления кнопки.)

Наличие этого ошибочного стиля BS_DEFPUSHBUTTON является причиной того, что ваши кнопки выделены, как если бы они были кнопками по умолчанию в диалоговом окне. Для стандартных кнопок вам нужен BS_PUSHBUTTON, который # определяется как значение 0x0 и, таким образом, эквивалентен тому, чтобы не передавать никакие флаги стиля в вашу функцию CreateWindow. Но для удобочитаемости и самодокументируемого кода я бы настоятельно рекомендовал явно передавать BS_PUSHBUTTON.

Итак, ваш исправленный код становится:

openFileButton = CreateWindowW(L"button",
                               L"Open File and Start Hashing",
                               WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
                               220, 210, 200, 50,
                               hWnd,
                               (HMENU)BUTTON_OPEN_FILE,
                               NULL,
                               NULL);
SendMessage(openFileButton, WM_SETFONT, my_font, true);

hashFileButton = CreateWindowW(L"button",
                               L"Get the File Hash",
                               WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
                               220, 270, 200, 50,
                               hWnd,
                               (HMENU)BUTTON_HASH_FILE,
                               NULL,
                               NULL);
SendMessage(hashFileButton, WM_SETFONT, my_font, true);

Возможно, вы захотите сделать одну (и только одну) из ваших кнопок кнопкой «по умолчанию», используя стиль BS_DEFPUSHBUTTON. Поведение легко реализовать, вызвав функцию IsDialogMessage в вашем основном цикле сообщений (поведение, которое вы получили бы «бесплатно», создав диалоговое окно с дополнительным преимуществом редактора ресурсов для размещения элементов управления и установки стилей. ).

Он работал правильно после перехода на BS_PUSHBUTTON. Не заметил, что SS_CENTER был виновником.

cppisfun 17.12.2020 11:59

Другие вопросы по теме