为什么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,前提是必须使用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中的代码
我怎么看到的是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);
}