Как правильно изменить вкладки на CPropertySheet

У меня есть CPropertySheet с тремя вкладками. У меня есть разные классы CPropertyPage для каждой вкладки. Когда мой CPropertySheet загружается с отладчиком, первая страница всегда отображается правильно. Однако, когда я нажимаю на любую из других вкладок, область CPropertyPage становится пустой. Даже если я вернусь на первую вкладку, область все еще пуста. Я использую Visual Studio, MFC, C++.

Я пытаюсь найти правильный способ обрабатывать различные нажатия вкладок и правильно отображать мои вкладки. Это код для инициализации моего листа свойств и его страниц:

BOOL CSLIMOptCplusplusApp::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( "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;

Это код для моего класса CPropertySheet:

BOOL CImageSheet::OnInitDialog()
{
CWnd* pOKButton = GetDlgItem( IDOK );
ASSERT( pOKButton );
pOKButton->ShowWindow( SW_HIDE );

CWnd* pCANCELButton = GetDlgItem( IDCANCEL );
ASSERT( pCANCELButton );
pCANCELButton->ShowWindow( SW_HIDE );

// Set Flags for property sheet
m_bModeless    =  TRUE;
m_nFlags      |=  WF_CONTINUEMODAL;


BOOL bResult   = CPropertySheet::OnInitDialog();
m_bModeless    =  FALSE;
m_nFlags      &=  ~WF_CONTINUEMODAL;

//Get button sizes and positions
CRect rect, tabrect;
GetDlgItem( IDOK )->GetWindowRect( rect );
GetTabControl()->GetWindowRect( tabrect );

ScreenToClient( rect );
ScreenToClient( tabrect );  

UpdateData( FALSE );

Спасибо за любую помощь!

РЕДАКТИРОВАТЬ:

Это код простой страницы, которую я хочу показать.

// ImageDisplay.cpp : implementation file
//

#include "stdafx.h"
#include "SLIMOptCplusplus.h"
#include "ImageDisplay.h"
#include "afxdialogex.h"
#include "ListOption.h"

// CImageDisplay dialog

char g_emailProfile[255];

IMPLEMENT_DYNAMIC(CImageDisplay, CPropertyPage)

CImageDisplay::CImageDisplay()
: CPropertyPage(CImageDisplay::IDD)
, m_EmailProfile(_T(g_emailProfile))
{

}

CImageDisplay::~CImageDisplay()
{
}

void CImageDisplay::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
DDX_Text(pDX, TXTC_EMAIL_PROFILE, m_EmailProfile);
}


BEGIN_MESSAGE_MAP(CImageDisplay, CPropertyPage)
END_MESSAGE_MAP()


// CImageDisplay message handlers

1 ответ

Решение

Моя проблема была в том, что я установил для m_bModeless значение false,

BOOL bResult   = CPropertySheet::OnInitDialog();
m_bModeless    =  FALSE;  //Change to TRUE to fix the problem.
m_nFlags      &=  ~WF_CONTINUEMODAL;
Другие вопросы по тегам