?? fastlist.cpp
字號:
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 + -