程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> MFC 控件初始化的過程,mfc控件初始化

MFC 控件初始化的過程,mfc控件初始化

編輯:C++入門知識

MFC 控件初始化的過程,mfc控件初始化


  之前為了學習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);
  }
}

添加獲取控件是否已經初始化的判斷,這樣就解決了斷言的錯誤問題。

另外,添加過其他控件測試,發現都有同樣的問題,所以記錄一下。

後繼解決方案正在發現中。。。

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