核心內容:
用鼠標單擊視圖的時候,就會出現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,很顯然框架窗口不可能是對話框窗口的父窗口。