1. 程式人生 > >[存檔]淺談:切換視時基於FormView的對話方塊屬性設定與ASSERT報錯的問題

[存檔]淺談:切換視時基於FormView的對話方塊屬性設定與ASSERT報錯的問題

這是在做EVC的作業時碰到的問題,查到的文章,存個檔~~~

最近做的專案中用到了FormView切換檢視,其主要原理是:先新建一些Dialog對話方塊,然後給這些對話方塊繫結對應的View,注意:這些View要基於FormView。
      一開始還好好的,利用切換視的程式碼進行的很順利(網上的相關程式碼很多,我就不贅述了),但是,後來新加了兩個Dialog,不知我怎麼弄的,奇怪的事發生了:先前添加了Dialog都能正常的切換,但是,一切換新新增的Dialog,每次執行到:

BOOL CFormView::Create(LPCTSTR /*lpszClassName*/, LPCTSTR /*lpszWindowName*/,
 DWORD dwRequestedStyle, const RECT& rect, CWnd* pParentWnd, UINT nID,
 CCreateContext* pContext)
{
 ASSERT(pParentWnd != NULL);
 ASSERT(m_lpszTemplateName != NULL);

 m_pCreateContext = pContext;    // save state for later OnCreate

#ifdef _DEBUG
 // dialog template must exist and be invisible with WS_CHILD set  <——請注意此處
 if (!_AfxCheckDialogTemplate(m_lpszTemplateName, TRUE))
 {
  ASSERT(FALSE);          // invalid dialog template name    
  PostNcDestroy();        // cleanup if Create fails too soon     
  return FALSE;
 }
#endif //_DEBUG



中的ASSERT時就報錯,而在Release版本下卻不會報錯。我檢查了一下這兩個新加的Dialog與先前的Dialog屬性有哪些不同,原來是自己把後來加的Dialog的Visible屬性設定成了TRUE了, 根據程式碼的要求是:對話方塊模板必須存在,屬性要設定成不可見和子視窗風格。SystemMenu和TitleBar屬性最好都設為False,改完以後,一切正常~~
注:還有一種方法就是在新增Dialog資源時,在Dialog列表上點右鍵->新增資源,選擇Dialog->IDD_FORMVIEW,再點“新建”按鈕,這樣新建出來的Dialog屬性就會自動配好了