Проблема MFC MDI с SetLook даже при наличии файла заголовка

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

MFC MDI Создание функциональных возможностей макета графического интерфейса диалогового окна настроек пользователя

Код, на который я приземлился, был:

      BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWndEx)
    Other messages...  
    ON_COMMAND(ID_SETTINGS_DIALOG, OnSettingsTools)
    Other messages... 
END_MESSAGE_MAP()

void CMainFrame::OnSettingsTools()
{

    SettingsSheet SettingsSheet(L"Application Settings");

    CSettingsPowerUser      m_PowerUser;
    CSettingsReset          m_Reset;
    CSettingsToolbars       m_Toolbars;
    CSettingsUserWarnings   m_UserWarnings;

    SettingsSheet.AddPage(&m_PowerUser);
    SettingsSheet.AddPage(&m_Reset);
    SettingsSheet.AddPage(&m_Toolbars);
    SettingsSheet.AddPage(&m_UserWarnings);

    //SetLook(CMFCPropertySheet::PropSheetLook_OneNoteTabs);

    SettingsSheet.DoModal();
}

Урожайность:

Я включил в MainFrame.h

      #include <afxpropertysheet.h>

На странице свойств используется CMFCPropertySheet в обоих .cpp & как показано здесь в его .h файл:

      class SettingsSheet : public CMFCPropertySheet
{
    DECLARE_DYNAMIC(SettingsSheet)

public:
    SettingsSheet(UINT nIDCaption, CWnd* pParentWnd = nullptr, UINT iSelectPage = 0);
    SettingsSheet(LPCTSTR pszCaption, CWnd* pParentWnd = nullptr, UINT iSelectPage = 0);
    virtual ~SettingsSheet();

protected:
    DECLARE_MESSAGE_MAP()
};

Итак, в чем проблема? Как видите, мне пришлось закомментировать SetLook(CMFCPropertySheet::PropSheetLook_OneNoteTabs); потому что я получаю сообщение об ошибке, в котором говорится, что идентификатор не найден C3861.

Если я зависну внутри MainForm.h и щелкните правой кнопкой мыши #include <afxpropertysheet.h> файл открывается прямо в среде IDE, и если я найду его, то наверняка найду его в public раздел функции.

Итак, я видел несколько примеров кода, в которых SetLook и в одном из руководств, которые я просмотрел, он использовался, и он отлично работает, поскольку я использую VS2017.

Я понимаю, что такое «не найдено», но не понимаю, почему здесь проблема. Это единственная ошибка, с которой я сейчас сталкиваюсь, и я хотел бы использовать эту функцию.

Мысли о том, что здесь может происходить?

Обновлять:

Следуя совету Dxiv, я изменил код на:

SettingsSheet.SetLook(CMFCPropertySheet::PropSheetLook_OneNoteTabs);

Теперь он компилируется и запускается, но дает некоторые странные результаты: отображается только одна страница свойств, а все остальные - в самовольном режиме.

1 ответ

Я понял, в чем проблема; когда я создавал диалоги, я использовал базовый класс:

      CPropertyPage

вместо:

      CMFCPropertyPage

Я установил лист на:

      CMFCPropertySheet

и предположил, что он перенесен, поскольку он правильно скомпилировал и отобразил представление вкладок, но не удалось выполнить другие параметры свойств.

Как только я настроил все диалоги на CMFCPropertyPage, то SetLookначал работать сразу. Так что я рассматриваю этот вопрос CLOSED.

Другие вопросы по тегам