gpt4 book ai didi

c++ - VS2017 MFC 断言 : f:\dd\vctools\vc7libs\ship\atlmfc\include\afxwin2. inl 行:84

转载 作者:行者123 更新时间:2023-11-30 05:07:24 25 4
gpt4 key购买 nike

接下来是我的代码(debug模式运行报错,release没问题):

"CControlPanel" class derived from CFormView

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
m_wndSplitterFrame.CreateStatic(this, 2, 1);
m_wndSplitterFrame.CreateView(0, 0, RUNTIME_CLASS(CControlPanel), CSize(0, 180), pContext); //assert error line
m_wndSplitterSchema.CreateStatic(&m_wndSplitterFrame, 1, 2, WS_CHILD | WS_VISIBLE, m_wndSplitterFrame.IdFromRowCol(1, 0));
m_wndSplitterSchema.CreateView(0, 0, RUNTIME_CLASS(CTabView), CSize(250, 200), pContext);
m_wndSplitterData.CreateStatic(&m_wndSplitterSchema, 1, 2, WS_CHILD | WS_VISIBLE, m_wndSplitterSchema.IdFromRowCol(0, 1));
m_wndSplitterData.CreateView(0, 0, RUNTIME_CLASS(CItemsListView), CSize(700, 0), pContext);
m_wndSplitterData.CreateView(0, 1, RUNTIME_CLASS(CDetailHtmlView), CSize(0, 0), pContext);
....
}

但我评论说“OnSize”不是断言错误!

void CControlPanel::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);
#ifndef _DEBUG
RECT rect1;
m_CountList.GetWindowRect(&rect1);
ScreenToClient(&rect1);
....
m_CountList.MoveWindow(&rect1);
....
#endif
}

搜索表示加入如下代码即可解决。

AfxWinInit(::GetModuleHandle(NULL),NULL,::GetCommandLine(),0);

但是又报错: f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\appinit.cpp

我认为这种做法是错误的,请问如何解决这个问题?

最佳答案

看起来 OnSize 是在 m_CountList 的窗口创建或尚未附加到 Windows 窗口之前调用的——没有 HWND 句柄。您从框架中获得 ASSERT,您将尝试在没有句柄的情况下调用 API。在发布版本中,断言被删除,这就是为什么您不会收到这些错误

MFC CWnd 派生类有一个相应的 Windows 窗口对象和 HWND,它们在其上调用操作。

在调用需要窗口句柄的 Windows API 函数的方法之前,您可以通过检查它们的句柄来测试您的控件/窗口对象是否附加了窗口对象。

void CControlPanel::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);

if (m_CountList.GetSafeHwnd())
{
RECT rect1;
m_CountList.GetWindowRect(&rect1);
ScreenToClient(&rect1);
....
m_CountList.MoveWindow(&rect1);
}
....
}

另见 ASSERT(::IsWindow(m_hWnd)) fails in Afxwin2.inl

关于c++ - VS2017 MFC 断言 : f:\dd\vctools\vc7libs\ship\atlmfc\include\afxwin2. inl 行:84,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47458803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com