Я получаю «Отладочное утверждение не удалось» каждый раз, когда я пытаюсь создать лист свойств, это мой первый лист, и я копирую его из «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);
}
Что-то пропустил? Остальные параметры меню программы работают, за исключением кнопки «Активировать», чтобы вызвать окно свойств.
Похоже, вы используете Construct
метод для страниц свойств page1
, page2
а также page3
неправильно. Вы, вероятно, предполагали, что в этом утверждении Construct("PropDialog1", 0);
«PropDialog1» — это заголовок страницы. Тем не менее, это имя шаблона ресурса. Пожалуйста, прочитайте Вот о том, как использовать шаблоны ресурсов.
Я рекомендую использовать другую перегрузку метода Construct:
void Construct(
UINT nIDTemplate,
UINT nIDCaption = 0
);
С помощью этой перегрузки вы можете указать идентификатор ресурса диалога, связанный со страницей свойств, в качестве первого параметра и идентификатор ресурса строки заголовка страницы в качестве второго параметра. Например.:
page1.Construct(IDD_PROP_PAGE1, IDS_PAGE1_CAPTION);
Других решений пока нет …