Размеры и пропорции диалоговых окон
От: ZUser  
Дата: 11.12.03 18:40
Оценка:
Есть программа под Windows, откомпилированная в VS7. Она использует диалоговое окно, описанное в ресурсном скрипте так (выдержки):

IDD_MAINWND DIALOGEX 0, 0, 399, 152
STYLE DS_ABSALIGN | DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER |
WS_MINIMIZEBOX | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "=",IDC_BTNEQUAL,300,124,91,21
END

При запуске программы под WinXP диалоговое окно имеет такие размеры (по данным Spy++, разрешение экрана 1024*768):
rectangle 704*367
client rect 698*304
и для кнопки:
rectangle 159*42
client rect 159*42

А если запустить программу под Win98 или WinME, тем же Spy++ при том же разрешении получаем результаты для окна:
rectangle 804*358
client rect 798*304
и для кнопки:
rectangle 182*42
client rect 182*42

Это видно и зрительно — окно и кнопка растянуты по горизонтали по сравнению с их размерами под WinXP.
Перекомпиляция проекта в VS6 не помогла. В книгах по WIN API тоже не нашёл ничего похожего на эту проблему.

Может ли кто-нибудь подсказать, как сделать одинаковым зрительное представление окна в этих случаях
(а заодно объяснить, почему возникает такое нарушение пропорций)?
Попутный вопрос — в каких единицах в ресурсном скрипте записываются координаты и размеры окон
(т. е. что значит IDD_MAINWND DIALOGEX 0, 0, 399, 152)?
Заранее спасибо!
Re: Размеры и пропорции диалоговых окон
От: Slava Antonov Россия http://deadbeef.narod.ru
Дата: 12.12.03 01:09
Оценка: 3 (2)
Здравствуй, ZUser!

Z> Попутный вопрос — в каких единицах в ресурсном скрипте

Z> записываются координаты и размеры окон

=========Beginning of the citation==============
dialog units

Dialog units represent the units used to specify a dialog window or
dialog box control.
Horizontal dialog units are 1/4 the width of a character in the
dialog's font. Vertical dialog units are 1/8 the height of a character
in the dialog's font. They are calculated from the height and width of
the dialog's font.


=========The end of the citation================

--
Всего хорошего, Слава. (http://slava.users.otts.ru)
-= Солнце, воздух, программизм укрепляют организм! =-
Posted via RSDN NNTP Server 1.8 beta
Re: Размеры и пропорции диалоговых окон
От: BlackHeretic Израиль  
Дата: 14.12.03 15:15
Оценка: 3 (1)
Здравствуйте, ZUser, Вы писали:

ZU>Есть программа под Windows, откомпилированная в VS7. Она использует диалоговое окно, описанное в ресурсном скрипте так (выдержки):


ZU>IDD_MAINWND DIALOGEX 0, 0, 399, 152

ZU>STYLE DS_ABSALIGN | DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER |
ZU> WS_MINIMIZEBOX | WS_CAPTION | WS_SYSMENU
ZU>EXSTYLE WS_EX_APPWINDOW
ZU>FONT 8, "MS Shell Dlg", 400, 0, 0x1
ZU>BEGIN
ZU> DEFPUSHBUTTON "=",IDC_BTNEQUAL,300,124,91,21
ZU>END

ZU>При запуске программы под WinXP диалоговое окно имеет такие размеры (по данным Spy++, разрешение экрана 1024*768):

ZU> rectangle 704*367
ZU> client rect 698*304
ZU>и для кнопки:
ZU> rectangle 159*42
ZU> client rect 159*42

ZU>А если запустить программу под Win98 или WinME, тем же Spy++ при том же разрешении получаем результаты для окна:

ZU> rectangle 804*358
ZU> client rect 798*304
ZU>и для кнопки:
ZU> rectangle 182*42
ZU> client rect 182*42

ZU>Это видно и зрительно — окно и кнопка растянуты по горизонтали по сравнению с их размерами под WinXP.

ZU>Перекомпиляция проекта в VS6 не помогла. В книгах по WIN API тоже не нашёл ничего похожего на эту проблему.

ZU>Может ли кто-нибудь подсказать, как сделать одинаковым зрительное представление окна в этих случаях

ZU>(а заодно объяснить, почему возникает такое нарушение пропорций)?
ZU>Попутный вопрос — в каких единицах в ресурсном скрипте записываются координаты и размеры окон
ZU>(т. е. что значит IDD_MAINWND DIALOGEX 0, 0, 399, 152)?
ZU>Заранее спасибо!

Трабла вся в том, что ты юзаешь MS Shell Dlg. На самом деле это не фонт, а алиас. Так вот MFC подменяет его при определенных условиях системным фонтом, который от винды к винде меняется. Глубже копать в dlgcore.cpp
ICQ 156156278
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.