mfc CDockablePane :: DrawCaption异常

时间:2019-03-15 12:02:10

标签: c++ mfc

我将基于mfc对话框的应用程序修改为框架应用程序。我创建了FrameClass和ClientPanel类。 Debug build没关系,但是在Release / MT Mode下有一个InvalidArgException异常。 这是核心源代码:

//this is how to init frame windows in InitInstance
CMainFrame * pFrame = new CMainFrame();
m_pMainWnd = pFrame;
pFrame->LoadFrame(IDR_MAINFRAME, WS_OVERLAPPEDWINDOW, NULL, NULL);
pFrame->ShowWindow(SW_SHOW);
pFrame->UpdateWindow();

//this is my FrameWnd Class Declare
class CMainFrame :public CFrameWndEx

//CMainFrame have member m_client_panel
CClientPanel m_client_panel;  //CClientPanel  devied from CDockablePane


//the code create a left side panel
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CFrameWndEx::OnCreate(lpCreateStruct) == -1)
        return -1;


    CDockingManager::SetDockingMode(DT_SMART);
    // TODO:  在此添加您专用的创建代码

    if (!m_client_panel.Create(L"客户端列表", this, CRect(0, 0, 250, 800), TRUE, ID_CLIENT_PANEL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI))
    {
        AfxMessageBox(L"未能创建客户端列表");
        return -1;
    }

“ ENSURE(pOldFont!= NULL);”引发的异常在下面的CDockablePane :: DrawCaption函数中。

void CDockablePane::DrawCaption(CDC* pDC, CRect rectCaption)
{
    ....
    CFont* pOldFont = pDC->SelectObject(&(GetGlobalData()->fontRegular));
    ENSURE(pOldFont != NULL);  //this line got a  exception

调用堆栈:

 HospConsole.exe!AfxThrowInvalidArgException() 行 228    C++
 HospConsole.exe!CDockablePane::DrawCaption(CDC * pDC, CRect rectCaption) 行 2361    C++
 HospConsole.exe!CDockablePane::OnNcPaint() 行 513    C++
 HospConsole.exe!CWnd::OnWndMsg(unsigned int message, unsigned int wParam, long lParam, long * pResult) 行 2465    C++
 HospConsole.exe!CWnd::WindowProc(unsigned int message, unsigned int wParam, long lParam) 行 2099    C++
 HospConsole.exe!CBasePane::WindowProc(unsigned int message, unsigned int wParam, long lParam) 行 1018    C++
 HospConsole.exe!AfxCallWndProc(CWnd * pWnd, HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) 行 268    C++

如何解决此应用程序?谢谢。

0 个答案:

没有答案