⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eblistview.c

📁 基于minigui开发的一套图形控件系统
💻 C
📖 第 1 页 / 共 5 页
字号:
	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 + -