На рисунке показано, как выглядит типичное MDI-приложение под Windows - то есть такое, в котором можно одновременно открыть и редактировать несколько документов.
Цвета окон в системе Windows, в том числе и цвет фона MDI-приложения, заданы в системных настройках цвета. Пользователь может их редактировать через диалог "Свойства экрана". И эти настройки должны действовать на все приложения. По идее. Чтобы они на самом деле действовали, программист должен об этом позаботиться: задавая цвета элементов интерфейса, он должен не вручную указывать цвет, а некоторую константу-ссылку, увидев которую, система Windows подставит нужный цвет.
И вот с цветом фона для MDI-приложений существует конфузия. Для самих MDI-приложений цвет фона задается неявно внутри винды, и программист его не видит. А вот если я хочу сделать не-MDI приложение, использующее тот же самый цвет - то начинаются проблемы. На первый взгляд, если посмотреть исходник типичного MDI-приложения, то при создании главного окна указывается цвет фона COLOR_APPWORKSPACE. Но это совсем не тот цвет, что нужно. При попытке использовать эту константу в другом месте, например при задании цвета фона других окон, это становится сразу видно. Как же так получается?
Получается это потому, что все рабочее пространство главного окна программы занято специальным дочерним окном. Называется оно MDI Client Window. И цвет фона главного окна (Frame window) не виден - он закрыт окном MDI Client. Поэтому совершенно неважно, какой цвет фона задать для главного окна. Я обычно выбираю NULL_BRUSH - чтобы система даже не пыталась отрисовать этот фон, ведь все равно он сразу же будет затерт.
Цвет фона MDI Client Window программистом явно не задается. Он задан в системе, в оконном классе "MDICLIENT". И мне удалось посмотреть его с помощью функции GetClassInfo(NULL,"MDICLIENT",&wc).
В результате я выяснил, что цвет фона для MDI-приложений задается константой COLOR_HIGHLIGHT. Далеко не очевидный результат!
[663x316]