问题描述
我已经实现了一个属性表和几个从 MainFrame.cpp 的主菜单调用的属性页,这些页面是从我的问题中产生的:
MFC MDI Designing user preferences dialog GUI layout functionality
我登陆的代码是:
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
,如其 .h
文件中所示:
class SettingsSheet : public CMFCpropertysheet
{
DECLARE_DYNAMIC(SettingsSheet)
public:
SettingsSheet(UINT nIDCaption,CWnd* pParentWnd = nullptr,UINT iSelectPage = 0);
SettingsSheet(LPCTSTR pszCaption,UINT iSelectPage = 0);
virtual ~SettingsSheet();
protected:
DECLARE_MESSAGE_MAP()
};
所以这里的问题是什么,你可以看到我必须注释掉 SetLook(CMFCpropertysheet::PropSheetLook_OneNoteTabs);
,因为我收到一个错误,说 SetLook
identifier not found C3861
。
如果我将鼠标悬停在 MainForm.h
内并右键单击 #include <afxpropertysheet.h>
,文件会在 IDE 中直接打开,如果我搜索 SetLook
,它肯定可以在 {{ 1}} 部分的函数。
所以我看到了多个使用该 public
的代码示例,我看过的其中一个教程使用了它,并且在我使用 VS2017 时运行良好。
我知道什么是“未找到”,但我不知道为什么这里有问题。这是我现在遇到的唯一错误,我想使用该功能。
对这里可能发生的事情的想法?
更新:
按照 Dxiv 的建议,我将代码更改为:
SetLook
现在编译运行了,结果有些奇怪,只显示了一个属性页,其他的都是AWOL。
解决方法
我已经弄清楚问题是什么;当我创建对话框时,我使用了以下基类:
CPropertyPage
代替:
CMFCPropertyPage
我已将工作表设置为:
CMFCPropertySheet
并假设它在正确编译和显示选项卡视图后继续执行,但在其他 SetLook
属性选项上失败。
一旦我将所有对话框调整为 CMFCPropertyPage
,SetLook
立即开始工作。所以我考虑这个问题CLOSED
。