Слева есть родительское диалоговое окно с древовидным представлением, и в зависимости от выбранного элемента справа отображается другое дочернее окно. . Все они созданы в дизайнере VS 2022.
Сгенерированный родительский код:
Код: Выделить всё
IDD_GLOBAL_OPTIONS DIALOGEX 0, 0, 413, 337
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CONTROLPARENT | WS_EX_APPWINDOW
CAPTION "Global Options"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "OK",IDOK,291,315,50,14
PUSHBUTTON "Cancel",IDCANCEL,348,315,50,14
EDITTEXT IDC_EDIT_GLOBAL_OPTIONS_NAME,123,14,275,12,ES_UPPERCASE | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP,WS_EX_CLIENTEDGE
CONTROL "",IDC_GLOBAL_OPTIONS_TREE,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_NOHSCROLL | WS_BORDER | WS_TABSTOP,7,15,108,294
END
Код: Выделить всё
IDD_GLOBAL_OPTIONS_CONFIGPATHS DIALOGEX 0, 0, 297, 291
STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
FONT 8, "MS Shell Dlg", 400, 0, 0x0
BEGIN
GROUPBOX "Configuration directory",IDC_STATIC,10,15,279,52
LTEXT "Configuration data store location",IDC_STATIC,22,31,106,8
CONTROL "",IDC_MFCEDITBROWSE1,"MfcEditBrowse",WS_BORDER | WS_TABSTOP | 0x80,22,42,260,14
GROUPBOX "Personal data directory",IDC_STATIC,10,74,279,77
LTEXT "Personal data such as usernames, passwords and automated login information can be stored separately from all other configuration data",IDC_STATIC,22,89,260,23
CONTROL "Store personal data separately",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,22,116,115,10
CONTROL "",IDC_MFCEDITBROWSE2,"MfcEditBrowse",WS_BORDER | WS_TABSTOP | 0x80,32,128,250,14
END
Код: Выделить всё
BOOL CGlobalOptionsConfigPaths::OnInitDialog()
{
CDialogEx::OnInitDialog();
//CWnd *pWnd = CGlobalOptionsConfigPaths::GetParent();
CGlobalOptionsConfigPaths::MoveWindow(173, 30, 450, 480, true);
...


Я добавил некоторый код, чтобы получить RECT как для родительского, так и для дочернего диалога, полагая, что каким-то образом я бы это сделал. вижу некоторое несоответствие между ноутбуком и внешним монитором.
К сожалению(!?) это не так, поэтому я в замешательстве.
В обоих случаях ребенок следует за MoveWindow(173, 30, 450, 480, true), как и должно быть.
Родительский RECT на внешнем мониторе: {LT(305, 170) RB(941, 757) [636 x 587]
Дочерний RECT на внешнем мониторе: {LT(478, 200) RB(928, 680) [450 x 480]
Родительский RECT на ноутбуке: { LT(306, 177) RB(1047, 898) [741 x 721]
Дочерний RECT на ноутбуке: {LT(479, 207) RB(929, 687) [450 x 480]}
В обоих случаях child_left/top = родительский_left/top + аргументы MoveWindow.
Итак, почему я это получаю?
Подробнее здесь: https://stackoverflow.com/questions/785 ... g-monitors
Мобильная версия