首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

为什么CTreeCtrl类用CreateEx创建WS_POPUP风格树控件debug下出现断言异常,怎么解决

2013-05-02 
为什么CTreeCtrl类用CreateEx创建WS_POPUP风格树控件debug下出现断言错误,如何解决如题,在一个对话框中动

为什么CTreeCtrl类用CreateEx创建WS_POPUP风格树控件debug下出现断言错误,如何解决
如题,在一个对话框中动态创建一个树控件 如:
CRect rect(0, 0, 100, 100);
DWORD dwStyle =  WS_POPUP | WS_BORDER | TVS_DISABLEDRAGDROP | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS | TVS_FULLROWSELECT | TVS_CHECKBOXES;
    m_Tree.CreateEx(0, WC_TREEVIEW, NULL, dwStyle, rect, GetParent(), 0, NULL);
m_Tree.Init(this);
但是debug下出现断言错误。
[解决办法]

引用:
不能使用WS_POPUP,这个风格给模态对话框用的

基本控件可以使用WS_POPUP,前提是必须使用CreateEx来创建(这个可以在afxwin.h找到原话)
[解决办法]
引用:
实践出真知,去掉就不崩溃了,我碰到过。

实践出真知。将WS_POPUP改成WS_CHILD肯定没问题。
但是Create中加WS_POPUP就会有问题
// can't use for desktop or pop-up windows (use CreateEx instead)
ASSERT(pParentWnd != NULL);
ASSERT((dwStyle & WS_POPUP) == 0);
这是Create中的代码

引用:
引用:引用:不能使用WS_POPUP,这个风格给模态对话框用的
基本控件可以使用WS_POPUP,前提是必须使用CreateEx来创建(这个可以在afxwin.h找到原话)嗯 我查MSDN也是这么说的,Release版本能编译通过,而且我查看底层代码,发现CreateEx之后调用的是CW……

我怎么看到的是Create最后调用的CreateEx呢?

BOOL CWnd::Create(LPCTSTR lpszClassName,
LPCTSTR lpszWindowName, DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd, UINT nID,
CCreateContext* pContext)
{
// can't use for desktop or pop-up windows (use CreateEx instead)
ASSERT(pParentWnd != NULL);
ASSERT((dwStyle & WS_POPUP) == 0);

return CreateEx(0, lpszClassName, lpszWindowName,
dwStyle 
[解决办法]
 WS_CHILD,
rect.left, rect.top,
rect.right - rect.left, rect.bottom - rect.top,
pParentWnd->GetSafeHwnd(), (HMENU)(UINT_PTR)nID, (LPVOID)pContext);
}

热点排行