В моем родительском классе у меня есть функция, которая запускается кнопкой и выполняет DoModal
для отображения диалогового окна:
void ParentClass::OnBtnPRess()
{
ChildClass dialg;
dialg.DoModal();
}
В моем ChildClass
я программно создаю произвольную ширинуи высоту диалогового окна и установки его в SetWindowPos
, но я не хочу вычислять пользовательские позиции x
и y
.
Вместо этого я хотел бы получить rect
измерения из дочернего диалога, который создается после вызова DoModal
и передачи его на SetWindowPos
:
BOOL SetWindowPos(
HWND hWndInsertAfter,
int X,
int Y,
int cx,
int cy,
UINT uFlags
);
Я пытался сделать это GetWindowRect
из BOOL ChildClass::OnInitDialog()
, чтобы проверить,Я могу получить правильные rect
позиции, но сравнивая их со значениями с помощью Spy ++ , они отключены.
Как я могу получить измерения из вызова DoModal
ииспользуйте его в моем ChildClass
?
Спасибо!
Например, если я просто полагаюсь только на DoModal
, чтобы установить размер диалога, а не вызывать SetWindowPos
ввсе, я получаю следующее от Spy ++ :
Каккогда-либо , если я пытаюсь получить размеры из DoModal
, используя GetWindowRect
, а затем используя значения, возвращенные в SetWindowPos
, я получаю следующее:
Позиции x
отключены.То, что я хочу, это x
позиции от вызова DoModal
.Как и предполагалось, я позвонил ScreenToClient
и ClientToScreen
после GetWindowRect
, но позиции x
также отключены.
ОБНОВЛЕНИЕ: По запросу, кодв OnInitDialog
имеют следующие значения:
BOOL ChildClass::OnInitDialog()
{
CDialog::OnInitDialog();
RECT rect;
GetWindowRect(&rect);
int width;
int height;
// Code for calculating width and height
SetWindowPos(&wndTop, rect.left, rect.top, width, height, SWP_SHOWWINDOW);
return TRUE;
}