📄 uislider.c
字号:
}
left = 0;
right = ptSlider->base.right-ptSlider->base.left;
top = 0;
bottom = ptSlider->base.bottom-ptSlider->base.top;
if( !( ptSlider->base.style & SLIDER_VERTICAL))
ptSlider->current_pos = left+SLIDER_H_WIDTH/2
+ (right-left+1-SLIDER_H_WIDTH)
* (ptSlider->current-ptSlider->min+1)/(ptSlider->max-ptSlider->min+1);
else
ptSlider->current_pos = bottom-SLIDER_V_HEIGHT/2
- (bottom-top+1-SLIDER_V_HEIGHT)
* (ptSlider->current-ptSlider->min+1)/(ptSlider->max-ptSlider->min+1);
return 1;
}
//==========================================================
static int _guiSlider_Update2( DWORD handle)
{
TGUISLIDER * ptSlider;
unsigned short left=0,right=0,top=0,bottom=0;
if(handle == NULL)
{
return STATUS_ERR;
}
ptSlider=(TGUISLIDER *)handle;
if(ptSlider->base.checkFlag != GUI_CONTROL_CHECK_FLAG)
{
return STATUS_ERR;
}
left = 0;
right = ptSlider->base.right-ptSlider->base.left;
top = 0;
bottom = ptSlider->base.bottom-ptSlider->base.top;
if( !( ptSlider->base.style & SLIDER_VERTICAL))
ptSlider->current = (ptSlider->current_pos - left -SLIDER_H_WIDTH/2)
*(ptSlider->max-ptSlider->min)
/(right-left-SLIDER_H_WIDTH)
+ptSlider->min;
else
ptSlider->current = (bottom - ptSlider->current_pos - SLIDER_V_HEIGHT/2)
*(ptSlider->max-ptSlider->min)
/ (bottom-top-SLIDER_V_HEIGHT)
+ptSlider->min;
return 1;
}
//====================================================================
static int _guiSlider_Paint( DWORD handle)
{
TGUISLIDER * ptSlider;
unsigned short left=0,right=0,top=0,bottom=0;
if(handle == NULL)
{
return STATUS_ERR;
}
ptSlider=(TGUISLIDER *)handle;
if(ptSlider->base.checkFlag != GUI_CONTROL_CHECK_FLAG)
{
return STATUS_ERR;
}
left = 0;
right = ptSlider->base.right-ptSlider->base.left;
top = 0;
bottom = ptSlider->base.bottom-ptSlider->base.top;
guiSetPattern(icon_Gui_Slider_Grid);
guiClearBlock(handle, left,top,right,bottom,GUI_WHITE,REPLACE_STYLE);
if( !( ptSlider->base.style & SLIDER_VERTICAL))
{
if(SLIDER_3DMODE & ptSlider->base.style)
{
guiClearBlock(handle,left+SLIDER_H_WIDTH/2,(bottom+top-SLIDER_RECTWIDTH)/2,
right -SLIDER_H_WIDTH/2,(bottom+top-SLIDER_RECTWIDTH)/2+SLIDER_RECTWIDTH,
GUI_DARKGRAY,REPLACE_STYLE);
guiDrawLine ( handle,right -SLIDER_H_WIDTH/2,(bottom+top-SLIDER_RECTWIDTH)/2,right -SLIDER_H_WIDTH/2, (bottom+top-SLIDER_RECTWIDTH)/2+SLIDER_RECTWIDTH,GUI_LIGHTGRAY, GUI_SOLID );
guiDrawLine ( handle,left+SLIDER_H_WIDTH/2, (bottom+top-SLIDER_RECTWIDTH)/2+SLIDER_RECTWIDTH, right -SLIDER_H_WIDTH/2, (bottom+top-SLIDER_RECTWIDTH)/2+SLIDER_RECTWIDTH,GUI_LIGHTGRAY, GUI_SOLID );
guiDrawLine ( handle,left+SLIDER_H_WIDTH/2, (bottom+top-SLIDER_RECTWIDTH)/2, right -SLIDER_H_WIDTH/2, (bottom+top-SLIDER_RECTWIDTH)/2,GUI_BLACK, GUI_SOLID );
guiDrawLine ( handle,left+SLIDER_H_WIDTH/2, (bottom+top-SLIDER_RECTWIDTH)/2, left+SLIDER_H_WIDTH/2, (bottom+top-SLIDER_RECTWIDTH)/2+SLIDER_RECTWIDTH,GUI_BLACK, GUI_SOLID );
//guiDrawLine ( handle,wGap, top+2, wGap, bottom-1,GUI_BLACK, GUI_SOLID );
guiClearBlock(handle,ptSlider->current_pos-SLIDER_H_WIDTH/2 ,top,ptSlider->current_pos+SLIDER_H_WIDTH/2,
bottom-1,GUI_DARKGRAY,REPLACE_STYLE);
guiDrawLine ( handle,ptSlider->current_pos-SLIDER_H_WIDTH/2, top, ptSlider->current_pos+SLIDER_H_WIDTH/2, top,GUI_LIGHTGRAY, GUI_SOLID );
guiDrawLine ( handle,ptSlider->current_pos-SLIDER_H_WIDTH/2, top, ptSlider->current_pos-SLIDER_H_WIDTH/2, bottom,GUI_LIGHTGRAY, GUI_SOLID );
guiDrawLine ( handle,ptSlider->current_pos+SLIDER_H_WIDTH/2, top, ptSlider->current_pos+SLIDER_H_WIDTH/2, bottom,GUI_BLACK, GUI_SOLID );
guiDrawLine ( handle,ptSlider->current_pos-SLIDER_H_WIDTH/2, bottom, ptSlider->current_pos+SLIDER_H_WIDTH/2, bottom,GUI_BLACK, GUI_SOLID );
}
else
{
guiFillRect (handle,left+SLIDER_H_WIDTH/2,top+(bottom-top-SLIDER_RECTWIDTH)/2,
right +1-SLIDER_H_WIDTH/2,top+(bottom-top-SLIDER_RECTWIDTH)/2+SLIDER_RECTWIDTH,GUI_BLACK,GUI_IMAGE );
guiDrawRect ( handle,left+SLIDER_H_WIDTH/2,top+(bottom-top-SLIDER_RECTWIDTH)/2,
right +1-SLIDER_H_WIDTH/2,top+(bottom-top-SLIDER_RECTWIDTH)/2+SLIDER_RECTWIDTH,GUI_DARKGRAY,GUI_SOLID);
guiClearBlock(handle,ptSlider->current_pos-SLIDER_H_WIDTH/2 ,top,ptSlider->current_pos+SLIDER_H_WIDTH/2,bottom-1,GUI_BLACK,REPLACE_STYLE);
}
}
else
{
if(SLIDER_3DMODE & ptSlider->base.style)
{
guiClearBlock(handle,(right+left-SLIDER_RECTWIDTH)/2,top+SLIDER_V_HEIGHT/2,
(right+left-SLIDER_RECTWIDTH)/2+SLIDER_RECTWIDTH,bottom +1-SLIDER_V_HEIGHT/2,
GUI_DARKGRAY,REPLACE_STYLE);
guiDrawLine ( handle,(right+left-SLIDER_RECTWIDTH)/2+SLIDER_RECTWIDTH, top+SLIDER_V_HEIGHT/2, (right+left-SLIDER_RECTWIDTH)/2+SLIDER_RECTWIDTH, bottom +1-SLIDER_V_HEIGHT/2,GUI_LIGHTGRAY, GUI_SOLID );
guiDrawLine ( handle,(right+left-SLIDER_RECTWIDTH)/2, bottom +1-SLIDER_V_HEIGHT/2, (right+left-SLIDER_RECTWIDTH)/2+SLIDER_RECTWIDTH, bottom +1-SLIDER_V_HEIGHT/2,GUI_LIGHTGRAY, GUI_SOLID );
guiDrawLine ( handle,(right+left-SLIDER_RECTWIDTH)/2, top+SLIDER_V_HEIGHT/2, (right+left-SLIDER_RECTWIDTH)/2+SLIDER_RECTWIDTH, top+SLIDER_V_HEIGHT/2,GUI_BLACK, GUI_SOLID );
guiDrawLine ( handle,(right+left-SLIDER_RECTWIDTH)/2, top+SLIDER_V_HEIGHT/2, (right+left-SLIDER_RECTWIDTH)/2, bottom +1-SLIDER_V_HEIGHT/2,GUI_BLACK, GUI_SOLID );
guiClearBlock(handle,left,ptSlider->current_pos-SLIDER_V_HEIGHT/2+1 ,
right-1,ptSlider->current_pos+SLIDER_V_HEIGHT/2,
GUI_DARKGRAY,REPLACE_STYLE);
guiDrawLine ( handle,left, ptSlider->current_pos-SLIDER_V_HEIGHT/2+1 , right-1, ptSlider->current_pos-SLIDER_V_HEIGHT/2+1 ,GUI_LIGHTGRAY, GUI_SOLID );
guiDrawLine ( handle,left, ptSlider->current_pos-SLIDER_V_HEIGHT/2+1 , left, ptSlider->current_pos+SLIDER_V_HEIGHT/2,GUI_LIGHTGRAY, GUI_SOLID );
guiDrawLine ( handle,right-1, ptSlider->current_pos-SLIDER_V_HEIGHT/2+1 , right-1, ptSlider->current_pos+SLIDER_V_HEIGHT/2,GUI_BLACK, GUI_SOLID );
guiDrawLine ( handle,left, ptSlider->current_pos+SLIDER_V_HEIGHT/2, right-1, ptSlider->current_pos+SLIDER_V_HEIGHT/2,GUI_BLACK, GUI_SOLID );
}
else
{
guiFillRect (handle,(right+left-SLIDER_RECTWIDTH)/2,top+SLIDER_V_HEIGHT/2,
(right+left-SLIDER_RECTWIDTH)/2+SLIDER_RECTWIDTH,bottom +1-SLIDER_V_HEIGHT/2,GUI_BLACK,GUI_IMAGE );
guiDrawRect ( handle,(right+left-SLIDER_RECTWIDTH)/2,top+SLIDER_V_HEIGHT/2,
(right+left-SLIDER_RECTWIDTH)/2+SLIDER_RECTWIDTH,bottom +1-SLIDER_V_HEIGHT/2,GUI_DARKGRAY,GUI_SOLID);
guiClearBlock(handle,left,ptSlider->current_pos-SLIDER_V_HEIGHT/2+1 ,right-1,ptSlider->current_pos+SLIDER_V_HEIGHT/2,GUI_BLACK,REPLACE_STYLE);
}
}
return 1;
}
//==============================================================================
static int _guiSlider_Action(HNDL handle , WORD Pen_Type, WORD x , WORD y)
{
TGUISLIDER *ptSlider;
TGuiMessage tMessage;
unsigned short left=0,right=0,top=0,bottom=0;
int nCurrent_Old;
if(handle == NULL)
return STATUS_ERR;
ptSlider=(TGUISLIDER *)handle;
if( ptSlider->base.status & CONTROL_NOT_ACTIVE)
return STATUS_ERR;
tMessage.handle = handle;
tMessage.messageType=SLIDER_MOVE;
tMessage.x=0;
tMessage.y=0;
// processCoordinateStart(handle);
left = 0;
right = ptSlider->base.right-ptSlider->base.left;
top = 0;
bottom = ptSlider->base.bottom-ptSlider->base.top;
/// processCoordinateEnd(handle) ;
switch(Pen_Type)
{
case CTRL_SET_STYLE:
_guiSlider_Show( handle);
tMessage.elseInfo=CTRL_SET_STYLE;
break;
case CTRL_GET_FOCUS:
tMessage.elseInfo=CTRL_GET_FOCUS;
break;
case CTRL_DISABLE:
tMessage.elseInfo=CTRL_DISABLE;
break;
case PENDOWN:
tMessage.elseInfo=WIN_PEN_DOWN;
break;
case PENUP:
tMessage.elseInfo=WIN_PEN_UP;
break;
case PENMOVE:
nCurrent_Old = ptSlider->current;
if( !( ptSlider->base.style & SLIDER_VERTICAL))
{
if(x<=(ptSlider->base.left+SLIDER_H_WIDTH/2))
ptSlider->current_pos = (left+SLIDER_H_WIDTH/2);
else if(x>=(ptSlider->base.right-SLIDER_H_WIDTH/2))
ptSlider->current_pos = (right-SLIDER_H_WIDTH/2);
else ptSlider->current_pos = x-ptSlider->base.left;
_guiSlider_Update2( handle);
tMessage.x = ptSlider->current;
}
else
{
if(y<=(ptSlider->base.top+SLIDER_V_HEIGHT/2))
ptSlider->current_pos = (top+SLIDER_V_HEIGHT/2);
else if(y>=(ptSlider->base.bottom-SLIDER_V_HEIGHT/2))
ptSlider->current_pos = (bottom-SLIDER_V_HEIGHT/2);
else ptSlider->current_pos = y-ptSlider->base.top;
_guiSlider_Update2( handle);
tMessage.y = ptSlider->current;
}
if(!_guiSlider_Paint( handle) ) break;
if(nCurrent_Old == ptSlider->current)
break;
tMessage.elseInfo=WIN_PEN_MOVE;
guiEmptyQueue(gpTopWindow->messageQueue);
guiEnqueue(gpTopWindow->messageQueue,&tMessage);
break;
default :
break;
}
return 1;
}
//**************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -