// rowParse // Ищет в шаблоне теги <contact>, <tr> и <tc>, и добавляет соответствующие узлы // в дерево описания контакта // cell - поле child или next родительского контейнера // parent - указатель на родительский контейнер // tbuf - указатель на буфер содержащий текст шаблона // hbuf - указатель буфера // sequence - нужно задавать 0, это очередность нахождения // extern "C" BOOL rowParse(ROWCELL* &cell, ROWCELL* parent, char *tbuf, int &hbuf, int &sequence, ROWCELL* *RowTabAccess ) { char * word; word = rowParserGetNextWord(tbuf, hbuf); int cont; if (!_strnicmp(word, "<tr", strlen(word)) ||!_strnicmp(word, "<tr>", strlen(word))) cont = TC_ROW; else if (!_strnicmp(word, "<tc", strlen(word)) ||!_strnicmp(word, "<tc>", strlen(word))) cont = TC_COL; else if (!_strnicmp(word, "/>", strlen(word))|| !_strnicmp(word, "</tr>", strlen(word))|| !_strnicmp(word, "</tc>", strlen(word))) return TRUE; else return FALSE; rowAddCell(cell, cont); rowParserGetParam(cell, tbuf, hbuf); if (cell->type != 0 && cell->type !=TC_SPACE && cell->type !=TC_FIXED) RowTabAccess[sequence++] = cell; if (!rowParse(cell->child, cell, tbuf, hbuf, sequence,RowTabAccess)) return FALSE; if (!parent) { RowTabAccess[sequence] = NULL; return TRUE; } if (!rowParse(cell->next, parent, tbuf, hbuf, sequence,RowTabAccess)) return FALSE; parent->sizing |= cell->sizing; parent->hasfixed|=cell->hasfixed; return TRUE; }
void rowOptAddContainer(HWND htree, HTREEITEM hti) { TVINSERTSTRUCT tvis; TVITEM tviparent; ROWCELL *cell = NULL; if (!hti) { if (TreeView_GetRoot(htree)) return; rowAddCell(rowOptTmplRoot, TC_ROW); tvis.hParent = NULL; tvis.hInsertAfter = TVI_ROOT; tvis.item.pszText = _T("Line"); tvis.item.lParam = (LPARAM)rowOptTmplRoot; cell = rowOptTmplRoot; } else { // Get parent item tviparent.hItem = hti; tviparent.mask = TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE; TreeView_GetItem(htree, &tviparent); cell = (pROWCELL)tviparent.lParam; if (cell->cont == TC_ROW) tvis.item.pszText = _T("Column"); else tvis.item.pszText = _T("Line"); if (cell->child) { cell = cell->child; while (cell->next) cell = cell->next; rowAddCell(cell->next, ((ROWCELL*)tviparent.lParam)->cont == TC_ROW ? TC_COL : TC_ROW); cell = cell->next; } else { rowAddCell(cell->child, ((ROWCELL*)tviparent.lParam)->cont == TC_ROW ? TC_COL : TC_ROW); cell = cell->child; } tvis.hInsertAfter = TVI_LAST; } tvis.item.lParam = (LPARAM)cell; tvis.hParent = hti; tvis.item.mask = TVIF_PARAM | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE; tvis.item.stateMask = TVIS_STATEIMAGEMASK; tvis.item.iImage = 2; tvis.item.iSelectedImage = 2; TreeView_InsertItem(htree, &tvis); TreeView_Expand(htree, hti, TVM_EXPAND); // Change icon at parent item tviparent.iImage = 1; tviparent.iSelectedImage = 0; TreeView_SetItem(htree, &tviparent); int i = 0; memset(rowOptTA, 0, sizeof(rowOptTA)); rowOptBuildTA(rowOptTmplRoot, (pROWCELL*)&rowOptTA, &i); }