У меня есть приложение, которое динамически генерирует диалоги. Я использовал его для создания Visual Studio 6.0. Переключилось на VS2013 некоторое время назад и внесло необходимые корректировки, чтобы заставить его строить. Никогда не выпускал приложение до недавнего времени. Затем пользователь заметил проблему заполнения границ Windows 7 Aero (упоминается в другом сообщении здесь), где мои диалоги заканчивались меньше, чем было запрошено, т. Е. Дополнение к пробегу Aero было взято из моего запрашиваемого размера окна, а не добавлено к нему, поэтому мои элементы управления не имеют должным образом центрированы в окне по запросу. Я установил накладку на моем рабочем столе до 1, поэтому я никогда не замечал эту проблему.Проблема с добавлением границы диалога в Visual Studio 2013 происходит только в режиме освобождения
Действительно странно, что это не Случается, когда я создаю приложение для отладки. Если я буду запускать отладочные версии и выпускать бок о бок, вы можете видеть, что диалоги отличаются по размеру от толщины границы. Я предполагаю, что версии debug vs release связанной системной библиотеки имеют разные реализации такого поведения.
В моей логике построения этих диалогов я выясняю, насколько большой должна быть область клиента, а затем добавьте метрики кадров перед созданием окна. Это неверно, т. Е. Существует ли более «правильный» способ сделать это, что будет работать во всех версиях Windows и со всеми компиляторами.
Я только что нашел GetSystemMetrics (SM_CXPADDEDBORDER) и попытался добавить 2 * в мой размер запрашиваемого окна. Это в основном устраняет проблему, но не полностью. Версия выпуска по-прежнему получает немного меньшее окно, чем версия отладки. Как ни странно, я ожидал, что окна отладочной версии просто увеличатся на ту же сумму, но они, похоже, не выглядели. Оказывается, GetSystemMetrics (SM_CXPADDEDBORDER) возвращает 8 (значение заполнения, которое я установил в Aero для проверки этого) в версии для версии приложения, но возвращает 0 в отладочной версии. Это орехи или что? – littlenoodles
Вот еще одна странная вещь. Мое приложение использует MDI, и я создаю только реальные всплывающие диалоговые окна, если окна MDI максимизированы. Если не максимизировать, я просто создаю всплывающие окна как дети MDI. В отладочной версии, когда дочерние всплывающие окна MDI не изменяются по размеру, я вообще не получаю дополнение границ. Но в версии релиза я получаю дополнение границ для нередуцируемых MDI-файлов. Является ли это просто ошибкой VS2013 - будет ли это исправлять в 2015 году? – littlenoodles