程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> mfc-MFC斷言ASSERT(::IsWindow(m_hWnd))

mfc-MFC斷言ASSERT(::IsWindow(m_hWnd))

編輯:編程綜合問答
MFC斷言ASSERT(::IsWindow(m_hWnd))

一個HomeWork的單文檔MFC工作空間,新建了一個繼承CWnd的CNew類,
在CNew中
重寫void CNew::OnPaint()
{

CPaintDC dc(this);
dc.MoveTo(0,0);
dc.LineTo(300,300);

}
定義 void CNew::Clear()
{ InvalidateRect(NULL,TRUE); }
然後新增一個菜單項Clear,添加菜單命令相應函數
void CHomeWorkView::OnCLear()
{
new.Clear();//new 已經定義成CHomeWork的成員變量
}
出現這種錯誤:
_AFXWIN_INLINE void CWnd::InvalidateRect(LPCRECT lpRect, BOOL bErase)
{ ASSERT(::IsWindow(m_hWnd)); ::InvalidateRect(m_hWnd, lpRect, bErase); }
求大神幫幫忙,我在百度上搜了很久了,沒找到解決方案,有一個方案是這樣的

---------------->>>我遇到的情況是,A類的Clear函數中調用了this->Invalidate();,而B類調用了A類的Clear函數,此時A類還未實例化,所以A類句柄為空,m_hWnd = NULL。我的解決方法是將A類的實例化放在B類前,問題解決。,<<<--------------

沒辦法,還是沒解決掉,故而來求大神解決了,我才剛剛學MFC

最佳回答:


如果你是想在視圖上繪制,是不必新加一個CNew窗口的,可以直接在 CHomeWorkView::OnDraw()中進行繪制。
如果你一定要增加一個CNew窗口,那麼只是在CHomeWork中定義new變量是不行的,new對應的窗口並沒有創建出來,
還要在CHomeWork::OnCreate中調用new.Create來創建出窗口。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved