2011-10-13 115 views
1

我在我的代碼中有一個錯誤,它正在踢我的屁股,所以經過多次嘗試調試後,我終於決定是否有人知道我的問題是什麼。ASSERT(:: IsWindow(m_hWnd))問題,不知道有什麼問題

我想添加一個網格對象到我有的對話框中,但我一直打標題中提到的assert,我不知道爲什麼。

LONG myDialog::OnInitDialog(UINT wParam, LONG lParam) 
{ 
    BOOL bRet = super::OnInitDialog(); 

    InitGridControl(); 
    InitLayout(); 

    myApp.ActiveDocChangeEvent->Attach(
    RefMemberDelegate1(*this, &myDialog::OnNewDoc), this); // attach to event so I know when document is created 

    return bRet; 
} 

void myDialog::OnNewDoc(CDerivedDocument* pNewDoc) 
{ 
    pNewDoc->SetMyDialog(this); // when new document is created, set pointer to dialog 
} 

void myDialog::InitGridControl() 
{ 
    CRect rect; 
    // Get the grid area rectangle and set it up. 
    GetDlgItem(IDC_GRID)->GetClientRect(rect); 
    GetDlgItem(IDC_GRID)->MapWindowPoints(this, &rect); // replacing dummy image with the grid 

    m_Grid = new myGridCtrl; 
    bool result = m_Grid->Create(WS_CHILD | WS_BORDER | WS_VISIBLE | WS_TABSTOP, rect, this, IDC_GRID); 


    // Set the appropriate options 
    //...options... 

    m_Grid->InsertColumn(0, _T("Name"), 100); // doesn't seem to crash here, which means grid is created okay? 
} 


void myDialog::PopulateGridControl(BOOL bRedraw, CDerivedDocument * pDoc) 
{ 
    if (GetSafeHwnd() == NULL) 
     return; 

    // get handles to document and stuff 

    m_Grid->SetRedraw(FALSE); // ** ASSERT() CALL IS HERE ** 
    m_Grid->RemoveAll(); 

    // other stuff.. 
} 


///////////////////// 


// In CDocument, once it is created... 

CDerivedDocument::SetMyDoc(myDialog * pDlg) 
{ 
    pDlg->PopulateGridControl(true,this); 
} 

任何想法是怎麼回事?我的意思是,只有一切都已經初始化,我才創建對話框,所以在那裏不應該有問題。 m_Grid.Create()返回true,因此創建成功。爲什麼SetRedraw()碰到assertm_hWnd不是窗口句柄? m_hWnd在哪裏設置?

感謝您提供任何幫助。

乾杯

回答

1

你肯定當你調用
CDerivedDocument::SetMyDoc(myDialog * pDlg)創建對話框?

我看到的是,您正在從文檔加載網格(&對話框),您應該使用文檔從視圖加載對話框和網格。

這可能不是導致麻煩的直接原因,但仍然是一個改進。它可能只是把事情按正確的順序排列並解決這個問題。

+0

看起來是一個線程問題。我在非主線程中做了一些工作 – Jordan

+0

解決方法是實際將相同調用的MFC調用(如':: IsWindow(m_hWnd)')包含在一個'if'中,如下所示:http:// forums ?.codeguru.com/showthread.php 517249-MFC斷言(-IsWindow(m_hWnd)) - 問題 - 不肯定,什麼-S-錯 – Dr1Ku

相關問題