У меня есть диалоговое окно типа CPropertyPage
, где в диалоговом окне я показываю объект CPropertySheet
для отображения нескольких вкладок.
Изначально, когда я тестировал этот диалог, у меня былоон работает как отдельное диалоговое окно (dialog.DoModal()
).Когда я запускаю его как отдельное диалоговое окно, функция SetWindowPos()
работает, и я успешно переместил свой объект CPropertySheet
в правильное местоположение.
Однако затем я попытался включить это CPropertyPage
в другого родителя CPropertySheet
.Это когда функция SetWindowPos()
не работает.
Кажется, что она игнорирует ее, когда у меня есть CPropertySheet
на CPropertyPage
, который включен в другой CPropertySheet
.Кто-нибудь знает, почему?
РЕДАКТИРОВАНИЕ: Добавлен дополнительный код и картинки.
Код:
Панель 'pane.h':
CPropertySheet SheetSettings;
Top CPropertySheet
, top.h:
CMyDlg PageMyDlg;
Onsize(UINT nType, int cx, int cy);
Top CPropertySheet
, top.cpp:
Top::Top()
{
SheetSettings.AddPage(&PageMyDlg);
}
Top::Onsize(UINT nType, int cx, int cy)
{
if(SheetSettings.GetSafeHwnd())
{
SheetSettings.MoveWindow(0, 0, cx, cy);
CRect Rect;
SheetSettings.GetClientRect(Rect);
Rect.InflateRect(-2, -4, -2, -2);
SheetSettings.GetTabControl()->MoveWindow(Rect.left, Rect.top, Rect.Width(), Rect.Height());
SheetSettings.GetTabControl()->AdjustRect(FALSE, Rect);
if (Page12nc.GetSafeHwnd())
Page12nc.MoveWindow(Rect.left, Rect.top, Rect.Width(), Rect.Height());
}
// CPane holds the page where the CPropertySheet is drawn.
CPane::OnSize(nType, cx, cy);
}
Диалог 'CMyDlg', MyDlg.h:
CPropertySheet _dlgPropSheet;
Диалог 'CMyDlg', MyDlg.cpp:
CRect rcSheet;
_dlgPropSheet.GetParent()->GetWindowRect(&rcSheet);
ScreenToClient( &rcSheet );
// This goes wrong.
_dlgPropSheet.SetWindowPos( NULL, rcSheet.left+26, rcSheet.top+223, rcSheet.Width(), rcSheet.Height(), SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE );
Это это то, что я получаю, когда я .doModal()
мой CMyDlg
.
И это - это то, что он рисует, когда внизу рисуется сверху.