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

📄 osdsliderbar.c

📁 MiniWinOuterSM MiniWinOuterSM
💻 C
字号:
#include"osdwindows.h"  
#include"osdcommctrl.h"
typedef struct tagTrackBarData{
    int nMin;
    int nMax;
    int nPos;
	int selStart;
	int selEnd;
    int nLineSize;
    int nPageSize;
//    char sStartTip [TBLEN_TIP + 1];
//    char sEndTip [TBLEN_TIP + 1];
	int mousepos;
}TRACKBARDATA;
static void DrawTrackBar(HWND hwnd)
{
	RECT rc;
	DWORD dwStyle=GetWindowLong(hwnd,GWL_STYLE);
	COLORREF c1,c2;
	PAINTSTRUCT ps;
	HDC hdc=BeginPaint(hwnd,&ps);
	TRACKBARDATA*td=(TRACKBARDATA*)GetWinData(hwnd);
	GetClientRect(hwnd,&rc);
	SendMessage(hwnd,WM_ERASEBKGND,hdc,0);
	c1=GetSysColor(COLOR_BTNHIGHLIGHT);
	c2=GetSysColor(COLOR_BTNSHADOW);
	if(dwStyle&TBS_VERT){
		InflateRect(&rc,-8,-2);
		FillRect(hdc,&rc,(HBRUSH)(COLOR_BTNFACE+1));
		GetClientRect(hwnd,&rc);InflateRect(&rc,-2,-1);
		OffsetRect(&rc,0,-RECTH(&rc)*td->nPos/(td->nMax-td->nMin));
		rc.top=rc.bottom-5;
		DrawEdge(hdc,&rc,BDR_RAISEDOUTER|BDR_RAISEDINNER,BF_RECT);
	}else{
		int i;
		for(i=0;i<rc.right;i+=td->nPageSize)
			VertLine(hdc,1,3,i,clRed);
		InflateRect(&rc,-2,-8);
		FillRect(hdc,&rc,clBtnFace);
		GetClientRect(hwnd,&rc);InflateRect(&rc,-1,-2);
		OffsetRect(&rc,RECTW(&rc)*td->nPos/(td->nMax-td->nMin),0);
		rc.right=rc.left+5;
		DrawEdge(hdc,&rc,BDR_RAISEDOUTER|BDR_RAISEDINNER,BDR_RECT);
	}
	EndPaint(hwnd,&ps);
}
static UINT TrackBarProc(HWND hwnd,UINT msgID,UINT wParam,UINT lParam)
{
	TRACKBARDATA*td=(TRACKBARDATA*)GetWinData(hwnd);
	switch(msgID){
	case WM_CREATE:
		{
			TRACKBARDATA*td=(TRACKBARDATA*)PrMalloc(sizeof(TRACKBARDATA));
			memset(td,0,sizeof(TRACKBARDATA));
			td->nMin=0;td->nMax=100;
			td->nLineSize=1;td->nPageSize=5;
			((WINDOW*)hwnd)->Data=(DWORD)td;
		}break;
	case WM_DESTROY:PrFree(td);break;
	case WM_GETDLGCODE:
		{
			MSG*msg=(MSG*)lParam;
			if(msg&&(msg->message==WM_KEYDOWN)&&
				((msg->wParam==VK_UP)||(msg->wParam==VK_DOWN)) ){
					return DLGC_HASSETSEL;
            }else
				return DLGC_HASSETSEL|DLGC_WANTARROWS;
		}break;
	case WM_PAINT :DrawTrackBar(hwnd);break;
    case WM_SETTEXT:break;
	case WM_KEYDOWN:
		{
			switch(wParam){
			case VK_LEFT:		
			case VK_DOWN:
				SendMessage(hwnd,TBM_SETPOS,1,td->nPos-td->nLineSize);
				break;
			case VK_RIGHT:
			case VK_UP:
				SendMessage(hwnd,TBM_SETPOS,1,td->nPos+td->nLineSize);
				break;
			}
		}break;
	case TBM_SETRANGE:
		td->nMin=LOWORD(lParam);
		td->nMax=HIWORD(lParam);
		if(wParam)InvalidateRect(hwnd,NULL);
		break;
	case TBM_SETPOS:
		if( ((INT)lParam>=td->nMin) && ((INT)lParam<td->nMax)
			&&(td->nPos!=(INT)lParam) ){
			td->nPos=(INT)lParam;
			if(wParam)InvalidateRect(hwnd,NULL);
		}
		break;
	case TBM_GETLINESIZE:	return td->nLineSize;
	case TBM_SETLINESIZE:	
		td->nLineSize=MIN( (INT)lParam,td->nMax-td->nMax);
		break;
	case TBM_GETPAGESIZE:	return td->nPageSize;
	case TBM_SETPAGESIZE:	
		td->nPageSize=MIN( (INT)lParam,td->nMax-td->nMax);
		break;
	case TBM_GETPOS:		return td->nPos;
	case TBM_GETSELEND:		return td->selEnd;
	case TBM_GETSELSTART:	return td->selStart;
	case TBM_SETSEL:
		if(GetWindowLong(hwnd,GWL_STYLE)&TBS_ENABLESELRANGE){
			td->selStart=	MAX( LOWORD(lParam) , td->nMin );
			td->selEnd	=	MIN( HIWORD(lParam) , td->nMax );
			if(wParam)InvalidateRect(hwnd,NULL);
		}break;
	//case TBM_GETPTICS:break;
	default:DefWindowProc(hwnd,msgID,wParam,lParam);break;
	}
	return 0;
}
int RegisterTrackBar(void)
{
	WNDCLASS ci;
	ci.Style=0;	ci.ExStyle=0;
	ci.bkColor=clWindow;
	ci.ClassName="TrackBar";
	ci.WndProc=TrackBarProc;
	ci.bkColor=GetSysColor(COLOR_WINDOW);
	return RegisterClass(&ci);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -