2013-10-08 3 views
0

속성 시트를 만들려고 할 때마다 "디버그 어설 션이 실패했습니다"라는 메시지가 나타납니다.이 첫 번째 것은 "MFC 프로그래밍을 처음부터" .mfc 속성 시트를 만들려고 할 때 어설 션 오류가 발생했습니다.

afx_msg void CMainWin::OnActivate() 
{ 

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

} 
:

class CMainWin : public CFrameWnd 
{ 
    CSamplePropSheet m_PropSheet; 

public: 
    CMainWin(); 

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

    DECLARE_MESSAGE_MAP() 
}; 

그럼 내가 여기에 전화를 걸 :

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); 
    } 
}; 

내가 속성 시트 변수가 여기 내 메인 창에 선언 : 여기

는 속성 시트 클래스입니다

오류가 나타나면이 코드 섹션을 가리 킵니다.

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); 
} 

놓친 것이 있습니까? 나머지 프로그램 메뉴 옵션은 활성화 버튼을 제외하고는 작동합니다.

답변

1

page1, page2page3 속성 페이지에 대해 Construct 메서드를 잘못 사용하고있는 것 같습니다. 아마도이 문장에서 Construct("PropDialog1", 0); "PropDialog1"이 페이지의 캡션이라고 가정했을 것입니다. 그러나 리소스 템플릿의 이름입니다. 리소스 템플릿 사용 방법은 here을 참조하십시오.

나는 다른 구조 메서드 오버로드를 사용하는 것이 좋습니다 : 당신이 첫 번째 매개 변수와의 문자열 리소스 ID로 속성 페이지와 관련된 대화 상자 리소스의 ID를 지정할 수

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

이 과부하를 페이지의 캡션을 두 번째 매개 변수로 사용합니다. 예 :

page1.Construct(IDD_PROP_PAGE1, IDS_PAGE1_CAPTION); 
+0

나는 "PropDialog1"을 "PropD1"지금 프로그램 작품에서, 왜,하지만 어떤 이유로, 리소스 템플릿의 이름이 작동 중 내가 이름을 단축 할 때까지하지 않을 모르겠어요 . 도와 주셔서 감사합니다! – Stablecannon