📄 babygrid.cpp
字号:
colswithwidth = 0;
for(j=1;j<=BGHS[SI].cols;j++)
{
totalpixels -= BGHS[SI].columnwidths[j];
if(BGHS[SI].columnwidths[j]>0)
{
colswithwidth++;
}
}
if(totalpixels < 0)
{
//show hscrollbar
ShowScrollBar(hWnd,SB_HORZ,TRUE);
SetScrollRange(hWnd,SB_HORZ,1,colswithwidth,TRUE);
BGHS[SI].HSCROLL = TRUE;
}
else
{
//hide hscrollbar
ShowScrollBar(hWnd,SB_HORZ,FALSE);
BGHS[SI].HSCROLL = FALSE;
}
}
void NotifyRowChanged(HWND hWnd,int SI)
{
WPARAM wParam;
LPARAM lParam;
lParam = MAKELPARAM(BGHS[SI].cursorrow,BGHS[SI].cursorcol);
wParam=MAKEWPARAM((UINT)BGHS[SI].gridmenu,BGN_ROWCHANGED);
SendMessage(GetParent(hWnd),WM_COMMAND,wParam,lParam);
wParam=MAKEWPARAM((UINT)BGHS[SI].gridmenu,BGN_SELCHANGE);
SendMessage(GetParent(hWnd),WM_COMMAND,wParam,lParam);
}
void NotifyColChanged(HWND hWnd,int SI)
{
WPARAM wParam;
LPARAM lParam;
lParam = MAKELPARAM(BGHS[SI].cursorrow,BGHS[SI].cursorcol);
wParam=MAKEWPARAM((UINT)BGHS[SI].gridmenu,BGN_COLCHANGED);
SendMessage(GetParent(hWnd),WM_COMMAND,wParam,lParam);
wParam=MAKEWPARAM((UINT)BGHS[SI].gridmenu,BGN_SELCHANGE);
SendMessage(GetParent(hWnd),WM_COMMAND,wParam,lParam);
}
void NotifyEndEdit(HWND hWnd,int SI)
{
WPARAM wParam;
LPARAM lParam;
lParam = MAKELPARAM(BGHS[SI].cursorrow,BGHS[SI].cursorcol);
wParam=MAKEWPARAM((UINT)BGHS[SI].gridmenu,BGN_EDITEND);
SendMessage(GetParent(hWnd),WM_COMMAND,wParam,lParam);
}
void NotifyDelete(HWND hWnd,int SI)
{
WPARAM wParam;
LPARAM lParam;
lParam = MAKELPARAM(BGHS[SI].cursorrow,BGHS[SI].cursorcol);
wParam=MAKEWPARAM((UINT)BGHS[SI].gridmenu,BGN_DELETECELL);
SendMessage(GetParent(hWnd),WM_COMMAND,wParam,lParam);
}
void NotifyEditBegin(HWND hWnd,int SI)
{
WPARAM wParam;
LPARAM lParam;
lParam = MAKELPARAM(BGHS[SI].cursorrow,BGHS[SI].cursorcol);
wParam=MAKEWPARAM((UINT)BGHS[SI].gridmenu,BGN_EDITBEGIN);
SendMessage(GetParent(hWnd),WM_COMMAND,wParam,lParam);
}
void NotifyEditEnd(HWND hWnd,int SI)
{
WPARAM wParam;
LPARAM lParam;
lParam = MAKELPARAM(BGHS[SI].cursorrow,BGHS[SI].cursorcol);
wParam=MAKEWPARAM((UINT)BGHS[SI].gridmenu,BGN_EDITEND);
SendMessage(GetParent(hWnd),WM_COMMAND,wParam,lParam);
}
void NotifyF1(HWND hWnd,int SI)
{
WPARAM wParam;
LPARAM lParam;
lParam = MAKELPARAM(BGHS[SI].cursorrow,BGHS[SI].cursorcol);
wParam=MAKEWPARAM((UINT)BGHS[SI].gridmenu,BGN_F1);
SendMessage(GetParent(hWnd),WM_COMMAND,wParam,lParam);
}
void NotifyF2(HWND hWnd,int SI)
{
WPARAM wParam;
LPARAM lParam;
lParam = MAKELPARAM(BGHS[SI].cursorrow,BGHS[SI].cursorcol);
wParam=MAKEWPARAM((UINT)BGHS[SI].gridmenu,BGN_F2);
SendMessage(GetParent(hWnd),WM_COMMAND,wParam,lParam);
}
void NotifyF3(HWND hWnd,int SI)
{
WPARAM wParam;
LPARAM lParam;
lParam = MAKELPARAM(BGHS[SI].cursorrow,BGHS[SI].cursorcol);
wParam=MAKEWPARAM((UINT)BGHS[SI].gridmenu,BGN_F3);
SendMessage(GetParent(hWnd),WM_COMMAND,wParam,lParam);
}
void NotifyF4(HWND hWnd,int SI)
{
WPARAM wParam;
LPARAM lParam;
lParam = MAKELPARAM(BGHS[SI].cursorrow,BGHS[SI].cursorcol);
wParam=MAKEWPARAM((UINT)BGHS[SI].gridmenu,BGN_F4);
SendMessage(GetParent(hWnd),WM_COMMAND,wParam,lParam);
}
void NotifyF5(HWND hWnd,int SI)
{
WPARAM wParam;
LPARAM lParam;
lParam = MAKELPARAM(BGHS[SI].cursorrow,BGHS[SI].cursorcol);
wParam=MAKEWPARAM((UINT)BGHS[SI].gridmenu,BGN_F5);
SendMessage(GetParent(hWnd),WM_COMMAND,wParam,lParam);
}
void NotifyF6(HWND hWnd,int SI)
{
WPARAM wParam;
LPARAM lParam;
lParam = MAKELPARAM(BGHS[SI].cursorrow,BGHS[SI].cursorcol);
wParam=MAKEWPARAM((UINT)BGHS[SI].gridmenu,BGN_F6);
SendMessage(GetParent(hWnd),WM_COMMAND,wParam,lParam);
}
void NotifyF7(HWND hWnd,int SI)
{
WPARAM wParam;
LPARAM lParam;
lParam = MAKELPARAM(BGHS[SI].cursorrow,BGHS[SI].cursorcol);
wParam=MAKEWPARAM((UINT)BGHS[SI].gridmenu,BGN_F7);
SendMessage(GetParent(hWnd),WM_COMMAND,wParam,lParam);
}
void NotifyF8(HWND hWnd,int SI)
{
WPARAM wParam;
LPARAM lParam;
lParam = MAKELPARAM(BGHS[SI].cursorrow,BGHS[SI].cursorcol);
wParam=MAKEWPARAM((UINT)BGHS[SI].gridmenu,BGN_F8);
SendMessage(GetParent(hWnd),WM_COMMAND,wParam,lParam);
}
void NotifyF9(HWND hWnd,int SI)
{
WPARAM wParam;
LPARAM lParam;
lParam = MAKELPARAM(BGHS[SI].cursorrow,BGHS[SI].cursorcol);
wParam=MAKEWPARAM((UINT)BGHS[SI].gridmenu,BGN_F9);
SendMessage(GetParent(hWnd),WM_COMMAND,wParam,lParam);
}
void NotifyF10(HWND hWnd,int SI)
{
WPARAM wParam;
LPARAM lParam;
lParam = MAKELPARAM(BGHS[SI].cursorrow,BGHS[SI].cursorcol);
wParam=MAKEWPARAM((UINT)BGHS[SI].gridmenu,BGN_F10);
SendMessage(GetParent(hWnd),WM_COMMAND,wParam,lParam);
}
void NotifyF11(HWND hWnd,int SI)
{
WPARAM wParam;
LPARAM lParam;
lParam = MAKELPARAM(BGHS[SI].cursorrow,BGHS[SI].cursorcol);
wParam=MAKEWPARAM((UINT)BGHS[SI].gridmenu,BGN_F11);
SendMessage(GetParent(hWnd),WM_COMMAND,wParam,lParam);
}
void NotifyF12(HWND hWnd,int SI)
{
WPARAM wParam;
LPARAM lParam;
lParam = MAKELPARAM(BGHS[SI].cursorrow,BGHS[SI].cursorcol);
wParam=MAKEWPARAM((UINT)BGHS[SI].gridmenu,BGN_F12);
SendMessage(GetParent(hWnd),WM_COMMAND,wParam,lParam);
}
void NotifyCellClicked(HWND hWnd,int SI)
{
WPARAM wParam;
LPARAM lParam;
lParam = MAKELPARAM(BGHS[SI].cursorrow,BGHS[SI].cursorcol);
wParam=MAKEWPARAM((UINT)BGHS[SI].gridmenu,BGN_CELLCLICKED);
SendMessage(GetParent(hWnd),WM_COMMAND,wParam,lParam);
}
void GetVisibleColumns(HWND hWnd,int SI)
{
int j;
int value;
value=0;
for(j=1;j<=BGHS[SI].cols;j++)
{
if(BGHS[SI].columnwidths[j] > 0)
{
value++;
}
}
BGHS[SI].visiblecolumns = value;
SetScrollRange(hWnd,SB_HORZ,1,value,TRUE);
}
int GetNthVisibleColumn(HWND hWnd,int SI,int n)
{
int j,count;
int value;
j=1;
count=0;
value = n-1;
while(j<=BGHS[SI].cols)
{
if(BGHS[SI].columnwidths[j]>0)
{
count++;
if(count==n)
{
value = j;
}
}
j++;
}
return value;
}
void CloseEdit(HWND hWnd,int SI)
{
int r,c;
_BGCELL cell;
r=BGHS[SI].cursorrow;
c=BGHS[SI].cursorcol;
cell.row = r;
cell.col = c;
SendMessage(hWnd,BGM_SETCELLDATA,(UINT)&cell,(long)BGHS[SI].editstring);
strcpy(BGHS[SI].editstring,"");
RefreshGrid(hWnd);
BGHS[SI].EDITING = FALSE;
HideCaret(hWnd);
NotifyEditEnd(hWnd,SI);
}
void DisplayEditString(HWND hWnd,int SI,char* tstring)
{
int r,c;
HFONT holdfont;
RECT rt;
HDC cdc;
r=BGHS[SI].cursorrow;
c=BGHS[SI].cursorcol;
ShowCaret(hWnd);
if((r<BGHS[SI].homerow)||(c<BGHS[SI].homecol))
{
HideCaret(hWnd);
return;
}
rt=GetCellRect(hWnd,SI,r,c);
rt.top += 2;
rt.bottom -= 2;
rt.right -=2;
rt.left += 2;
cdc=GetDC(hWnd);
Rectangle(cdc,rt.left,rt.top,rt.right,rt.bottom);
rt.top += 2;
rt.bottom -= 2;
rt.right -=2;
rt.left += 2;
if(strlen(BGHS[SI].editstring)<=300)
{
strcat(BGHS[SI].editstring,tstring);
strcpy(BGHS[SI].editstringdisplay,BGHS[SI].editstring);
}
else
{
MessageBeep(0);
}
holdfont=(HFONT)SelectObject(cdc,BGHS[SI].hfont);
rt.right -= 5;
DrawText(cdc,BGHS[SI].editstringdisplay,-1,&rt,DT_RIGHT|DT_VCENTER|DT_SINGLELINE);
rt.right +=5;
ShowCaret(hWnd);
{
int rh,ah;
rh=BGHS[SI].rowheight;
ah=BGHS[SI].fontascentheight;
SetCaretPos(rt.right-4,rt.top+(int)(rh/2)-ah+2);
}
SelectObject(cdc,holdfont);
ReleaseDC(hWnd,cdc);
}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
ATOM RegisterGridClass(HINSTANCE hInstance)
{
//initialize BGHS structure
int j,k;
for(j=0;j<MAX_GRIDS;j++)
{
BGHS[j].gridmenu = NULL;
BGHS[j].hlist1 = NULL;
strcpy(BGHS[j].protect,"U");
BGHS[j].rows = 100;
BGHS[j].cols = 255;
BGHS[j].homerow = 1;
BGHS[j].homecol = 1;
BGHS[j].rowheight = 21;
BGHS[j].headerrowheight = 21;
BGHS[j].ROWSNUMBERED = TRUE;
BGHS[j].COLUMNSNUMBERED = TRUE;
BGHS[j].EDITABLE = FALSE;
BGHS[j].EDITING = FALSE;
BGHS[j].AUTOROW = TRUE;
BGHS[j].cursorcol = 1;
BGHS[j].cursorrow = 1;
BGHS[j].columnwidths[0]=50;
BGHS[j].ADVANCEROW = TRUE;
BGHS[j].DRAWHIGHLIGHT = TRUE;
BGHS[j].cursorcolor = RGB(255,255,255);
BGHS[j].protectcolor = RGB(255,255,255);
BGHS[j].unprotectcolor = RGB(255,255,255);
BGHS[j].highlightcolor = RGB(0,0,128);
BGHS[j].gridlinecolor = RGB(220,220,220);
BGHS[j].highlighttextcolor = RGB(255,255,255);
BGHS[j].textcolor = RGB(0,0,0);
BGHS[j].titleheight = 0;
BGHS[j].EXTENDLASTCOLUMN = TRUE;
BGHS[j].SHOWINTEGRALROWS = TRUE;
BGHS[j].SIZING = FALSE;
BGHS[j].ELLIPSIS = TRUE;
BGHS[j].COLAUTOWIDTH = FALSE;
BGHS[j].COLUMNSIZING = FALSE;
BGHS[j].ALLOWCOLUMNRESIZING = FALSE;
BGHS[j].cursortype = 0;
BGHS[j].hcolumnheadingfont = NULL;
BGHS[j].htitlefont = NULL;
strcpy(BGHS[j].editstring,"");
for(k=1;k<MAX_COLS;k++)
{
BGHS[j].columnwidths[k]=50;
}
}
WNDCLASS wclass;
//wclass.style = CS_BYTEALIGNWINDOW;//CS_HREDRAW|CS_VREDRAW;
wclass.style = CS_HREDRAW|CS_VREDRAW;
wclass.lpfnWndProc = (WNDPROC)GridProc;
wclass.cbClsExtra = 0;
wclass.cbWndExtra = 0;
wclass.hInstance = hInstance;
wclass.hIcon = NULL;
wclass.hCursor = NULL;
wclass.hbrBackground = (HBRUSH)(GetStockObject(GRAY_BRUSH));
wclass.lpszClassName = "BABYGRID";
wclass.lpszMenuName = NULL;
return RegisterClass(&wclass);
}
void SizeGrid(HWND hWnd,int SI)
{
SendMessage(hWnd,WM_SIZE,SIZE_MAXIMIZED,MAKELPARAM(BGHS[SI].wannabewidth,BGHS[SI].wannabeheight));
SendMessage(hWnd,WM_SIZE,SIZE_MAXIMIZED,MAKELPARAM(BGHS[SI].wannabewidth,BGHS[SI].wannabeheight));
}
int FindLongestLine(HDC hdc,char* text,SIZE* size)
{int longest,lines,j;
char temptext[1000];
char *p;
longest=0;
lines=1;
for(j=0;j<(int)strlen(text);j++)
{
if(text[j]=='\n')
{
lines++;
}
}
strcpy(temptext,text);
p=strtok(temptext,"\n");
while(p)
{
GetTextExtentPoint32(hdc,p,strlen(p),size);
if(size->cx > longest)
{
longest=size->cx;
}
p=strtok('\0',"\n");
}
//MessageBox(NULL,text,"FindLongestLine",MB_OK);
return longest;
}
LRESULT CALLBACK GridProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -