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

📄 uiscroll.c

📁 嵌入工linux开发的源码
💻 C
📖 第 1 页 / 共 3 页
字号:
		{
		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 + -