📄 uiscroll.c
字号:
{
case VSCROLL_LINE_UP:
if(!( ptScroll->base.style&SCROLL_3DMODE))
guiInvertRect (hBoard, left, top,right,top+ _SCROLL_ICON_HEIGHT_-2 );
else
{
guiDrawLine (hBoard,left, top,left+_SCROLL_ICON_WIDTH_-1, top,GUI_BLACK, GUI_SOLID );
guiDrawLine (hBoard,left,top,left,top+_SCROLL_ICON_HEIGHT_-1, GUI_BLACK,GUI_SOLID );
guiDrawLine (hBoard,left,top+_SCROLL_ICON_HEIGHT_-1,left+_SCROLL_ICON_WIDTH_-1,top+_SCROLL_ICON_HEIGHT_-1,GUI_LIGHTGRAY, GUI_SOLID);
guiDrawLine (hBoard,left+_SCROLL_ICON_WIDTH_-1,top,left+_SCROLL_ICON_WIDTH_-1,top+_SCROLL_ICON_HEIGHT_-1,GUI_LIGHTGRAY, GUI_SOLID );
}
break;
case VSCROLL_LINE_DOWN:
if(!( ptScroll->base.style&SCROLL_3DMODE) )
guiInvertRect (hBoard, left, bottom-_SCROLL_ICON_HEIGHT_+1,right, bottom );
else
{
guiDrawLine (hBoard,left, bottom-_SCROLL_ICON_HEIGHT_+1,right, bottom-_SCROLL_ICON_HEIGHT_+1,GUI_BLACK, GUI_SOLID );
guiDrawLine (hBoard,left,bottom-_SCROLL_ICON_HEIGHT_+1,left,bottom, GUI_BLACK,GUI_SOLID );
guiDrawLine (hBoard,left,bottom,right,bottom,GUI_LIGHTGRAY, GUI_SOLID);
guiDrawLine (hBoard,right,bottom-_SCROLL_ICON_HEIGHT_+1,right,bottom,GUI_LIGHTGRAY, GUI_SOLID );
}
break;
case VSCROLL_PAGE_UP:
if(!( ptScroll->base.style&SCROLL_3DMODE) )
guiClearBlock ( hBoard, left+1, top+_SCROLL_ICON_HEIGHT_,right-1, iBarMin- 1,GUI_LIGHTGRAY,REPLACE_STYLE );
else
guiClearBlock (hBoard, left, top+_SCROLL_ICON_HEIGHT_,right, iBarMin- 1, GUI_BLACK,REPLACE_STYLE );
break;
case VSCROLL_PAGE_DOWN:
if(!( ptScroll->base.style&SCROLL_3DMODE))
guiClearBlock (hBoard, left+1, iBarMax,right-1,bottom-_SCROLL_ICON_HEIGHT_-1,GUI_LIGHTGRAY,REPLACE_STYLE );
else
guiClearBlock (hBoard, left, iBarMax+1,right,bottom-_SCROLL_ICON_HEIGHT_, GUI_BLACK,REPLACE_STYLE );
break;
case HSCROLL_LINE_LEFT:
if(!( ptScroll->base.style&SCROLL_3DMODE))
guiInvertRect (hBoard, left, top,left+_SCROLL_ICON_WIDTH_-2, bottom );
else
{
guiDrawLine (hBoard,left,top,left+_SCROLL_ICON_WIDTH_-1, top,GUI_BLACK, GUI_SOLID );
guiDrawLine (hBoard,left,top,left,bottom, GUI_BLACK,GUI_SOLID );
guiDrawLine (hBoard,left,bottom,left+_SCROLL_ICON_WIDTH_-1,bottom,GUI_LIGHTGRAY, GUI_SOLID);
guiDrawLine (hBoard,left+_SCROLL_ICON_WIDTH_-1,top,left+_SCROLL_ICON_WIDTH_-1,bottom,GUI_LIGHTGRAY, GUI_SOLID );
}
break;
case HSCROLL_LINE_RIGHT:
if(!( ptScroll->base.style&SCROLL_3DMODE) )
guiInvertRect (hBoard, right-_SCROLL_ICON_WIDTH_+2, top,right, bottom );
else
{
guiDrawLine (hBoard,right-_SCROLL_ICON_WIDTH_+1, top,right, top,GUI_BLACK, GUI_SOLID );
guiDrawLine (hBoard,right-_SCROLL_ICON_WIDTH_+1,top,right-_SCROLL_ICON_WIDTH_+1,bottom, GUI_BLACK,GUI_SOLID );
guiDrawLine (hBoard,right-_SCROLL_ICON_WIDTH_+1,bottom,right,bottom,GUI_LIGHTGRAY, GUI_SOLID);
guiDrawLine (hBoard,right,top,right,bottom,GUI_LIGHTGRAY, GUI_SOLID );
}
break;
case HSCROLL_PAGE_LEFT:
if(!( ptScroll->base.style&SCROLL_3DMODE))
guiClearBlock (hBoard, left+_SCROLL_ICON_WIDTH_,top+1 ,iBarMin- 1,bottom-1, GUI_LIGHTGRAY,REPLACE_STYLE );
else
{
guiClearBlock ( hBoard,left+_SCROLL_ICON_WIDTH_,top ,iBarMin- 1,bottom, GUI_BLACK ,REPLACE_STYLE);
}
break;
case HSCROLL_PAGE_RIGHT:
if(!( ptScroll->base.style&SCROLL_3DMODE) )
guiClearBlock ( hBoard, iBarMax+1,top+1,right-_SCROLL_ICON_WIDTH_,bottom-1,GUI_LIGHTGRAY,REPLACE_STYLE );
else
guiClearBlock ( hBoard, iBarMax+1,top,right-_SCROLL_ICON_WIDTH_,bottom, GUI_BLACK,REPLACE_STYLE );
break;
default:
break;
}
break;
case PENUP:
switch(nType)
{
case VSCROLL_LINE_UP:
{
if(ptScroll->base.style&SCROLL_SPIN)
{
if(ptScroll->total<=ptScroll->page)
{
ptScroll->current = 0;
}
else
{
if(ptScroll->current<(ptScroll->total-ptScroll->page))
ptScroll->current++;
}
}
else
{
if(ptScroll->current>0)
ptScroll->current--;
}
tMessage.y =ptScroll->current;
}
break;
case VSCROLL_LINE_DOWN:
{
if(ptScroll->base.style&SCROLL_SPIN)
{
if(ptScroll->current>0)
ptScroll->current--;
}
else
{
if(ptScroll->total<=ptScroll->page)
{
ptScroll->current = 0;
}
else
{
if(ptScroll->current<(ptScroll->total/*-ptScroll->page*/-1))
ptScroll->current++;
}
}
tMessage.y =ptScroll->current;
}
break;
case VSCROLL_PAGE_UP:
{
if((ptScroll->current-ptScroll->page)>=0)
ptScroll->current -=ptScroll->page;
else
ptScroll->current = 0;
tMessage.y =ptScroll->current;
}
break;
case VSCROLL_PAGE_DOWN:
{
if(ptScroll->total<=ptScroll->page)
{
ptScroll->current = 0;
}
else
{
if((ptScroll->current+ptScroll->page)<ptScroll->total-ptScroll->page)
ptScroll->current +=ptScroll->page;
else
ptScroll->current = ptScroll->total-ptScroll->page;
}
tMessage.y =ptScroll->current;
}
break;
case HSCROLL_LINE_LEFT:
{
if(ptScroll->current>0)
ptScroll->current--;
tMessage.x =ptScroll->current;
}
break;
case HSCROLL_LINE_RIGHT:
{
if(ptScroll->total<=ptScroll->page)
{
ptScroll->current = 0;
}
else
{
if(ptScroll->current<(ptScroll->total-1))
ptScroll->current++;
}
tMessage.x =ptScroll->current;
}
break;
case HSCROLL_PAGE_LEFT:
{
if((ptScroll->current-ptScroll->page)>=0)
ptScroll->current -=ptScroll->page;
else
ptScroll->current = 0;
tMessage.x =ptScroll->current;
}
break;
case HSCROLL_PAGE_RIGHT:
{
if(ptScroll->total<=ptScroll->page)
{
ptScroll->current = 0;
}
else
{
if((ptScroll->current+ptScroll->page)<(ptScroll->total-ptScroll->page))
ptScroll->current +=ptScroll->page;
else
ptScroll->current = ptScroll->total-ptScroll->page;
}
tMessage.x=ptScroll->current;
}
break;
default:
guiExitWCS() ;
return 0;
}
_Scroll_Update( handle);
_guiBar_Update( handle,0);
_guiScroll_Paint( handle);
tMessage.messageType = nType;
guiEnqueue(gpTopWindow->messageQueue,&tMessage);
guiPenSound();
break;
case PENMOVE:
if(nTemp<=0) break;
wOldPos = ptScroll->current;
{
left = 0;
right = ptScroll->base.right - ptScroll->base.left;
top = 0;
bottom = ptScroll->base.bottom - ptScroll->base.top;
switch(nType)
{
case VSCROLL_MOVE:
case VSCROLL_PAGE_UP:
case VSCROLL_PAGE_DOWN:
tem_y =tem_y-ptScroll->base.top;
nPos = tem_y - ptScroll->nOld_y;
if(nPos == 0) break;
ptScroll->nOld_y = tem_y;
if(y>(ptScroll->base.top+_SCROLL_ICON_HEIGHT_-1)&&y<(ptScroll->base.bottom-_SCROLL_ICON_HEIGHT_+1))
{
nMin = ptScroll->Bar_Min+nPos;
if(nMin > (bottom-top-_SCROLL_ICON_HEIGHT_ - nTemp+1))
{
nMin = bottom-top-_SCROLL_ICON_HEIGHT_ - nTemp+1;
}
if(nMin<(top+_SCROLL_ICON_HEIGHT_))
{
nMin = top+_SCROLL_ICON_HEIGHT_;
}
nMax = nMin + nTemp-1;
nCurrent = ((ptScroll->total-ptScroll->page)*(nMin- _SCROLL_ICON_HEIGHT_)
/(bottom-top+1-2*_SCROLL_ICON_HEIGHT_-nTemp)) ;
if(nCurrent<0)
{
nCurrent = 0;
}
if(nCurrent>(ptScroll->total-ptScroll->page))
{
nCurrent = (ptScroll->total-ptScroll->page);
}
nType = VSCROLL_MOVE;
tMessage.y =nCurrent;
}
ptScroll->Bar_Min = nMin;
ptScroll->Bar_Max = nMax;
ptScroll->current = nCurrent;
break;
case HSCROLL_MOVE:
case HSCROLL_PAGE_LEFT:
case HSCROLL_PAGE_RIGHT:
tem_x =tem_x-ptScroll->base.left;
nPos = tem_x - ptScroll->nOld_x;
if(nPos == 0) break;
ptScroll->nOld_x = tem_x;
if(x>(ptScroll->base.left+_SCROLL_ICON_HEIGHT_-1)&&x<(ptScroll->base.right-_SCROLL_ICON_HEIGHT_+1))
{
nMin = ptScroll->Bar_Min+nPos;
if(nMin>(right-left-_SCROLL_ICON_HEIGHT_ - nTemp+1))
nMin = right-left-_SCROLL_ICON_HEIGHT_ - nTemp+1;
if(nMin<(left+_SCROLL_ICON_HEIGHT_))
nMin = (left+_SCROLL_ICON_HEIGHT_);
nMax = nMin + nTemp-1;
nCurrent = ((ptScroll->total-ptScroll->page)*(nMin- _SCROLL_ICON_HEIGHT_)
/(right-left+1-2*_SCROLL_ICON_HEIGHT_-nTemp)) ;
if(nCurrent<0) nCurrent = 0;
if(nCurrent>(ptScroll->total-ptScroll->page)) nCurrent = (ptScroll->total-ptScroll->page);
nType = HSCROLL_MOVE;
tMessage.x=nCurrent;
}
ptScroll->nOld_Min = ptScroll->Bar_Min;
ptScroll->Bar_Min = nMin;
ptScroll->Bar_Max = nMax;
ptScroll->current = nCurrent;
break;
default:
guiExitWCS() ;
return 0;
}
//ptScroll->nOld_Min = ptScroll->Bar_Min;
_guiBar_Update( handle,1);
ptScroll->nOld_Min = ptScroll->Bar_Min;
_guiScroll_Paint( handle);
if(wOldPos == ptScroll->current) break;
tMessage.messageType = nType;
guiEmptyQueue(gpTopWindow->messageQueue);
guiEnqueue(gpTopWindow->messageQueue,&tMessage);
}
break;
default :
_guiScroll_Paint( handle);
break;
}
guiExitWCS() ;
return 1;
}
static void _guiDeConvertXY(HNDL handle,int* x,int* y)
{
HNDL hnd;
TGuiControl *pCtrl;
TViewport *pvp;
if(!handle) return;
pCtrl = (TGuiControl*)handle;
if(pCtrl->container)
{
hnd = pCtrl->container;
*x = *x - ((TWindow*)hnd)->left - pCtrl->left;
*y = *y - ((TWindow*)hnd)->top - pCtrl->top;
}
else
{
hnd = pCtrl->vportHandle;
pvp = (TViewport*)hnd;
*x = *x - ((TWindow*)pvp->base.container)->left + pvp->iCurrentLeft - pvp->base.left - pCtrl->left;
*y = *y - ((TWindow*)pvp->base.container)->top + pvp->iCurrentTop - pvp->base.top - pCtrl->top;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -