Процедура Windows, если оператор Else не работает для сообщения - PullRequest
0 голосов
/ 27 декабря 2010

В настоящее время я пытаюсь создать графический интерфейс для некоторых программ, и у меня возникают проблемы с некоторыми статическими элементами управления.В моей процедуре Windows у меня есть сообщение WM_CTLCOLORSTATIC для того, когда должны быть нарисованы статические элементы управления.Внутри сообщения у меня есть оператор IF ELSE, в котором он сравнивает дескрипторы окна с тем, который нужно нарисовать, и выполняет функции окна соответственно.Один из них - это статический текстовый элемент управления, для которого задан цвет фона при рисовании, а другой - рисовать границы статического элемента управления.

    case WM_CTLCOLORSTATIC:
    {
        if (hwnd = ANNwindow->settingsborder)
        {
            SetBkMode((HDC)wParam, TRANSPARENT);
            return (LRESULT)ANNwindow->backgroundbrush;
        }
        else if (hwnd = ANNwindow->settingstext)
        {
            DrawEdge((HDC)wParam, &ANNwindow->rect, EDGE_ETCHED, BF_BOTTOMRIGHT);
            return (LRESULT)ANNwindow->backgroundbrush;
        }

    }

Параметры настройки и текст настроек - это дескрипторы окон в моем классе для создания графического интерфейса.

Если я переверну порядок операторов if else, он сделает только первый, независимо от того, в каком порядке.Если изменение цвета фона находится под IF, оно делает это.Если рисование границы находится под IF, то оно делает это, но никогда не то, что под остальной частью.Это простая ошибка в использовании языка C ++, так как я не могу найти проблему.Пожалуйста, помогите, спасибо.

PS Для части прорисовки я сначала создаю статическую контрольную границу, затем использую прорисовку на этом, должен ли я сделать это по-другому?Спасибо.

Ответы [ 2 ]

4 голосов
/ 27 декабря 2010
  1. Включите предупреждения в вашем компиляторе.
  2. Обратите внимание, что в обоих условиях вы используете назначения (=) вместо сравнений (==).
3 голосов
/ 27 декабря 2010

Вот ваша проблема.

if (hwnd = ANNwindow->settingsborder)

должно быть

if (hwnd == ANNwindow->settingsborder)
//       ^^

и то же самое для оператора else if.

Вы назначаете содержимоеANNwindow->settingsborder в hwnd, операция, которая практически всегда возвращает true вместо выполнения теста на равенство.

...