Устранение пробела под страницами в диалоге CPropertySheet / Tabbed

У меня есть CPropertySheet, который я использую, чтобы показать три CPropertyPages. Я удалил стандартные кнопки "Применить" и "Справка". Моя проблема заключается в том, что теперь, когда они удалены, у меня есть большой пробел, где они когда-то были расположены. Есть ли способ устранить этот пробел? Спасибо!

Вот картина разрыва, о котором я говорю:разрыв

До того, как кнопки были удалены, они располагались с правой стороны зазора. Обратите внимание, что страница "Изменить параметры" была создана в конструкторе Visual Studio, и она заканчивается прямо под кнопкой "Печать". Основные параметры администратора CPropertySheet были созданы полностью из кода. Вот код для инициализации таблицы CPropertySheet и страниц (и удаления кнопок "Справка" и "Применить"):

BEGIN_MESSAGE_MAP(CSLIMOptCplusplusApp, CWinApp)
//ON_COMMAND(ID_HELP, &CWinApp::OnHelp) Commented out to remove the "Help" button
END_MESSAGE_MAP()

BOOL OptCplusplusApp::InitInstance()
{
CWinApp::InitInstance();
SQLHENV m_1;
EnvGetHandle(m_1);

Login lgn;   //Creates a Login dialog for the user to enter credentials.
lgn.DoModal();

CImageSheet*      imagedlg = new CImageSheet( "SLIM Admin Options" );
CImageDisplay*    pageImageDisplay    = new CImageDisplay;
CImageDimensions* pageImageDimensions = new CImageDimensions;
ListOption*       pageListOption      = new ListOption;

ASSERT( imagedlg );
ASSERT( pageImageDisplay );
ASSERT( pageImageDimensions );  
ASSERT( pageListOption );

imagedlg->AddPage( pageListOption);
imagedlg->AddPage( pageImageDisplay );
imagedlg->AddPage( pageImageDimensions );

imagedlg->m_psh.dwFlags |= PSH_NOAPPLYNOW;  //Removes the default Apply button
imagedlg->Create();
imagedlg->ShowWindow( SW_SHOW );
m_pMainWnd = imagedlg;

Я буду редактировать, если какие-либо дополнительные детали необходимы. Благодарю.

1 ответ

Решение

Чтобы добиться такого вида взгляда с помощью листа свойств....

Вам нужно обработать OnitDialog внутри листа и изменить его размер. Например, используя комбинацию CPropertySheet::GetPage и CWnd::MoveWindow, вы добьетесь желаемого.

BOOL MyPropSheet::OnInitDialog()
    {
    BOOL bResult = CPropertySheet::OnInitDialog();

    // TODO:  Add your specialized code here
    CPropertyPage* pg1 = GetPage(0);
    CRect rect(0, 0, 0, 0);

    pg1->GetWindowRect(&rect);

    CRect thisRect(0, 0, 0, 0);
    GetWindowRect(&thisRect);

    thisRect.bottom = rect.bottom + 16;
    MoveWindow(&thisRect);
return bResult;
}
Другие вопросы по тегам