浮動dockpane中cFormView對話框斷言報錯

核心內容:

用鼠標單擊視圖的時候,就會出現Assert錯誤,具體爲
CView類的onmouseActive函數中
ASSERT(pParentFrame == pDesktopWnd || pDesktopWnd->IsChild(pParentFrame))

解決方法:
繼承類中響應WM_MOUSEACTIVATE
int CMyView::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message)
{
  //return CView::OnMouseActivate(pDesktopWnd, nHitTest, message);
  return CWnd::OnMouseActivate(pDesktopWnd, nHitTest, message);
}


原因:

在對話框程序上pDesktopWnd是對話框指針,視圖類的父窗口也是對話框指針,那麼ASSERT(pParentFrame == pDesktopWnd || pDesktopWnd->IsChild(pParentFrame))這句就不會出錯,因爲CView::GetParentFrame()的往他的祖先窗口中上溯,直到找到一個是FrameWnd類型的窗口之後, 返回這個窗口對象的指針(如果沒有的話,返回NULL),在對話框程序中這麼要麼爲NULL,要麼爲對話框指針;但是假如是單文檔程序呢,情況就不一樣了,CView::GetParentFrame()必定是返回單文檔程序的框架指針,而pDesktopWnd指針則是對話框指針,二者不相等,那麼我們再看看pDesktopWnd->IsChild(pParentFrame)是否爲TRUE,很顯然框架窗口不可能是對話框窗口的父窗口。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章