之前為了學習MFC下浏覽器的用法,參考博文:http://www.cnblogs.com/firefly_liu/archive/2009/05/18/1459514.html,雖然按照作者的方法實現了浏覽器的功能,但是作者在ON_SIZE消息中調整浏覽器控件大小的方法出現斷言錯誤,主要錯誤如下:
在進入到下面函數段時,SetWindowPos()出現錯誤。
void CNetHttpDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: 在此處添加消息處理程序代碼
m_browser.SetWindowPos(NULL, 0, 0, cx, cy, SWP_NOMOVE);
}
錯誤在此處,ASSERT(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL))。
BOOL CWnd::SetWindowPos(const CWnd* pWndInsertAfter, int x, int y, int cx,
int cy, UINT nFlags)
{
ASSERT(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL));
if (m_pCtrlSite == NULL)
return ::SetWindowPos(m_hWnd, pWndInsertAfter->GetSafeHwnd(),
x, y, cx, cy, nFlags);
else
return m_pCtrlSite->SetWindowPos(pWndInsertAfter, x, y, cx, cy, nFlags);
}
經過調試發現m_pCtrlSite的值是空,而此時對話框的OnInitDialog()還沒有執行,故猜測整個浏覽器控件的綁定變量m_browser還沒有初始化,經過調整:
void CNetHttpDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: 在此處添加消息處理程序代碼
if (GetDlgItem(IDC_EXPLORER1) != NULL)
{
m_browser.SetWindowPos(NULL, 0, 0, cx, cy, SWP_NOMOVE);
}
}
添加獲取控件是否已經初始化的判斷,這樣就解決了斷言的錯誤問題。
另外,添加過其他控件測試,發現都有同樣的問題,所以記錄一下。
後繼解決方案正在發現中。。。