更新时间:2016-02-22 15:08:02浏览次数:1+次
我们就在此来分析一下。先看看下面的窗口滚动条和滚动条控件的截图:
HWND hwnd = CreateWindow(ClassName,title1,WS_OVERLAPPEDWINDOW|WS_VSCROLL,10,100,400,400,NULL,NULL,hInstance,NULL);
这句代码让窗口拥有了垂直的窗口滚动条,如果你在加入WS_HSCROLL,则窗口还会拥有水平滚动条。可以看到,窗口增加滚动条,是顺带的事情,并不需要太多的工作。滚动条控件风格是以SBS_开头的,因为SS_是static控件的缩写,所以滚动条就用了三个字母缩写,也是滚动条的英文单词缩写。创建滚动条控件代码如下:
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);
所以,窗口滚动条和滚动条控件在创建时区别很大哦,因为性质不同,一个是窗口的组成部分,如标题栏也是窗口的组成部分,一个是窗口,控件是预定义的特别窗口。
case WM_VSCROLL:
{
if (lParam!=NULL)
{
//滚动条控件,lParam携带了滚动条控件的窗口句柄
if (hScrollBar==(HWND)lParam)
{
//滚动条控件被操作
}
}
else
{
//窗口滚动条
//窗口滚动条被操作
}
}
return 0;
WM_HSCROLL或者WM_VSCROLL消息中的WPARAM参数携带的参数,对于窗口滚动条和滚动条控件来说,使用都是一样的。了解到这些区别和联系后,对于滚动条的使用再也不畏惧了。#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;
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);
CreateWindow(_T("static"),_T("声音:100%"),WS_CHILD|WS_VISIBLE,50,250,100,20,hwnd,(HMENU)1,(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),0);
return 0;
}
case WM_VSCROLL:
{
if (lParam!=NULL)
{
//滚动条控件,lParam携带了滚动条控件的窗口句柄
if (hScrollBar==(HWND)lParam)
{
//滚动条控件被操作
}
}
else
{
//窗口滚动条
//窗口滚动条被操作
}
}
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;
}
相关资讯