[存檔]淺談:切換視時基於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屬性就會自動配好了