Проблема заполнения границ диалогового окна в Visual Studio 2013 возникает только в режиме выпуска

У меня есть приложение, которое генерирует диалоги динамически. Я использовал для сборки с Visual Studio 6.0. Некоторое время назад переключился на VS2013 и внёс необходимые коррективы, чтобы заставить его строить. На самом деле никогда не выпускал приложение до недавнего времени. Затем пользователь заметил проблему заполнения границ в Windows 7 Aero (упоминавшуюся в другом посте здесь), когда мои диалоги заканчивались меньше запрошенного - то есть, заполнение границ Aero было взято из моего запрошенного размера окна, а не добавлено к нему, поэтому мои элементы управления не центрированы должным образом в окне, как было запрошено. Я установил отступы границ на рабочем столе на 1, поэтому никогда не замечал проблему.

Действительно странная вещь заключается в том, что этого не происходит, когда я собираю приложение для отладки. Если я буду запускать версии отладки и выпуска параллельно, вы увидите, что диалоговые окна различаются по размеру в зависимости от толщины заполнения полей. Я предполагаю, что версии отладки и выпуска системной библиотеки, связанные в ней, имеют разные реализации этого поведения.

В моей логике построения этих диалогов я выясняю, насколько большой должна быть клиентская область, и затем добавляю метрики кадра перед созданием окна. Это неправильно - то есть, есть ли "более правильный" способ сделать это, который будет работать во всех версиях Windows и со всеми компиляторами.

1 ответ

Хорошо, вроде есть ответ. Версии выпуска и отладки сообщают о совершенно разных значениях для различных системных показателей, связанных с границами.

Отладка: SM_CXPADDEDBORDER=0, SM_CXBORDER=1, SM_CXSIZEFRAME=12, SM_CXFIXEDFRAME=3

Выпуск: SM_CXPADDEDBORDER=8, SM_CXBORDER=1, SM_CXSIZEFRAME=4, SM_CXFIXEDFRAME=3

Итак, как только я добавляю все это в требуемый размер окна, обе версии, кажется, работают - хотя они дают разные результаты. Не изменяемые размеры окна в отладочной версии не получают границы с отступами, а изменяемые размеры получают большую границу, но это обусловлено "рамкой размера", а не "отступом".

Интересно, что когда я смотрю на свойства моего проекта, командная строка компоновщика в конфигурации отладки имеет /SUBSYSTEM:WINDOWS",5.01", а в конфигурации выпуска она просто имеет /SUBSYSTEM:WINDOWS. Я не вижу этот 5.01 в самом файле myapp.vcxproj, поэтому я думаю, что VS 2013 динамически вставляет ", 5.01" для конфигурации отладки, чтобы специально включить некоторый режим совместимости. Я пытался указать его в разделе "Система" компоновщика, но мои изменения не отображались в командной строке. Кто-нибудь знает, возможно ли (или желательно) установить это вручную?

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