📄 eblistview.c
字号:
if ((nItem < 1) || (nSubItem < 1))
return NULL;
i = nItem;
j = nSubItem;
p2 = pLVInternalData->pItemHead;
while ((p2 != NULL) && (i > 0))
{
p4 = p2;
i = i - 1;
p2 = p2->pNext;
}
if (i == 0)
{
p1 = p4->pSubItemHead;
while ((p1 != NULL) && (j > 0))
{
p3 = p1;
j = j - 1;
p1 = p1->pNext;
}
if (j == 0)
p5 = p3;
}
return p5;
}
static int sFillSubItemToList (PEBLVSUBITEM p0, PEBLSTVWDATA pLVInternalData)
{
PEBSUBITEMDATA p1;
if (p0 == NULL)
return -1;
p1 = sGetSubItemFromList (p0->nItem, p0->subItem, pLVInternalData);
if (p1 == NULL)
return -1;
p1->mask = p0->mask;
if ((p0->mask == ELV_TEXT) || (p0->mask == ELV_BOTH))//edit by tjb 2004-4-14
{
if (p1->pszText != NULL)
{
free (p1->pszText);
p1->pszText = (char *) malloc (p0->cchTextMax + 1);
strcpy (p1->pszText, p0->pszText);
}
else
{
p1->pszText = (char *) malloc (p0->cchTextMax + 1);
strcpy (p1->pszText, p0->pszText);
}
}
else
{
if (p1->pszText != NULL)
free (p1->pszText);
p1->pszText = NULL;
}
p1->cchTextMax = p0->cchTextMax;
//p1->iImage = p0->iImage;
if(p0->iImage != 0)
{
p1->iImage = (char *)calloc(strlen((char *)p0->iImage)+1,1);
strcpy((char *)p1->iImage,(char *)p0->iImage);
}
else
{
p1->iImage =0;
}
p1->dwData = p0->lparam;
if(p0->wordtype != NULL)
{
p1->worddata = (PSIWORDDATA)calloc(1,sizeof(struct _EBLVSUBITEMWORDDATA));
memcpy(p1->worddata,p0->wordtype,sizeof(struct _EBLVSUBITEMWORDDATA));
}
else
{
p1->worddata = NULL;
}
return 0;
}
static int sGetSubItemCopy (PEBLVSUBITEM pSubItem, PEBLSTVWDATA pLVInternalData)
{
PEBSUBITEMDATA p1;
if (pSubItem == NULL || pSubItem->pszText == NULL)
// if (pSubItem == NULL)
return -1;
p1 = sGetSubItemFromList (pSubItem->nItem, pSubItem->subItem, pLVInternalData);
if (p1 == NULL)
return -1;
if (p1->pszText != NULL)
{
if(pSubItem->cchTextMax >= strlen(p1->pszText)+1)
{
strcpy (pSubItem->pszText, p1->pszText);
pSubItem->pszText[strlen(p1->pszText)+1]='\0';
}
else
{
strncpy(pSubItem->pszText, p1->pszText, pSubItem->cchTextMax-1);
pSubItem->pszText[pSubItem->cchTextMax]='\0';
}
/* if(pSubItem->pszText != NULL)
{
free(pSubItem->pszText);
pSubItem->pszText =NULL;
}
pSubItem->pszText = (char *)calloc(strlen(p1->pszText)+1,1);
strcpy (pSubItem->pszText, p1->pszText);
pSubItem->cchTextMax =strlen(p1->pszText);
*/
}
else
{
if(pSubItem->pszText !=NULL)
{
pSubItem->pszText[0] = 0;
}
}
pSubItem->mask = p1->mask;
pSubItem->iImage = p1->iImage;//图标文件;
pSubItem->lparam = p1->dwData;//附加数据;
pSubItem->wordtype = (PSIWORDTYPE)p1->worddata; //文字附加信息
return 0;
}
static BOOL sRemoveColumnFromList (int nCol, PEBLSTVWDATA pLVInternalData)
{
PEBLSTHDR p1 = NULL;
PEBLSTHDR p2 = NULL;
PEBITEMDATA p3 = NULL;
PEBSUBITEMDATA p5 = NULL;
PEBSUBITEMDATA p6 = NULL;
int i;
int offset;
if ((nCol > pLVInternalData->nCols) || (nCol < 1) || (pLVInternalData->nCols < 1))
return FALSE;
offset = -(sGetSubItemWidth (nCol, pLVInternalData));
sAddOffsetToTailSubItem (nCol + 1, offset, pLVInternalData);
if (nCol == 1)
{
p1 = pLVInternalData->pLstHead;
pLVInternalData->pLstHead = pLVInternalData->pLstHead->pNext;
lsthdrDelete (p1);
}
else
{
i = nCol;
p1 = pLVInternalData->pLstHead;
while (i != 2)
{
i = i - 1;
p1 = p1->pNext;
}
p2 = p1->pNext;
p1->pNext = p2->pNext;
lsthdrDelete (p2);
}
p3 = pLVInternalData->pItemHead;
while (p3 != NULL)
{
if (nCol == 1)
{
p5 = p3->pSubItemHead;
p3->pSubItemHead = p3->pSubItemHead->pNext;
subitemDelete (p5);
}
else
{
i = nCol;
p5 = p3->pSubItemHead;
while (i != 2)
{
i = i - 1;
p5 = p5->pNext;
}
p6 = p5->pNext;
p5->pNext = p5->pNext->pNext;
subitemDelete (p6);
}
p3 = p3->pNext;
}
pLVInternalData->nCols = pLVInternalData->nCols - 1;
return 0;
}
static PEBITEMDATA itemNew (int nCols,PEBLSTVWDATA pLVInternalData)
{
PEBSUBITEMDATA pHead = NULL;
PEBSUBITEMDATA p1 = NULL;
PEBSUBITEMDATA p2 = NULL;
PEBITEMDATA p3 = NULL;
int i;
int j;
j = nCols;
if (j >= 1)
{
pHead = subitemNew (NULL);
p1 = pHead;
}
else
return NULL;
for (i = 1; i <= j - 1; i++)
{
p2 = subitemNew (NULL);
p1->pNext = p2;
p1 = p2;
}
p3 = (PEBITEMDATA) malloc (sizeof (EBITEMDATA));
p3->nRows = -1;
p3->pNext = NULL;
p3->bSelected = FALSE;
p3->bMouseOver = FALSE;
p3->nTextColor = pLVInternalData->nItemTextColor;
p3->pSubItemHead = pHead;
p3->bChecked = FALSE;
return p3;
}
static int itemDelete (PEBITEMDATA pItem)
{
PEBSUBITEMDATA p1 = NULL;
PEBSUBITEMDATA p2 = NULL;
p1 = pItem->pSubItemHead;
while (p1 != NULL)
{
p2 = p1;
p1 = p1->pNext;
subitemDelete (p2);
}
pItem->pSubItemHead = NULL;
free (pItem);
return 0;
}
static int sAddItemToList (int nItem, PEBLSTVWDATA pLVInternalData)
{
int nPosition, i;
PEBITEMDATA p1 = NULL;
PEBITEMDATA p2 = NULL;
PEBITEMDATA p3 = NULL;
if (pLVInternalData->nRows > 1000000)
return -1;
nPosition = nItem;
if ((nItem < 1) || (nItem > pLVInternalData->nRows))
nPosition = pLVInternalData->nRows + 1;
p1 = itemNew(pLVInternalData->nCols,pLVInternalData);
if (p1 == NULL)
return -1;
if (nPosition == 1)
{
p2 = pLVInternalData->pItemHead;
pLVInternalData->pItemHead = p1;
p1->pNext = p2;
}
else
{
i = nPosition;
p2 = pLVInternalData->pItemHead;
while (i != 2)
{
i = i - 1;
p2 = p2->pNext;
}
p3 = p2->pNext;
p2->pNext = p1;
p1->pNext = p3;
}
pLVInternalData->nRows = pLVInternalData->nRows + 1;
return 0;
}
static int sRemoveItemFromList (int nItem, PEBLSTVWDATA pLVInternalData)
{
int nPosition;
PEBITEMDATA p1 = NULL;
PEBITEMDATA p2 = NULL;
if ((nItem < 1) || (nItem > pLVInternalData->nRows) || (pLVInternalData->nRows < 1))
return -1;
if (nItem == pLVInternalData->nItemSelected)
{
pLVInternalData->pItemSelected = NULL;
pLVInternalData->nItemSelected = 0;
}
if(nItem == pLVInternalData->nItemMouseOver)
{
pLVInternalData->pItemMouseOver = NULL;
pLVInternalData->nItemMouseOver = 0;
}
nPosition = nItem;
if (nPosition == 1)
{
p1 = pLVInternalData->pItemHead;
pLVInternalData->pItemHead = pLVInternalData->pItemHead->pNext;
itemDelete (p1);
}
else
{
p1 = pLVInternalData->pItemHead;
while (nPosition != 2)
{
nPosition = nPosition - 1;
p1 = p1->pNext;
}
p2 = p1->pNext;
p1->pNext = p2->pNext;
itemDelete (p2);
}
pLVInternalData->nRows = pLVInternalData->nRows - 1;
return 0;
}
static int sRemoveAllItem (PEBLSTVWDATA pLVInternalData)
{
PEBITEMDATA p1 = NULL;
PEBITEMDATA p2 = NULL;
p1 = pLVInternalData->pItemHead;
while (p1 != NULL)
{
p2 = p1;
p1 = p1->pNext;
itemDelete (p2);
}
pLVInternalData->nRows = 0;
pLVInternalData->pItemHead = NULL;
/*add by hejian 2004-9-8*/
pLVInternalData->nOriginalX = 0;
pLVInternalData->nOriginalY = 0;
pLVInternalData->pItemDraged = NULL;
pLVInternalData->pItemClicked = NULL;
pLVInternalData->pItemSelected = NULL;
pLVInternalData->pItemMouseOver = NULL;
pLVInternalData->oldMouseX = 0;
pLVInternalData->oldMouseY = 0;
pLVInternalData->nItemDraged = 0;
pLVInternalData->nItemSelected = 0;
pLVInternalData->nItemMouseOver = 0;
pLVInternalData->nFirstVisableRow =1;
/*end add*/
return 0;
}
static int sFindItemFromList (PEBLVFINDINFO pFindInfo, PEBLSTVWDATA pLVInternalData)
{
PEBITEMDATA p1;
PEBSUBITEMDATA p2;
int i = 0;
int j = 0;
p1 = pLVInternalData->pItemHead;
if (pFindInfo == NULL)
return -1;
while (p1 != NULL)
{
p2 = p1->pSubItemHead;
i = pFindInfo->nCols;
while ((p2 != NULL) && (i > 0))
{
if (strcmp (p2->pszText, pFindInfo->pszInfo[i - 1]) != 0)
break;
i--;
p2 = p2->pNext;
}
j++;
p1 = p1->pNext;
if (i == 0)
return j;
}
return -1;
}
static int sCmpInfo (const char *szSrc, const char *szDest)
{
if (szDest == NULL)
return 1;
if (szSrc == NULL)
return -1;
return strcmp (szSrc, szDest);
}
static int sCmpStructExchange (PEBCMPITEMSTRUCT pSrc, PEBCMPITEMSTRUCT pDest)
{
char *p1;
int n1;
if ((pSrc == NULL) || (pDest == NULL))
return -1;
n1 = pSrc->nItemSeq;
pSrc->nItemSeq = pDest->nItemSeq;
pDest->nItemSeq = n1;
if (pSrc->pszText != NULL)
{
p1 = (char *) malloc (strlen (pSrc->pszText) + 1);
strcpy (p1, pSrc->pszText);
free (pSrc->pszText);
if (pDest->pszText != NULL)
{
pSrc->pszText = (char *) malloc (strlen (pDest->pszText) + 1);
strcpy (pSrc->pszText, pDest->pszText);
}
else
pSrc->pszText = NULL;
}
else
{
p1 = NULL;
if (pDest->pszText != NULL)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -