duilib 动态添加 提前写好xml

xml文件:ftp_file_list_item.xml



	
		 
			
		
		

C++代码:


bool CFileDirList::AddItem(FtpDirFileInfo info)
{
	CHorizontalLayoutUI* pCon = NULL;

	string_t str = L"xml/ftp_file_list_item.xml";
        //CDialogBuilder m_dlgBuilder;
	if( !m_dlgBuilder.GetMarkup()->IsValid() )
	{
		pCon = static_cast(m_dlgBuilder.Create(str.c_str(), (UINT)0, this, GetManager()));
	}
	else 
	{
		pCon = static_cast(m_dlgBuilder.Create( this, GetManager()));
	}

	if( pCon == NULL)
		return false;

	//CListTextElementExUI *pElement = static_cast(GetManager()->FindSubControlByName( pCon, _T("btnFileChoose") ));
	CListContainerItemExUI* pElement = static_cast(GetManager()->FindSubControlByName( pCon, _T("btnFileChoose") ));
	if (pElement == NULL)
	{
		return false;
	}

	bool ret = false;

	CLabelUI* pIcon = static_cast(GetManager()->FindSubControlByName(pCon, _T("fileicon")));
	CLabelUI* pName = static_cast(GetManager()->FindSubControlByName(pCon, _T("editfilename")));
	CLabelUI* pType = static_cast(GetManager()->FindSubControlByName(pCon, _T("filetype")));
	CLabelUI* pTime = static_cast(GetManager()->FindSubControlByName(pCon, _T("filedate")));
	CLabelUI* pSize = static_cast(GetManager()->FindSubControlByName(pCon, _T("filesize")));
	CRichEditExUI *pEdit = static_cast(GetManager()->FindSubControlByName(pCon, _T("newnameedit")));

	if (pIcon == NULL || pName == NULL || pType == NULL || pTime == NULL || pSize == NULL || pEdit == NULL)
	{
		TRY_DELETE(pCon);
		TRY_DELETE(pElement);
		return false;
	}

	pElement->Add(pIcon);
	pElement->Add(pName);
	pElement->Add(pEdit);
	pElement->Add(pType);
	pElement->Add(pTime);
	pElement->Add(pSize);

//需要增加增加一层,  如果直接Add pCon Remove 时会将remove 释放, 由于pCon只有一个实例, delete  第一个item时就会被释放,而且会有0xC0000005 异常
	ret = m_pList->Add(pElement);
}

这种方式在 ContainerUI::RemoveAll() 或者 Remove() 正常; 但是如果这样写:



	
		 
			
			
	

当List 执行RemoveAll(); 或者Remove()时,容器下的ListContainerItemEx相当于ListContainerElement在 Remove时 m_items[], ListContainerItemEx的items 为12 这样释放权限问题

duilib 动态添加 提前写好xml_第1张图片

 

 因为本身改容器就存在6个Control, 程序代码又添加了6个Control; 释放就出现了问题;

第一种情况下正常,调试信息如下:

duilib 动态添加 提前写好xml_第2张图片

这样释放就正常;

重复遇到两次,第二次遇到此问题,留笔记录!

 

你可能感兴趣的:(Duilib,学习笔记,Duilib,动态添加,释放)