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

📄 fastlist.cpp

📁 C语言编写的反汇编工具
💻 CPP
📖 第 1 页 / 共 2 页
字号:
void flSetHeader(FLDATA &flData,int cols,...)
{
	if(cols<=0)
	{
		return;
	}

	flData.dwNumberOfCol = cols;

	flData.flHeader.flcolsWidth = (DWORD *)malloc(cols*sizeof(DWORD));
	flData.flHeader.szcolName = (char **)malloc(cols*sizeof(char *));
	flData.flHeader.rect = (RECT *)malloc(cols*sizeof(RECT));


	va_list ap;
	va_start(ap,cols);

	DWORD dwTotalWidth = 0;
	for(int i=0;i<cols;i++)
	{
		flData.flHeader.flcolsWidth[i] = va_arg(ap,DWORD);
		flData.flHeader.rect[i].top = 0;
		flData.flHeader.rect[i].left = dwTotalWidth;
		flData.flHeader.rect[i].right = dwTotalWidth + flData.flHeader.flcolsWidth[i];
		flData.flHeader.rect[i].bottom = flData.dwHeightOfRow;
		dwTotalWidth += flData.flHeader.flcolsWidth[i];
	}

	for(int i=0;i<cols;i++)
	{
		flData.flHeader.szcolName[i] = va_arg(ap,char *);
	}

	va_end(ap);
}

void flClose(FLDATA &flData)
{
	if(flData.dwNumberOfCol != 0)
	{
		free(flData.flHeader.flcolsWidth);
		free(flData.flHeader.szcolName);
		free(flData.flHeader.rect);
	}

	if(flData.dwNumberOfRow != 0)
	{
		FLROW *prow = flData.flTheFirstRow;
		while(prow)
		{
			FLROW *ptrow = prow;
			prow = prow->flrowNext;
			free(ptrow);
		}
	}

	SendMessage(flData.hwndClient,WM_DESTROY,0,0);
	SendMessage(flData.hwndBuf,WM_DESTROY,0,0);
}

void flSetHeightOfRow(FLDATA &flData,DWORD height)
{
	flData.dwHeightOfRow = height;
	InvalidateRect(flData.hwndClient,&flData.rtClient,true);
}

void flSetBackColorOfTable(FLDATA &flData,DWORD dwColor)
{
	flData.dwBackColor = dwColor;
	InvalidateRect(flData.hwndClient,&flData.rtClient,true);
}

void flDrawFastList(FLDATA &flData)
{
	//绘制背景色
	HBRUSH hBrush = CreateSolidBrush(flData.dwBackColor);
	//hBrush = SelectObject(flData.hdcClient,hBrush);
	FillRect(flData.hdcBuf,&flData.rtClient,hBrush);
	DeleteObject(hBrush);

	//选择字体
	HFONT hFontNew =  CreateFont( 14, 0, 0, 0, 0, 
					0, 0, 0, DEFAULT_CHARSET, 0, 0, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Courier New");
	HFONT hFontOld = (HFONT)SelectObject( flData.hdcBuf, hFontNew );
	SetBkMode( flData.hdcBuf, TRANSPARENT );

	//绘制表头
	hBrush = CreateSolidBrush(flData.flHeader.headerBackColor);
	for(int i=0;i<(int)flData.dwNumberOfCol;i++)
	{
		FillRect(flData.hdcBuf,&flData.flHeader.rect[i],hBrush);
	}
	DeleteObject(hBrush);
	hBrush = CreateSolidBrush(flData.flHeader.headerFrontColor);
	for(DWORD i=0;i<flData.dwNumberOfCol;i++)
	{
		DrawText(flData.hdcBuf,flData.flHeader.szcolName[i],strlen(flData.flHeader.szcolName[i]),&flData.flHeader.rect[i],DT_SINGLELINE|DT_CENTER|DT_VCENTER);
		//TextOut(flData.hdcClient
	}
	DeleteObject(hBrush);

	//按行绘制单元格
	if(flData.flTheFirstRow!=NULL)
	{
		FLROW *prow = flData.flTheFirstRowOfThePage;
		DWORD dwDrawWidth = flData.dwHeightOfRow;
		while(prow && dwDrawWidth<=flData.rtClient.bottom) //&& flData.flTheFirstRowOfThePage->cols[0].rtSize.bottom <= flData.rtClient.bottom)
		{
			for(DWORD i=0;i<flData.dwNumberOfCol;i++)
			{
				HBRUSH hBkBrush = CreateSolidBrush(prow->cols[i].dwBackColor);
				HBRUSH hFtBrush = CreateSolidBrush(prow->cols[i].dwFrontColor);
				RECT rt;
				rt.bottom	= prow->cols[i].rtSize.bottom - flData.flTheFirstRowOfThePage->cols[i].rtSize.bottom + 2*flData.dwHeightOfRow;
				rt.left		= prow->cols[i].rtSize.left;
				rt.right	= prow->cols[i].rtSize.right;
				rt.top		= prow->cols[i].rtSize.top - flData.flTheFirstRowOfThePage->cols[i].rtSize.top + flData.dwHeightOfRow;
				//HBRUSH hOdBrush = SelectObject(flData.hdcBuf,hBkBrush);
				FillRect(flData.hdcBuf,&rt,hBkBrush);
				HBRUSH hOdBrush = (HBRUSH)SelectObject(flData.hdcBuf,hFtBrush);
				DrawText(flData.hdcBuf,prow->cols[i].szString,prow->cols[i].dwStrLen,&rt,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
				SelectObject(flData.hdcBuf,hOdBrush);
				DeleteObject(hBkBrush);
				DeleteObject(hFtBrush);
			}
			prow = prow->flrowNext;
			dwDrawWidth+=flData.dwHeightOfRow;
		}
	}

	//删除字体
	hFontNew = (HFONT)SelectObject(flData.hdcBuf,hFontOld);
	DeleteObject(hFontNew);

	//绘制分割线
	HPEN hPen = CreatePen(PS_SOLID,1,RGB(0,0,0));
	SelectObject(flData.hdcBuf,hPen);
	for(int i=0;i<(int)flData.dwNumberOfCol-1;i++)
	{
		MoveToEx(flData.hdcBuf,flData.flHeader.rect[i].left+flData.flHeader.flcolsWidth[i],0,0);
		LineTo(flData.hdcBuf ,flData.flHeader.rect[i].left+flData.flHeader.flcolsWidth[i],flData.rtBuf.bottom);
	}
	SelectObject(flData.hdcBuf,hPen);
	DeleteObject(hPen);

	//拷贝缓存窗体到主窗体
	BitBlt(flData.hdcClient,0,0,flData.rtClient.right,flData.rtClient.bottom,flData.hdcBuf,0,0,SRCCOPY);
}

FLDATA *flGetFlPointer(HWND hwnd)
{
	return (FLDATA *)GetWindowLong(hwnd,0);
}

void flSetBackColorOfHeader(FLDATA &flData,DWORD dwColor)
{
	flData.flHeader.headerBackColor = dwColor;
	InvalidateRect(flData.hwndClient,&flData.rtClient,true);
}

void flSetFrontColorOfHeader(FLDATA &flData,DWORD dwColor)
{
	flData.flHeader.headerFrontColor = dwColor;
	InvalidateRect(flData.hwndClient,&flData.rtClient,true);
}

int flCheckClickBorder(FLDATA &flData,int m_x)
{
	DWORD dwTotalWidth = 0;
	for(DWORD i=0;i<flData.dwNumberOfCol-1;i++)
	{
		if(m_x>=flData.flHeader.flcolsWidth[i]+dwTotalWidth-1 && m_x<=flData.flHeader.flcolsWidth[i]+dwTotalWidth+1)
		{
			return i;
		}
		dwTotalWidth+=flData.flHeader.flcolsWidth[i];
	}
	return -1;
}

void flRedrawFastList(FLDATA &flData)
{
	InvalidateRect(flData.hwndClient,&flData.rtClient,true);
}

void flAddNewRow(FLDATA &flData,char *firstcell,...)
{
	va_list ap2;
	va_start(ap2,firstcell);
	if(flData.dwNumberOfRow==0||flData.flTheFirstRow==NULL)
	{
		flData.flTheFirstRow = (FLROW *)malloc(sizeof(FLROW));
		flData.flTheFirstRow->cols = (FLCELL *)malloc(sizeof(FLCELL)*flData.dwNumberOfCol);
		flData.flTheFirstRow->flrowNext = NULL;
		flData.flTheFirstRow->flrowPrev = flData.flTheFirstRow;
		flData.flTheLastRow = flData.flTheFirstRow;
		flData.dwNumberOfRow++;
	}
	else
	{
		flData.dwNumberOfRow++;
		FLROW *lastrow = flData.flTheLastRow;
		flData.flTheLastRow->flrowNext = (FLROW *)malloc(sizeof(FLROW));
		flData.flTheLastRow->flrowPrev = flData.flTheLastRow;
		flData.flTheLastRow = flData.flTheLastRow->flrowNext;
		flData.flTheLastRow->cols = (FLCELL *)malloc(sizeof(FLCELL)*flData.dwNumberOfCol);
		flData.flTheLastRow->flrowNext = NULL;
		flData.flTheLastRow->flrowPrev = lastrow;

	}

	DWORD dwTotalHeight = flData.dwNumberOfRow*flData.dwHeightOfRow;
	DWORD dwTotalWidth = 0;
	for(DWORD i=0;i<flData.dwNumberOfCol;i++)
	{
		if(i==0)
			flData.flTheLastRow->cols[i].szString = firstcell;
		else
			flData.flTheLastRow->cols[i].szString = (va_arg(ap2,char *));
		flData.flTheLastRow->cols[i].dwStrLen = (DWORD)strlen(flData.flTheLastRow->cols[i].szString);
		flData.flTheLastRow->cols[i].rtSize.left = dwTotalWidth;
		flData.flTheLastRow->cols[i].rtSize.top = dwTotalHeight;
		flData.flTheLastRow->cols[i].rtSize.right = flData.flTheLastRow->cols[i].rtSize.left + flData.flHeader.flcolsWidth[i];
		flData.flTheLastRow->cols[i].rtSize.bottom = flData.flTheLastRow->cols[i].rtSize.top + flData.dwHeightOfRow;
		flData.flTheLastRow->cols[i].dwBackColor = flData.dwBackColor;
		flData.flTheLastRow->cols[i].dwFrontColor = RGB(0,0,0);
		dwTotalWidth += flData.flHeader.flcolsWidth[i];
	}
	va_end(ap2);

	SCROLLINFO si;
	si.cbSize = sizeof(si);
	//si.nPage = 1;
	si.nMax = flData.dwNumberOfRow;
	si.nMin = 1;
	//si.nPos = 2;
	si.fMask = SIF_RANGE;
	SetScrollInfo(flData.flScrollbar.hwndscrollbar,SB_CTL,&si,true);

}

void flSetNewView(FLDATA &flData,DWORD dwIndex)
{
	if(flData.flTheFirstRow==NULL)return;
	flData.flTheFirstRowOfThePage = flData.flTheFirstRow;
	for(DWORD i=1;i<dwIndex;i++)flData.flTheFirstRowOfThePage = flData.flTheFirstRowOfThePage->flrowNext;
	SetScrollPos(flData.flScrollbar.hwndscrollbar,SB_CTL,dwIndex,true);
	flRedrawFastList(flData);
}

void flSetWidthOfCol(FLDATA &flData,DWORD dwCol,DWORD dwWidth)
{
	if(flData.flTheFirstRow==NULL)return;
	FLROW *pRow = flData.flTheFirstRow;
	flData.flHeader.flcolsWidth[dwCol] = dwWidth;

	DWORD dwTmpWid = 0;
	for(DWORD i=0;i<flData.dwNumberOfCol;i++)
	{
		flData.flHeader.rect[i].left = dwTmpWid;
		dwTmpWid+=flData.flHeader.flcolsWidth[i];
		flData.flHeader.rect[i].right = dwTmpWid;
	}
	while(pRow)
	{
		for(DWORD i=0;i<flData.dwNumberOfCol;i++)
		{
			pRow->cols[i].rtSize.right = flData.flHeader.rect[i].right;
			pRow->cols[i].rtSize.left  = flData.flHeader.rect[i].left;
		}
		pRow = pRow->flrowNext;
	}
	//flRedrawFastList(flData);
}

FLROW *flCheckClickRow(FLDATA &flData,int &nIndexRow,int m_y)
{
	nIndexRow = m_y/flData.dwHeightOfRow;
	FLROW *flRow;
	//DWORD dwMod = m_y%flData.dwHeightOfRow;
	//int nRet;

	/*if(dwIndexRow==0)
	{
		return 0;
	}
	else
	{
		if(dwMod==0)
			nRet = dwIndexRow;
		else
			nRet = dwIndexRow+1;
	}*/

	if(nIndexRow==0)flRow=NULL;
	else
	{
		if(flData.flTheFirstRowOfThePage==NULL)
		{
			nIndexRow=-1;
			return NULL;
		}
		FLROW *pRow = flData.flTheFirstRowOfThePage;
		for(DWORD i=1;i<nIndexRow;i++)
		{
			pRow = pRow->flrowNext;
			if(pRow==NULL)
			{
				nIndexRow=-1;
				return NULL;
			}
		}
		flRow = pRow;
	}

	return flRow;
}

DWORD flGetRowText(FLDATA &flData,FLROW flRow,char *szString)
{
	DWORD dwLength = 0;
	//if(flRow==NULL)return 0;
	for(DWORD i=0;i<flData.dwNumberOfCol;i++)
	{
		if(i==0)
			wsprintf(szString,"%s",flRow.cols[i].szString);
		else
			wsprintf(szString,"%s	%s",szString,flRow.cols[i].szString);

		dwLength += flRow.cols[i].dwStrLen;
	}
	return dwLength;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -