// 加载XML文件 BOOL CDuiMenu::LoadXmlFile(CString strFileName, CWnd *pParent, CPoint point, UINT uMessageID, CString strSubItemName) { m_pParent = pParent; m_point = point; m_uMessageID = uMessageID; DuiXmlDocument xmlDoc; DuiXmlNode pDivElem; BOOL bRet = FALSE; if(DuiSystem::Instance()->LoadXmlFile(xmlDoc, strFileName)) { m_strXmlFile = strFileName; pDivElem = xmlDoc.child(GetClassName()); if(pDivElem) { if(!strSubItemName.IsEmpty()) { // 加载一下XML的root节点的内容(不加载子控件) Load(pDivElem, FALSE); // 指定了子菜单名,则按照子菜单名进行查找并加载 bRet = LoadSubMenu(pDivElem, strSubItemName); }else { // 加载menu节点属性 bRet = Load(pDivElem); } } } return bRet; }
// 加载XML文件中定义的菜单 BOOL CDuiMenu::LoadXmlFile(CString strFileName, CString strSubItemName) { DuiXmlDocument xmlDoc; DuiXmlNode pDivElem; if(DuiSystem::Instance()->LoadXmlFile(xmlDoc, strFileName)) { pDivElem = xmlDoc.child(GetClassName()); if(pDivElem != NULL) { if(!strSubItemName.IsEmpty()) { // 加载一下XML的root节点的内容(不加载子控件) Load(pDivElem, FALSE); // 指定了子菜单名,则按照子菜单名进行查找并加载 LoadSubMenu(pDivElem, strSubItemName); }else { // 加载menu节点(可以设置节点菜单项的XML文件属性) LoadXmlNode(pDivElem, strFileName); } } return TRUE; } return FALSE; }
// 加载指定名字的菜单节点 BOOL CDuiMenu::LoadSubMenu(TiXmlElement* pXmlElem, CString strSubItemName) { if(pXmlElem == NULL) { return FALSE; } // 递归遍历下层节点,看是否有指定名字的节点 TiXmlElement* pItemElem = NULL; for (pItemElem = pXmlElem->FirstChildElement(); pItemElem != NULL; pItemElem=pItemElem->NextSiblingElement()) { CStringA strNameA = pItemElem->Attribute("name"); if(strSubItemName == CA2T(strNameA, CP_UTF8)) { // 加载子菜单 return Load(pItemElem); } if(LoadSubMenu(pItemElem, strSubItemName)) { // 如果递归加载成功则返回,否则继续向下遍历查找 return TRUE; } } return FALSE; }
// 加载指定名字的菜单节点 BOOL CDuiMenu::LoadSubMenu(DuiXmlNode pXmlElem, CString strSubItemName) { if(pXmlElem == NULL) { return FALSE; } // 递归遍历下层节点,看是否有指定名字的节点 for (DuiXmlNode pItemElem = pXmlElem.first_child(); pItemElem; pItemElem=pItemElem.next_sibling()) { CString strName = pItemElem.attribute(_T("name")).value(); if(strSubItemName == strName) { // 加载子菜单 return Load(pItemElem); } if(LoadSubMenu(pItemElem, strSubItemName)) { // 如果递归加载成功则返回,否则继续向下遍历查找 return TRUE; } } return FALSE; }