При запуске программы под 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)?
Заранее спасибо!
Здравствуй, 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.
Здравствуйте, 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