SetWindowPos () работает для диалога, но не в CPropertyPage - PullRequest
0 голосов
/ 24 октября 2018

У меня есть диалоговое окно типа 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.

И это - это то, что он рисует, когда внизу рисуется сверху.

...