Ошибка подтверждения mfc при попытке создать лист свойств

Я получаю «Отладочное утверждение не удалось» каждый раз, когда я пытаюсь создать лист свойств, это мой первый лист, и я копирую его из «MFC-программирования с нуля».

Вот класс листа свойств:

class CSamplePropSheet : public CPropertySheet
{
CPropDialog1 page1; //first page
CPropDialog2 page2; //second page
CPropDialog3 page3; //third page

public:
CSamplePropSheet() : CPropertySheet(){
Construct("Sample Property Sheet", this);

page1.Construct("PropDialog1", 0);
page2.Construct("PropDialog2", 0);
page3.Construct("PropDialog3", 0);
AddPage(&page1);
AddPage(&page2);
AddPage(&page3);
}
};

У меня есть переменная листа свойств, объявленная в моем главном окне здесь:

class CMainWin : public CFrameWnd
{
CSamplePropSheet m_PropSheet;

public:
CMainWin();

afx_msg void OnActivate();
afx_msg void OnExit();
afx_msg void OnHelp();

DECLARE_MESSAGE_MAP()
};

Тогда я звоню сюда:

afx_msg void CMainWin::OnActivate()
{

m_PropSheet.DoModal(); //activate modal property sheet

}

Когда ошибка появляется, она указывает на этот раздел кода:

int AFXAPI AfxMessageBox(UINT nIDPrompt, UINT nType, UINT nIDHelp)
{
CString string;
if (!string.LoadString(nIDPrompt))
{
TRACE(traceAppMsg, 0, "Error: failed to load message box prompt string 0x%04x.\n",
nIDPrompt);
ASSERT(FALSE);
}
if (nIDHelp == (UINT)-1)
nIDHelp = nIDPrompt;
return AfxMessageBox(string, nType, nIDHelp);
}

Что-то пропустил? Остальные параметры меню программы работают, за исключением кнопки «Активировать», чтобы вызвать окно свойств.

0

Решение

Похоже, вы используете Construct метод для страниц свойств page1, page2 а также page3 неправильно. Вы, вероятно, предполагали, что в этом утверждении Construct("PropDialog1", 0); «PropDialog1» — это заголовок страницы. Тем не менее, это имя шаблона ресурса. Пожалуйста, прочитайте Вот о том, как использовать шаблоны ресурсов.

Я рекомендую использовать другую перегрузку метода Construct:

void Construct(
UINT nIDTemplate,
UINT nIDCaption = 0
);

С помощью этой перегрузки вы можете указать идентификатор ресурса диалога, связанный со страницей свойств, в качестве первого параметра и идентификатор ресурса строки заголовка страницы в качестве второго параметра. Например.:

page1.Construct(IDD_PROP_PAGE1, IDS_PAGE1_CAPTION);
1

Другие решения

Других решений пока нет …