Проблема MFC MDI с SetLook даже при наличии файла заголовка
Я реализовал лист свойств и несколько страниц свойств, которые вызываются из главного меню из файла MainFrame.cpp, порожденного моей проблемой здесь:
Код, на который я приземлился, был:
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
.