2 xuruihu XURUIHU 于 2014.12.01 22:15 提问

VS2012空文档创建失败是怎么回事?

我只是添加了一个CDialogBar类的对象m_myDlg,在CMainFrame中的OnCreate()函数添加了一下代码

       if(!m_myDlg.Create(this,IDD_FLOAT_DLG,CBRS_TOP|CBRS_HIDE_INPLACE,IDD_FLOAT_DLG))
{
    TRACE0("failed to create dialog bar m_myDlg");
    return -1;
}
m_myDlg.EnableDocking(CBRS_ALIGN_TOP);
EnableDocking(CBRS_ALIGN_TOP);
DockControlBar(&m_myDlg);

编译时却出现这种错误:Debug assertion failed,这是怎么回事

2个回答

eagleyan
eagleyan   Rxr 2014.12.02 08:54
已采纳

你现在正编译debug版,而不是release版,就出这个错.
检查一下你的资源IDD_FLOAT_DLG创建了没有

eagleyan
eagleyan 在debug版本不允许直接DockControlBar(&m_myDlg);而必须DockControlBar(&m_myDlg,AFX_IDW_DOCKBAR_TOP,NULL);从注释我也没有看出来 为什么,你能试试这么改改看行不行
大约 3 年之前 回复
eagleyan
eagleyan 在debug版本不允许直接DockControlBar(&m_myDlg);而必须DockControlBar(&m_myDlg,AFX_IDW_DOCKBAR_TOP,NULL);从注释我也没有看出来 为什么,你能试试这么改改看行不行
大约 3 年之前 回复
eagleyan
eagleyan 回复XURUIHU: 查了一下源码void CFrameWnd:ockControlBar(CControlBar* pBar, UINT nDockBarID, LPCRECT lpRect) { CDockBar* pDockBar = (nDockBarID == 0) ? NULL : (CDockBar*)GetControlBar(nDockBarID); DockControlBar(pBar, pDockBar, lpRect); } void CFrameWnd:ockControlBar(CControlBar* pBar, CDockBar* pDockBar, LPCRECT lpRect) { ASSERT(pBar != NULL); // make sure CControlBar::EnableDocking has been called ASSERT(pBar->m_pDockContext != NULL);
大约 3 年之前 回复
eagleyan
eagleyan 回复XURUIHU: 你的frame是CMDIChildWndEx还是CMDIChildWnd
大约 3 年之前 回复
XURUIHU
XURUIHU IDD_FLOAT_DLG也已经创建了,DEBUG查了一下,应该问题是出在DockControlBar(&m_myDlg)这一句
大约 3 年之前 回复
caozhy
caozhy   Ds   Rxr 2014.12.01 23:04

m_myDlg有没有正确初始化?

XURUIHU
XURUIHU IDD_FLOAT_DLG也已经创建了,DEBUG查了一下,应该问题是出在DockControlBar(&m_myDlg)这一句
大约 3 年之前 回复
XURUIHU
XURUIHU 事先已经定义好了,对话框资源也已经添加了,需要初始化吗?我看工具栏、状态栏等对象都没有初始化啊?怎么初始化?
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!