主题:[原创]分享滚动条的使用
//ScrollBar.c
#include <windows.h>
#include<tchar.h>
#include "resource.h"
#define UNICODE
BOOL CALLBACK DlgProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DlgProc,(LPARAM)NULL);
return 0;
}
BOOL CALLBACK DlgProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
SCROLLINFO si;
int nMin,nMax,nPos;
switch(message)
{
case WM_HSCROLL:
si.cbSize = sizeof(si);
si.fMask = SIF_ALL;
GetScrollInfo(GetDlgItem(hDlg,IDC_SRBAR1),SB_CTL,&si);
switch(LOWORD(wParam))
{
case SB_LEFT:
si.nPos = si.nMin;
break;
case SB_LINELEFT:
si.nPos--;
break;
case SB_PAGELEFT:
si.nPos -= si.nPage;
break;
case SB_THUMBTRACK:
si.nPos = si.nTrackPos;
break;
case SB_PAGERIGHT:
si.nPos += si.nPage;
break;
case SB_LINERIGHT:
si.nPos++;
break;
case SB_RIGHT:
si.nPos = si.nMax;
break;
}
SetScrollInfo(GetDlgItem(hDlg,IDC_SRBAR1),SB_CTL,&si,TRUE);
GetScrollInfo(GetDlgItem(hDlg,IDC_SRBAR1),SB_CTL,&si);
if(si.nPos == si.nMin) SendDlgItemMessage(hDlg,IDC_SRBAR1,SBM_ENABLE_ARROWS,ESB_DISABLE_LTUP,0);
if(si.nPos == si.nMax) SendDlgItemMessage(hDlg,IDC_SRBAR1,SBM_ENABLE_ARROWS,ESB_DISABLE_RTDN,0);
SetDlgItemInt(hDlg,IDC_SRBARPOS1,si.nPos,FALSE);
return TRUE;
case WM_VSCROLL:
nPos = SendDlgItemMessage(hDlg,IDC_SRBAR2,SBM_GETPOS,0,0);
SendDlgItemMessage(hDlg,IDC_SRBAR2,SBM_GETRANGE,(WPARAM)&nMin,(LPARAM)&nMax);
switch(LOWORD(wParam))
{
case SB_TOP:
nPos = nMin;
break;
case SB_LINEUP:
nPos--;
break;
case SB_PAGEUP:
nPos -= 100;
break;
case SB_THUMBTRACK:
nPos = HIWORD(wParam);
break;
case SB_PAGEDOWN:
nPos += 100;
break;
case SB_LINEDOWN:
nPos++;
break;
case SB_BOTTOM:
nPos = nMax;
break;
}
nPos = min(nPos,nMax);
nPos = max(nPos,nMin);
SendDlgItemMessage(hDlg,IDC_SRBAR2,SBM_SETPOS,nPos,TRUE);
if(nPos == nMin) SendDlgItemMessage(hDlg,IDC_SRBAR2,SBM_ENABLE_ARROWS,ESB_DISABLE_LTUP,0);
if(nPos == nMax) SendDlgItemMessage(hDlg,IDC_SRBAR2,SBM_ENABLE_ARROWS,ESB_DISABLE_RTDN,0);
SetDlgItemInt(hDlg,IDC_SRBARPOS2,nPos,FALSE);
return TRUE;
case WM_CTLCOLORSCROLLBAR:
if((HWND)lParam == GetDlgItem(hDlg,IDC_SRBAR1))
return (BOOL)CreateSolidBrush(RGB(80,80,0));
else
return (BOOL)CreateSolidBrush(RGB(0,80,80));
case WM_INITDIALOG:
si.cbSize = sizeof(si);
si.fMask = SIF_ALL;
si.nPage = 100;
si.nMin = 1;
si.nMax = 10000;
si.nPos = 1;
SetScrollInfo(GetDlgItem(hDlg,IDC_SRBAR1),SB_CTL,&si,TRUE);
SendDlgItemMessage(hDlg,IDC_SRBAR1,SBM_ENABLE_ARROWS,ESB_DISABLE_LTUP,0);
SetDlgItemInt(hDlg,IDC_SRBARPOS1,1,FALSE);
SendDlgItemMessage(hDlg,IDC_SRBAR2,SBM_SETRANGE,1,10000);
SendDlgItemMessage(hDlg,IDC_SRBAR2,SBM_ENABLE_ARROWS,ESB_DISABLE_LTUP,0);
SetDlgItemInt(hDlg,IDC_SRBARPOS2,1,FALSE);
return TRUE;
case WM_CLOSE:
EndDialog(hDlg,TRUE);
return TRUE;
}
return FALSE;
}
//resource.h
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by Script1.rc
//
#define IDD_DIALOG1 101
#define IDC_SRBAR1 1001
#define IDC_SRBAR2 1002
#define IDC_SRBARPOS1 1003
#define IDC_SRBARPOS2 1004
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 102
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1004
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
//ScrollBar.rc
//Microsoft Developer Studio generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// Chinese (P.R.C.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
#ifdef _WIN32
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
#pragma code_page(936)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_DIALOG1 DIALOG DISCARDABLE 50, 50, 252, 155
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 10, "System"
BEGIN
SCROLLBAR IDC_SRBAR1,40,70,100,10,WS_TABSTOP
RTEXT "",IDC_SRBARPOS1,40,83,40,12,SS_CENTERIMAGE | WS_BORDER
SCROLLBAR IDC_SRBAR2,179,25,10,100,SBS_VERT | WS_TABSTOP
RTEXT "",IDC_SRBARPOS2,191,25,40,12,SS_CENTERIMAGE | WS_BORDER
END
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
IDD_DIALOG1, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 245
TOPMARGIN, 7
BOTTOMMARGIN, 148
END
END
#endif // APSTUDIO_INVOKED
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
#endif // Chinese (P.R.C.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
#include <windows.h>
#include<tchar.h>
#include "resource.h"
#define UNICODE
BOOL CALLBACK DlgProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DlgProc,(LPARAM)NULL);
return 0;
}
BOOL CALLBACK DlgProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
SCROLLINFO si;
int nMin,nMax,nPos;
switch(message)
{
case WM_HSCROLL:
si.cbSize = sizeof(si);
si.fMask = SIF_ALL;
GetScrollInfo(GetDlgItem(hDlg,IDC_SRBAR1),SB_CTL,&si);
switch(LOWORD(wParam))
{
case SB_LEFT:
si.nPos = si.nMin;
break;
case SB_LINELEFT:
si.nPos--;
break;
case SB_PAGELEFT:
si.nPos -= si.nPage;
break;
case SB_THUMBTRACK:
si.nPos = si.nTrackPos;
break;
case SB_PAGERIGHT:
si.nPos += si.nPage;
break;
case SB_LINERIGHT:
si.nPos++;
break;
case SB_RIGHT:
si.nPos = si.nMax;
break;
}
SetScrollInfo(GetDlgItem(hDlg,IDC_SRBAR1),SB_CTL,&si,TRUE);
GetScrollInfo(GetDlgItem(hDlg,IDC_SRBAR1),SB_CTL,&si);
if(si.nPos == si.nMin) SendDlgItemMessage(hDlg,IDC_SRBAR1,SBM_ENABLE_ARROWS,ESB_DISABLE_LTUP,0);
if(si.nPos == si.nMax) SendDlgItemMessage(hDlg,IDC_SRBAR1,SBM_ENABLE_ARROWS,ESB_DISABLE_RTDN,0);
SetDlgItemInt(hDlg,IDC_SRBARPOS1,si.nPos,FALSE);
return TRUE;
case WM_VSCROLL:
nPos = SendDlgItemMessage(hDlg,IDC_SRBAR2,SBM_GETPOS,0,0);
SendDlgItemMessage(hDlg,IDC_SRBAR2,SBM_GETRANGE,(WPARAM)&nMin,(LPARAM)&nMax);
switch(LOWORD(wParam))
{
case SB_TOP:
nPos = nMin;
break;
case SB_LINEUP:
nPos--;
break;
case SB_PAGEUP:
nPos -= 100;
break;
case SB_THUMBTRACK:
nPos = HIWORD(wParam);
break;
case SB_PAGEDOWN:
nPos += 100;
break;
case SB_LINEDOWN:
nPos++;
break;
case SB_BOTTOM:
nPos = nMax;
break;
}
nPos = min(nPos,nMax);
nPos = max(nPos,nMin);
SendDlgItemMessage(hDlg,IDC_SRBAR2,SBM_SETPOS,nPos,TRUE);
if(nPos == nMin) SendDlgItemMessage(hDlg,IDC_SRBAR2,SBM_ENABLE_ARROWS,ESB_DISABLE_LTUP,0);
if(nPos == nMax) SendDlgItemMessage(hDlg,IDC_SRBAR2,SBM_ENABLE_ARROWS,ESB_DISABLE_RTDN,0);
SetDlgItemInt(hDlg,IDC_SRBARPOS2,nPos,FALSE);
return TRUE;
case WM_CTLCOLORSCROLLBAR:
if((HWND)lParam == GetDlgItem(hDlg,IDC_SRBAR1))
return (BOOL)CreateSolidBrush(RGB(80,80,0));
else
return (BOOL)CreateSolidBrush(RGB(0,80,80));
case WM_INITDIALOG:
si.cbSize = sizeof(si);
si.fMask = SIF_ALL;
si.nPage = 100;
si.nMin = 1;
si.nMax = 10000;
si.nPos = 1;
SetScrollInfo(GetDlgItem(hDlg,IDC_SRBAR1),SB_CTL,&si,TRUE);
SendDlgItemMessage(hDlg,IDC_SRBAR1,SBM_ENABLE_ARROWS,ESB_DISABLE_LTUP,0);
SetDlgItemInt(hDlg,IDC_SRBARPOS1,1,FALSE);
SendDlgItemMessage(hDlg,IDC_SRBAR2,SBM_SETRANGE,1,10000);
SendDlgItemMessage(hDlg,IDC_SRBAR2,SBM_ENABLE_ARROWS,ESB_DISABLE_LTUP,0);
SetDlgItemInt(hDlg,IDC_SRBARPOS2,1,FALSE);
return TRUE;
case WM_CLOSE:
EndDialog(hDlg,TRUE);
return TRUE;
}
return FALSE;
}
//resource.h
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by Script1.rc
//
#define IDD_DIALOG1 101
#define IDC_SRBAR1 1001
#define IDC_SRBAR2 1002
#define IDC_SRBARPOS1 1003
#define IDC_SRBARPOS2 1004
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 102
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1004
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
//ScrollBar.rc
//Microsoft Developer Studio generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// Chinese (P.R.C.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
#ifdef _WIN32
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
#pragma code_page(936)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_DIALOG1 DIALOG DISCARDABLE 50, 50, 252, 155
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 10, "System"
BEGIN
SCROLLBAR IDC_SRBAR1,40,70,100,10,WS_TABSTOP
RTEXT "",IDC_SRBARPOS1,40,83,40,12,SS_CENTERIMAGE | WS_BORDER
SCROLLBAR IDC_SRBAR2,179,25,10,100,SBS_VERT | WS_TABSTOP
RTEXT "",IDC_SRBARPOS2,191,25,40,12,SS_CENTERIMAGE | WS_BORDER
END
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
IDD_DIALOG1, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 245
TOPMARGIN, 7
BOTTOMMARGIN, 148
END
END
#endif // APSTUDIO_INVOKED
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
#endif // Chinese (P.R.C.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED