更新时间:2016-02-22 17:21:18浏览次数:1+次
SetScrollRange(hScrollBar,SB_CTL,0,100,FALSE);
然后就是设置一个滚动条初始默认的位置值,就要设置滚动条值了,默认情况下是0.设置滚动条位置的函数为SetScrollPos。第一个第二个第四个参数都和SetScrollRange一样的意义,第三个就是指定位置值,这个值不要超过滚动条范围哦,不然逻辑不对哦。不要纠结设置错了之后效果怎么样,反正都错了,哪样错一般没有什么意义。不然你也可以自己试试看。下面是程序运行截图:
#include "windows.h"
#include <tchar.h>
TCHAR tip[]=_T("C++技术网http://www.cjjjs.com");
LRESULT CALLBACK WinProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
static HBRUSH hBrush;
static HWND hScrollBar,hTip;
switch (message)
{
case WM_CREATE:
{
hScrollBar = CreateWindow(_T("scrollbar"),_T("C++技术网\r\nhttp://www.cjjjs.com"),WS_CHILD|WS_VISIBLE|SBS_VERT,50,50,20,200,hwnd,(HMENU)1,(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),0);
hTip = CreateWindow(_T("static"),_T("音量:50%"),WS_CHILD|WS_VISIBLE,50,250,200,20,hwnd,(HMENU)1,(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),0);
SetScrollRange(hScrollBar,SB_CTL,0,100,FALSE);//必须先设定好范围,否则无法修改滚动条控件滑块位置
SetScrollPos(hScrollBar,SB_CTL,500,FALSE);//设置初始滚动条控件位置
SetScrollRange(hwnd,SB_VERT,0,100,FALSE);//必须先设定好范围,否则无法修改滚动条控件滑块位置
SetScrollPos(hwnd,SB_VERT,50,FALSE);//设置初始滚动条控件位置
return 0;
}
case WM_VSCROLL:
{
if (lParam!=NULL)
{
//滚动条控件,lParam携带了滚动条控件的窗口句柄
if (hScrollBar==(HWND)lParam)
{
//滚动条控件被操作
UINT iPos = GetScrollPos(hScrollBar,SB_CTL);
switch(LOWORD(wParam))
{
case SB_THUMBPOSITION:
//拖动滚动条释放,拖动的最终位置
iPos = HIWORD(wParam);
break;
case SB_THUMBTRACK:
//正在拖动滚动条,滑块位置实时在变化
iPos = HIWORD(wParam);
break;
case SB_LINEUP://水平的是SB_LINELEFT
iPos = max(iPos-1,0);
break;
case SB_PAGEUP://水平的是SB_PAGERIGHT
iPos = max(iPos-10,0);
break;
case SB_LINEDOWN://水平的是SB_LINERIGHT
iPos = min(iPos+1,99);
break;
case SB_PAGEDOWN://水平的是SB_PAGERIGHT
iPos = min(iPos+10,99);
break;
}
SetScrollPos(hScrollBar,SB_CTL,iPos,FALSE);
wsprintf(tip,_T("音量:%d %%"),iPos);
SetWindowText(hTip,tip);
}
}
else
{
//窗口滚动条
//窗口滚动条被操作,同滚动条控件,只是操作的窗口句柄是窗口以及参数中使用SB_VERT而不是SB_CTL
UINT iPos = GetScrollPos(hwnd,SB_VERT);
switch(LOWORD(wParam))
{
case SB_THUMBPOSITION:
//拖动滚动条释放,拖动的最终位置
iPos = HIWORD(wParam);
break;
case SB_THUMBTRACK:
//正在拖动滚动条,滑块位置实时在变化
iPos = HIWORD(wParam);
break;
case SB_LINEUP://水平的是SB_LINELEFT
iPos = max(iPos-1,0);
break;
case SB_PAGEUP://水平的是SB_PAGERIGHT
iPos = max(iPos-10,0);
break;
case SB_LINEDOWN://水平的是SB_LINERIGHT
iPos = min(iPos+1,99);
break;
case SB_PAGEDOWN://水平的是SB_PAGERIGHT
iPos = min(iPos+10,99);
break;
}
SetScrollPos(hwnd,SB_VERT,iPos,TRUE);
wsprintf(tip,_T("音量:%d %%"),iPos);
SetWindowText(hTip,tip);
}
}
return 0;
case WM_CTLCOLORSCROLLBAR:
{
hBrush = CreateSolidBrush(RGB(255,0,0));
return (LRESULT)hBrush;
}
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
break;//跳出到默认处理
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrev,LPSTR lpCmd,int iShow)
{
TCHAR ClassName[] = _T("MyClass");
TCHAR title1[] = _T("C++技术网http://www.cjjjs.com");
WNDCLASS wndClass;
wndClass.cbClsExtra=0;
wndClass.cbWndExtra=0;
wndClass.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH);
wndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndClass.hInstance = hInstance;
wndClass.lpfnWndProc = WinProc;
wndClass.lpszClassName = ClassName;
wndClass.lpszMenuName=NULL;
wndClass.style=CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS;
if(!RegisterClass(&wndClass))return 0;
HWND hwnd = CreateWindow(ClassName,title1,WS_OVERLAPPEDWINDOW|WS_VSCROLL,10,100,400,400,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,SW_SHOWNORMAL);
MSG msg;
while (GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
相关资讯