精华内容
下载资源
问答
  • windows滚动条设置
    千次阅读
    2018-09-20 10:07:31

    改变windows系统自带滚动条的样式,对chrome兼容很不错但是不兼容windows请酌情使用。这方法是一个前端大神(NANA7)教我的

    ::-webkit-scrollbar { 
     width: 8px; 
     height: 8px; 
     background:#b9b9b9; 
     } 
     ::-webkit-scrollbar-button { 
     display: none; 
     } 
     ::-webkit-scrollbar-thumb { 
     border-radius: 10px; 
     background: #62ceb7; 
     } 
     ::-webkit-scrollbar-track { 
     border-radius: 10px; 
     background: #b9b9b9; 
     } 
    
    更多相关内容
  • 一般来说,系统只有在一个屏幕放不下的时候,才会在右侧显示滚动条,但是有些朋友喜欢使用滚动条调节屏幕位置,那么win11如何设置滚动条一直显示呢。下面和小编一起来看看操作方法吧! 更多重装系统教程尽在小白...

    ​Win11如何设置滚动条?一般来说,系统只有在一个屏幕放不下的时候,才会在右侧显示滚动条,但是有些朋友喜欢使用滚动条调节屏幕位置,那么win11如何设置滚动条一直显示呢。下面和小编一起来看看操作方法吧!

    更多重装系统教程尽在小白系统重装官网

      第一步,点击任务栏最左边的“windows徽标”打开开始菜单。

      第二步,点开开始菜单里的“设置”。

      第三步,点击进入左边栏的“辅助功能”。

      第四步,打开右边的的“视觉效果”设置。

      第五步,打开“始终显示滚动条”开关就可以了。

    展开全文
  • 浏览器滚动条太宽,太丑,影响日常开发怎么办,改TA 滚动条外观由2部分组成:1.滚动条整体滑轨 2.滚动条滑轨内滑块 在CSS中滚动条由3部分组成 name::-webkit-scrollbar //滚动条整体样式 name::-webkit-scrollbar-...
  • 自定义滚动条3.0

    2021-01-21 13:03:33
    支持鼠标在滚动条子的上下空白区间点击实现上、下定位滚动(模拟windows滚动条) 支持键盘上下方向键,滚动区滚完之后才轮到页面body滚 支持页面刷新后保留滚动条滚动位置(需浏览器支持或打开cookie) 鼠标放于...
  • 自定义滚动条的滚动范围,随窗口的改变滚动条的位置和大小会发生改变,挺不错的效果。 运行环境:Windows/Visual C/C++
  • 仿mac风格滚动条

    2016-01-25 17:51:18
    插件描述:经典仿mac风格滚动条。 参考实例:http://www.jq22.com/jquery-info5677
  • 滚动条由滚动滑块以及两端的滚动箭头组成, 滚动条的作用是当需要显示的内容超过窗口客户区大小时提供上下/左右的翻页使用户能够完整的阅读显示信息Windows滚动条介绍滚动条由滚动滑块以及两端的滚动箭头组成,滚动条...

    滚动条由滚动滑块以及两端的滚动箭头组成, 滚动条的作用是当需要显示的内容超过窗口客户区大小时提供上下/左右的翻页使用户能够完整的阅读显示信息

    Windows滚动条介绍

    滚动条由滚动滑块以及两端的滚动箭头组成, 滚动条的作用是当需要显示的内容超过窗口客户区大小时提供上下/左右的翻页使用户能够完整的阅读显示信息, 滚动条的图示:

    dd5146d67c43351b8a70cbf414318a1e.png

    滚动条理论基础

    1>. 上下滚动?

    以垂直方向的滚动条为例, 当用户向下滚动滚动条时目的是想看到下方更多的的信息, 因此我们需要将下方的信息显示出来, 如何显示更多的信息?

    解决方案: 将不需要被显示的信息显示到客户区外

    , 令信息自动被Windows截掉, 图示说明:

    5196c6228e9bab2f7b4f67be2f1b0851.png

    由图示看出, 当用户向下翻动滚动条实际上我们是将起始输出部分的y坐标设为负数, 使已经显示过的信息输出到客户区的上部, 我们知道, 输出到客户区外部的信息会被Windows自动截掉, 所以用户不会再次看到已经显示过的信息, 取而代之的就是下方等待显示的信息, 上翻以及左右翻动的显示思路与下翻相同, 不再介绍。

    2>. 如何创建一个带有滚动条的窗口?

    创建带有水平/垂直的滚动条的窗口十分简单, 在CreateWindow函数中说明下即可, CreateWindow函数的原型回顾:

    69c5a8ac3fa60e0848d784a6dd461da6.png

    HWND CreateWindow(     LPCTSTR lpClassName,//

    窗口类名称

    LPCTSTR lpWindowName, //

    窗口标题

    DWORD dwStyle, //

    窗口样式

    int

    x, //窗口初始x坐标    int

    y, //窗口初始y坐标    int

    nWidth, //窗口初始x方向尺寸    int

    nHeight, //窗口初始y方向尺寸    HWND hWndParent, //

    父窗口句柄

    HMENU hMenu, //

    窗口菜单句柄

    HANDLE hlnstance, //

    程序实例句柄

    LPVOID lpParam //

    创建参数

    );

    69c5a8ac3fa60e0848d784a6dd461da6.png

    要窗口带有滚动条的窗口, 只需要在第三个参数

    DWORD dwStyle, //

    窗口样式

    也就是在窗口样式的属性中使用位或( | )运算对相关的标识符进行组合即可得到一个带有垂直/水平滚动条的窗口,

    WS_HSCROLL //水平滚动条的标识符

    WS_VSCROLL //垂直滚动条的标识符

    例如要创建一个既含有垂直滚动条又含有水平滚动条的组合:

    WS_OVERLAPPEDWINDOW | WS_VSCROLL | WS_HSCROLL

    3>. 对于滚动条, Windows需要做哪些事?

    当带有滚动条的窗口创建好后, Windows就会做一些必要的处理来协助我们更好的使用滚动条, Windows需要做的事情如下:

    1>. 处理滚动条中的所有鼠标消息;

    2>. 当用户单击滚动条时提供被单击部分的轻微闪烁;

    3>. 当用户拖动滑块时在滚动条内移动滑块;

    4>. 当窗口大小被调整时, 自动调整滚动条的长度;

    5>. 向滚动条所在的窗口发送滚动条的相关消息。

    4>. 我们要做的事情:

    相对于系统,我们需要做的事情已经较为轻松了

    ,

    主要有4项任务

    :

    1>. 初始化滚动条的位置和滚动条的范围;

    2>. 处理系统发来的消息;

    3>. 根据发来的消息重置滑块的位置;

    4>. 根据滚动条消息重绘客户区显示的内容。

    5>. 将会收到哪些滚动条消息?

    滚动条消息来源同其他消息一样, 伴随着wParam与lParam消息机制, 当窗口为父窗口时消息的来源为wParam, 此时可忽略lParam的值, lParam用于子窗口消息。

    wParam参数分为两部分,&n

    bsp;高位字与低位字, 其中高位字代表用户松开鼠标键时滑块的最终位置, 低位字上代表鼠标在滚动条上的动作, 以一个值的形式表现出来, 同样, 为了方便记忆, 有不同的标识符对这些值进行区分, 这些标识符定义在WINUSER.H头文件中, 以SB_开头, 有关滚动条的消息标识符如下:

    69c5a8ac3fa60e0848d784a6dd461da6.png

    #define

    SB_LINEUP 0 //上翻一个单位#define

    SB_LINELEFT 0 //左翻一个单位

    #define SB_LINEDOWN 1 //下翻一个单位

    #define SB_LINERIGHT 1 //右翻一个单位

    #define SB_PAGEUP 2 //上翻一页

    #define SB_PAGELEFT 2 //左翻一页

    #define SB_PAGEDOWN 3 //下翻一页

    #define SB_PAGERIGHT 3 //右翻一页

    #define SB_THUMBPOSITION 4 //当鼠标放下滑块时

    #define SB_THUMBTRACK 5 //移动滑块时

    #define SB_TOP 6 //滑块到了顶端

    #define SB_LEFT 6 //滑块到了左端

    #define SB_BOTTOM 7 //滑块到了底端

    #define SB_RIGHT 7 //滑块到了右端

    #define SB_ENDSCROLL 8 //释放鼠标

    69c5a8ac3fa60e0848d784a6dd461da6.png

    6>.  需要使用到的新函数:

    ①. SetScrollRange

    SetScrollRange函数的作用是设置所指定滚动条范围的最小值和最大值, 其函数的原型如下:

    69c5a8ac3fa60e0848d784a6dd461da6.png

    BOOL SetScrollRange(     HWND hWnd,//

    窗口句柄

    int nBar, //被设置的滚动条类型

    int nMinPos, //滚动条的最小位置

    int nMaxPos, //滚动条的最大位置

    BOOL bRedraw  //

    重绘标志

    );

    69c5a8ac3fa60e0848d784a6dd461da6.png

    参数二int nBar为被设置的滚动条类型, SB_HORZ表示该窗口的水平滚动条, SB_VERT表示垂直滚动条;

    参数四BOOL bRedraw指定滚动条是否被重绘以反映变化, 当参数为TRUE, 滚动条被重绘, FALSE则不被重绘。

    ②. SetScrollPos

    SetScrollPos函数的作用是设置所指定滚动条中的滚动按钮的位置, 函数原型:

    int

    SetScrollPos(     HWND hWnd,

    //

    窗体句柄

    int

    nBar,        //被设置的滚动条类型    int

    nPos,      //滚动条的新位置BOOL bRedraw//

    重绘标志);

    实战滚动条

    下面我们尝试着输出一些文字, 使其上下、左右均超过客户区的尺寸, 这样我们就可以实际练习下水平滚动条以及垂直滚动条了,  我们准备了很多行文字, 笔者也不知道到底有多少行, 而且最长的那行文字有多少个也不知道, 我们把他放在一个text.h头文件中, 并计算他到底有多少行以及最长的那行有多少字, 由于文字行数较多, 这里将它在代码框里折叠显示, 定义的头文件如下:

    cdec0645add3fc3c328197dda5c76203.png

    View Code - text.h

    在这个头文件中, 其中有两句是十分重要的, 一是计算总行数:

    #define

    NUMLINES ( (int)(sizeof(statement) / sizeof(statement[0]) ) ) //

    计算总行数

    另一个是计算最长串字符个数的函数GetMaxLength, 该函数的定义如下:

    69c5a8ac3fa60e0848d784a6dd461da6.png

    int

    GetMaxLength() {/*

    *计算statement所有句子中最长语句的长度 *返回值: int GetMaxLength(void) -> int

    */

    int maxLength = 0

    ;int

    i ;for

    ( i = 0; i < NUMLINES; i++) {

    if( wcslen(statement[i]) >maxLength ) maxLength

    =wcslen(statement[i]) ; }returnmaxLength ; }

    69c5a8ac3fa60e0848d784a6dd461da6.png

    下面编写我们的源文件, LearnScroll.c, 先看一下完整的代码, 稍后我们详细解释, 代码如下:

    69c5a8ac3fa60e0848d784a6dd461da6.png

    1 #include

    2 #include"

    text.h"

    3

    4

    LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ) ; //

    声明窗口过程函数5

    6 int

    WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int

    iCmdShow )7

    {8

    static TCHAR szAppName[] = TEXT("

    LearnScroll") ;

    9 HWND hwnd ;

    10 MSG msg ;

    11 WNDCLASS wndclass ;

    12

    13 //

    窗口类成员属性

    14 wndclass.lpfnWndProc =WndProc ;15

    wndclass.style = CS_HREDRAW |CS_VREDRAW ;

    16

    wndclass.hInstance =hInstance ;

    17

    wndclass.lpszClassName =szAppName ;

    18

    wndclass.lpszMenuName =NULL ;19

    wndclass.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH) ;

    20

    wndclass.hCursor =LoadCursor(NULL, IDI_APPLICATION) ;

    21

    wndclass.hIcon =LoadIcon(NULL, IDC_ARROW) ;

    22 wndclass.cbClsExtra = 0

    ;23

    wndclass.cbWndExtra = 0;24

    25 //

    注册窗口类

    26 if

    ( !RegisterClass(&wndclass) )27

    {28

    MessageBox( NULL, TEXT("

    无法注册窗口类!

    "), TEXT("

    错误"

    ), MB_OK |MB_ICONERROR ) ;29

    return 0

    ;30

    }31

    32 //

    创建窗口

    33 hwnd =CreateWindow(

    34 szAppName, TEXT("滚动条示例"

    ),35

    WS_OVERLAPPEDWINDOW | WS_VSCROLL |WS_HSCROLL,

    36 CW_USEDEFAULT, CW_USEDEFAULT,

    37 CW_USEDEFAULT, CW_USEDEFAULT,

    38 NULL, NULL, hInstance, NULL

    39 ) ;

    40

    41 //

    显示窗口

    42 ShowWindow( hwnd, iCmdShow ) ;43

    UpdateWindow( hwnd ) ;44

    45 //

    获取、翻译、分发消息

    46 while

    ( GetMessage( &msg, NULL, 0, 0) )47

    {48

    TranslateMessage( &msg ) ;

    49

    DispatchMessage( &msg ) ;

    50

    }51

    52 return

    msg.wParam ;53

    }54

    55 LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )56

    {57

    static int

    cxChar, cxCaps, cyChar, cyClient, cxClient, iVscrollPos, iHscrollPos ;58

    //cxChar:平均字符宽度; cxCaps: 大写字母平均宽度; cyChar: 字符高; cyClient、cxClient: 客户区y、x方向尺寸;59

    //

    iVscrollPos: 竖直方向滚动条滑块位置; iHscrollPos: 水平方向滚动条滑块位置

    60

    61 HDC hdc ;

    62 RECT rect ; //

    记录客户区RECT结构

    63 int

    i, x, y; //i循环控制, x记录水平方向坐标, y竖直方向坐标

    64 PAINTSTRUCT ps ;

    65 TEXTMETRIC tm ;

    66

    67 switch

    (message)68

    {69

    case WM_CREATE: //

    处理WM_CREATE消息

    70 hdc =GetDC(hwnd) ;71

    GetTextMetrics( hdc, &tm ) ; //

    获取系统字体信息72

    cxChar = tm.tmAveCharWidth ; //

    获取平均宽度73

    cxCaps = (tm.tmPitchAndFamily & 1

    ? 3 : 2) * cxChar / 2 ; //大写字母平均宽度

    74

    cyChar = tm.tmHeight + tm.tmExternalLeading ; //

    字符高度75

    ReleaseDC( hwnd, hdc );76

    77

    SetScrollRange( hwnd, SB_VERT, 0

    , NUMLINES - 1

    , FALSE ) ; //设置竖直滚动条范围的最小值和最大值78

    SetScrollRange( hwnd, SB_HORZ, 0

    , GetMaxLength() - 1

    , FALSE ) ; //设置水平滚动条范围的最小值和最大值79

    SetScrollPos( hwnd, SB_VERT, iVscrollPos, TRUE ) ; //

    设置竖直滚动条中的滚动按钮的位置

    80

    SetScrollPos( hwnd, SB_HORZ, iHscrollPos, TRUE ) ; //

    设置水平定滚动条中的滚动按钮的位置

    81

    82 return

    0;

    83

    84 case

    WM_SIZE: //处理WM_SIZE85

    GetClientRect( hwnd, &rect ) ;

    86

    cyClient = rect.bottom ; //

    得到客户区y方向尺寸87

    cxClient = rect.right ; //

    得到客户区x方向尺寸88 return

    0;

    89

    90 case

    WM_VSCROLL: //处理垂直滚动条消息91

    switch

    ( LOWORD(wParam) )92

    {93

    case SB_LINEUP: //

    上翻一行

    94 iVscrollPos -= 1;95

    break;

    96

    97 case

    SB_LINEDOWN: //下翻一行98

    iVscrollPos += 1;99

    break;

    100

    101 case

    SB_PAGEUP: //向上翻一整页

    102

    iVscrollPos -= cyClient /cyChar ;

    103

    break;

    104

    105 case

    SB_PAGEDOWN: //向下翻一整页

    106

    iVscrollPos += cyClient /cyChar ;

    107

    break;

    108

    109 case

    SB_THUMBPOSITION: //拖动滑块滑块被放下时

    110 iVscrollPos =HIWORD(wParam) ;111

    break;112

    113 default

    :114

    break;

    115 }

    116 iVscrollPos = max( 0

    , min(iVscrollPos, NUMLINES -1) ) ;

    117 if

    ( iVscrollPos != GetScrollPos(hwnd, SB_VERT) ) //

    当滑块位置改变时重置滑块位置

    118 {

    119 SetScrollPos( hwnd, SB_VERT, iVscrollPos, TRUE ) ;120

    InvalidateRect( hwnd, NULL, TRUE ) ; //

    使客户区无效等待重绘121 }

    122 return

    0;

    123

    124 case

    WM_HSCROLL: //处理水平滚动条消息125

    switch

    ( LOWORD(wParam) )126

    {127

    case SB_LINELEFT: //

    左翻一行

    128 iHscrollPos -= 1;129

    break;

    130

    131 case

    SB_LINERIGHT: //右翻一行132

    iHscrollPos += 1;133

    break;

    134

    135 case

    SB_PAGELEFT: //左翻一页136

    iHscrollPos -= cxClient /cxCaps ;

    137

    break;

    138

    139 case

    SB_PAGERIGHT: //右翻一页140

    iHscrollPos += cxClient /cxCaps ;

    141

    break;

    142

    143 case

    SB_THUMBPOSITION: //拖动滑块滑块被放下时

    144 iHscrollPos =HIWORD(wParam) ;145

    break;146

    147 default

    :148

    break;

    149 }

    150 iHscrollPos = max( 0

    , min( iHscrollPos, GetMaxLength() -1) ) ;151 if

    ( iHscrollPos !=GetScrollPos( hwnd, SB_HORZ ) )

    152

    {153

    SetScrollPos( hwnd, SB_HORZ, iHscrollPos, TRUE ) ;

    154

    InvalidateRect( hwnd, NULL, TRUE ) ;

    155 }

    156

    return 0

    ;157

    158 case

    WM_PAINT: //处理WM_PAINT消息159

    hdc = BeginPaint( hwnd, &ps ) ;

    160

    161 for

    ( i= 0; i < NUMLINES; i++)

    162 {

    163 y = cyChar * ( i -iVscrollPos ) ;

    164 x = cxCaps * ( 0

    -iHscrollPos ) ;165

    TextOut( hdc, x, y, statement[i], lstrlen(statement[i]) ) ; //

    输出文字

    166 }

    167

    168 EndPaint( hwnd, &ps ) ;169 return

    0;

    170

    171 case

    WM_DESTROY: //处理WM_DESTROY消息172

    PostQuitMessage( 0) ;173

    return 0

    ;174

    }175

    176 return

    DefWindowProc( hwnd, message, wParam, lParam ) ;

    177 }

    69c5a8ac3fa60e0848d784a6dd461da6.png

    编译运行, 看下成果:

    b90ab85e348eb1fcf694136a7397e26e.png

    看起来还算不错, 当滚动条向下翻时文字就随着向上滚动, 使下面的文字能够显示出来, 水平的滚动条也是这样, 下面详细说说重点部分的代码:

    1>. 创建一个带有垂直滚动条以及水平滚动条的窗口:

    69c5a8ac3fa60e0848d784a6dd461da6.png

    hwnd =CreateWindow( szAppName, TEXT(

    "滚动条示例

    "), WS_OVERLAPPEDWINDOW

    | WS_VSCROLL |WS_HSCROLL, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL ) ;

    69c5a8ac3fa60e0848d784a6dd461da6.png

    2>. 设置垂直滚动条、水平滚动条的范围以及初始位置:

    SetScrollRange( hwnd, SB_VERT, 0

    , NUMLINES - 1

    , FALSE ) ;   //

    设置垂直滚动条范围的最小值和最大值

    SetScrollRange( hwnd, SB_HORZ, 0

    , GetMaxLength() - 1

    , FALSE ) ; //

    设置水平滚动条范围的最小值和最大值

    SetScrollPos( hwnd, SB_VERT, iVscrollPos, TRUE ) ;       //

    设置垂直滚动条中的滚动按钮的位置

    SetScrollPos( hwnd, SB_HORZ, iHscrollPos, TRUE ) ;       //

    设置水平定滚动条中的滚动按钮的位置

    可以看出, 垂直滚动条的范围为0到行数-1, 这就意味这, 每下翻/上翻一个单位, 客户区显示的文字就会向上//向下滚动一行;

    水平滚动条的范围为0到最长那行文字的长度-1,

    每左翻/右翻一个单位, 客户区显示的文字就会向右//向左滚动一个字符的宽度。

    3>. 当窗口大小调整时重新获取客户区尺寸数据:

    case WM_SIZE: //处理WM_SIZE

    GetClientRect( hwnd, &rect ) ;   cyClient

    = rect.bottom ;   //得到客户区y方向尺寸   cxClient = rect.right ; //

    得到客户区x方向尺寸

    return 0

    ;

    4>. 处理滚动条消息:

    case WM_VSCROLL: //处理水平滚动条消息

    switch( LOWORD(wParam) )   {case

    滚动条消息:           [处理滚动条消息]   }

    5>. 重置滚动条滑块位置:

    69c5a8ac3fa60e0848d784a6dd461da6.png

    iVscrollPos = max( 0

    , min(iVscrollPos, NUMLINES -1

    ) ) ; //

    确保滚动条的位置在设置的范围内。

    if

    ( iVscrollPos != GetScrollPos(hwnd, SB_VERT) )     //

    当滑块位置改变时重置滑块位置

    { SetScrollPos( hwnd, SB_VERT, iVscrollPos, TRUE ) ; InvalidateRect( hwnd, NULL, TRUE ) ;

    //使客户区无效等待重绘}

    return

    0 ;

    69c5a8ac3fa60e0848d784a6dd461da6.png

    这一句注释上已经描述的是否清楚了, 当滑块位置改变时重置滑块位置并使客户区无效等待重绘。

    6>. 处理重绘消息:

    69c5a8ac3fa60e0848d784a6dd461da6.png

    case

    WM_PAINT: //处理WM_PAINT消息   hdc = BeginPaint( hwnd, &ps ) ;

    for( i= 0

    ; i < NUMLINES; i++)   {   y

    = cyChar * ( i -iVscrollPos ) ;   x

    = cxCaps * ( 0 -iHscrollPos ) ;   TextOut( hdc, x, y, statement[i], lstrlen(statement[i]) ) ;//

    输出文字

    }   EndPaint( hwnd,

    &ps ) ;return

    0 ;

    69c5a8ac3fa60e0848d784a6dd461da6.png

    目的是重绘客户区内容并使其有效, 注意这里的

    y = cyChar * ( i -iVscrollPos ) ; x

    = cxCaps * ( 0 - iHscrollPos ) ;

    这是计算从起始输出的坐标, 每行对应一个y值, 当滑块的位置向下滚动1时, y的值就会减去一个字符的高度, 使该行显示到窗口外部, 这样新的一行就会被显示出来, 同样, 翻动一整夜的计算思路同一行; x是指水平起始输出位置, 计算思路相同。

    这样, 一个简单的带有滚动条的窗口就完成了! 看起来挺不错的, 不是吗? 可以先稍微休息一下, 下面我们还有事要做。

    但这还不够好!

    在上面我们使用的滚动条中, 虽说能够滚动文字, 但是依然存在许多小问题:

    问题一

    :滑块的大小是固定的, 而我见到的应用软件滑块能够根据内容的多少自动调整滑块大小;

    问题二:

    当我拖动滑块时只有当滑块释放时页面才会滚动, 我想要的是当滑块被拖动时页面也同样跟着滚动;

    问题三:

    当滑块滚动到底部时最后一行显示到了客户区顶部, 下面留有一大片的空白, 而我并不需要保留下面的空白, 也就是说最后一行在滑块拖动到底部后它只显示在底部就行。

    幸运的是, 我们依然有解决方案:

    问题一:

    自行设置滑块的大小;

    问题二:

    根据SB_THUMBTRACK消息处理页面的滚动, SB_THUMBTRACK消息是当滑块被拖动时就会源源不断的发来;

    问题三:重新设置滚动的范围。

    更好的滚动条:

    在使用更好的滚动条之前我们首先要认识三个新函数: SetScrollInfo、GetScrollInfo以及ScrollWindow.

    1>. SetScrollInfo

    函数功能: 用于设置滚动条的相关参数, 包括滚动范围的最大值和最小值, 页面大小, 滑块的位置, 函数的原型:

    int

    SetScrollInfo(     HWND hWnd;

    //窗口句柄

    int fnBar, //指定被设定参数的滚动条的类型

    LPSCROLLINFO lpsi, //

    指向一个SCROLLINFO结构

    BOOL fRedraw //

    重绘标志

    ) ;

    穿插讲述:

    什么是SCROLLINFO结构?

    SCROLLINFO的成员记录有关滚动条的信息, 其结构定义如下

    :

    69c5a8ac3fa60e0848d784a6dd461da6.png

    typedef structtagSCROLLINFO   {     UINT cbSize ;//

    设置为sizeof (SCROLLINFO), 表示该结构的大小

    UINT fMask ;     //

    要设置或获取的值

    int

    nMin ;   //滚动条范围的最小值    int

    nMax ;   //滚动条范围的最大值    UINT nPage ;    //

    页面大小

    int

    nPos ;   //当前位置    int

    nTrackPos ; //当前追踪位置  }SCROLLINFO;

    69c5a8ac3fa60e0848d784a6dd461da6.png

    成员一UINT cbSize :

    该参数必须在函数调用之前设置,  cbSize表示该结构的大小, 用sizeof (SCROLLINFO)表示即可。

    成员二UINT fMask:

    用于指定指定结构中的哪些成员是有效的, 通过位或运算进行组合

    ,可组合的标识符如下

    :

    69c5a8ac3fa60e0848d784a6dd461da6.png

    SIF_ALL //整个结构都有效SIF_DISABLENOSCROLL

    //禁用滚动条

    SIF_PAGE      //

    用于指定或获取页面的大小, 在SetScrollInfo中用于设定页面的大小, 在GetScrollInfo用于获取页面的大小

    SIF_POS

    //

    设置/取得滚动条滑块当前的位置

    SIF_RANGE

    //滚动条的范围

    SIF_TRACKPOS //仅在GetScrollInfo函数中使用, 并且仅用在处理SB_THUMBTRACK或者SB_THUMBPOSITION的WM_VSCROLL消息或WM_HSCROLL消息时使用。取得当前滑块的跟踪位置。

    69c5a8ac3fa60e0848d784a6dd461da6.png

    穿插讲述完毕! 继续讲解第二个新函数。

    2>. GetScrollInfo

    用于取得滚动条的相关参数, 包括滚动范围的最大值和最小值, 页面大小, 滑块的位置, 函数的原型:

    BOOL GetScrollInfo(     HWND hWnd,//

    窗口句柄

    int

    fnBar, //指定被设定参数的滚动条的类型    LPSCROLLINFO lpsi //

    指向一个SCROLLINFO结构

    );

    3>. ScrollWindow

    该函数的作用是滚动所指定的窗口客户区域内容, 原型如下:

    69c5a8ac3fa60e0848d784a6dd461da6.png

    BOOL ScrollWindow(     HWND hWnd,//

    窗口句柄

    int

    XAmount, //指定水平滚动的距离  int

    YAmount, //指定垂直滚动的距离

    CONST RECT *IpRect, //

    指向RECT结构的指针, 该结构指定了将要滚动的客户区范围。若此参数为NULL,则整个客户区域将被滚动。

    CONST RECT *lpClipRect //

    指向RECT结构的指针, 该结构指定了要滚动的裁剪区域。只有这个矩形中才会被滚动。

    );

    69c5a8ac3fa60e0848d784a6dd461da6.png

    好了, 说的差不多够多了, 研究代码才是更好的沟通方式, 下面我们实际实践一下更好的滚动条, 更多的细节请在代码中体会, 限于篇幅的长度, 这里将WinMain函数折叠显示, 仅将窗口过程函数部分的代码全部显示出来:

    cdec0645add3fc3c328197dda5c76203.png

    View Code - Function - WinMain

    窗口过程部分的代码:

    69c5a8ac3fa60e0848d784a6dd461da6.png

    1

    LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )

    2 {

    3 static int

    cxChar, cxCaps, cyChar, cyClient, cxClient, iVscrollPos, iHscrollPos ;

    4 //

    cxChar:平均字符宽度; cxCaps: 大写字母平均宽度; cyChar: 字符高; cyClient、cxClient: 客户区y、x方向尺寸;

    5

    //iVscrollPos: 竖直方向滚动条滑块位置; iHscrollPos: 水平方向滚动条滑块位置

    6 HDC hdc ;

    7 RECT rect ; //

    记录客户区RECT结构

    8 int

    i, x, y; //i循环控制, x记录水平方向坐标, y竖直方向坐标

    9 PAINTSTRUCT ps ;

    10 TEXTMETRIC tm ;

    11 SCROLLINFO si ; //

    SCROLLINFO结构对象

    12 int

    iMaxLength ; //所有语句中的最大长度

    13

    14

    iMaxLength = GetMaxLength() ; //

    取得最大长度15

    16 switch

    (message)17

    {18

    case WM_CREATE: //

    处理WM_CREATE消息

    19 hdc =GetDC(hwnd) ;20

    GetTextMetrics( hdc, &tm ) ; //

    获取系统字体信息21

    cxChar = tm.tmAveCharWidth ; //

    获取平均宽度22

    cxCaps = (tm.tmPitchAndFamily & 1

    ? 3 : 2) * cxChar / 2 ; //大写字母平均宽度

    23

    cyChar = tm.tmHeight + tm.tmExternalLeading ; //

    字符高度24

    ReleaseDC( hwnd, hdc );25

    26 return

    0;

    27

    28 case

    WM_SIZE: //处理WM_SIZE29

    GetClientRect( hwnd, &rect ) ;

    30

    cxClient =LOWORD (lParam) ;

    31

    cyClient =HIWORD (lParam) ;

    32

    33 //

    设置垂直滚动条相关参数

    34 si.cbSize = sizeof(si) ;35

    si.fMask = SIF_RANGE |SIF_PAGE ;

    36

    si.nMin = 0;

    37

    si.nMax = NUMLINES - 1;38

    si.nPage = cyClient /cyChar ;

    39

    SetScrollInfo(hwnd, SB_VERT, &si, TRUE) ;

    40

    41 //

    设置水平滚动条相关参数

    42 si.cbSize = sizeof(si) ;43

    si.fMask = SIF_RANGE |SIF_PAGE ;

    44

    si.nMin = 0;

    45 si.nMax = 2

    +iMaxLength ;46

    si.nPage = cxClient /cxCaps ;

    47

    SetScrollInfo(hwnd, SB_HORZ, &si, TRUE) ;

    48

    49 return

    0;

    50

    51 case

    WM_VSCROLL: //处理垂直滚动条消息52

    si.cbSize = sizeof(si) ;53

    si.fMask =SIF_ALL ;54

    GetScrollInfo(hwnd, SB_VERT, &si) ;

    55

    56

    iVscrollPos = si.nPos ; //

    记录当前滑块位置57

    58 switch

    ( LOWORD(wParam) ) //处理滚动条消息

    59 {

    60 case

    SB_TOP: //到达顶部61

    si.nPos =si.nMin ;62 break

    ;63

    64 case

    SB_BOTTOM: //到达底部65

    si.nPos =si.nMax ;66 break

    ;67

    68 case

    SB_LINEUP: //上翻一行69

    si.nPos -= 1;70

    break;

    71

    72 case

    SB_LINEDOWN: //下翻一行73

    si.nPos += 1;74

    break;

    75

    76 case

    SB_PAGEUP: //向上翻一整页

    77 si.nPos -=si.nPage ;78 break;79

    80 case

    SB_PAGEDOWN: //向下翻一整页81

    si.nPos +=si.nPage ;82 break;83

    84 case

    SB_THUMBTRACK: //移动滑块时85

    si.nPos =si.nTrackPos ;86

    break;87

    88 default

    :89

    break;

    90 }

    91 si.fMask =SIF_POS ;

    92

    SetScrollInfo(hwnd, SB_VERT, &si, TRUE) ; //

    重置滑块位置

    93

    GetScrollInfo(hwnd, SB_VERT, &si) ;

    94 if( si.nPos !=iVscrollPos )95 {96

    ScrollWindow(hwnd, 0

    , cyChar * (iVscrollPos - si.nPos), NULL, NULL) ; //

    滚动内容97

    UpdateWindow(hwnd) ;98

    }

    99 return

    0;

    100

    101 case

    WM_HSCROLL: //处理水平滚动条消息102

    si.cbSize = sizeof(si) ;103

    si.fMask =SIF_ALL ;104

    GetScrollInfo (hwnd, SB_HORZ, &si) ;

    105

    106

    iHscrollPos = si.nPos ; //

    记录当前滑块位置107

    switch

    ( LOWORD(wParam) )108

    {109

    case SB_TOP: //

    到达顶部

    110 si.nPos =si.nMin ;111 break

    ;112

    113 case

    SB_BOTTOM: //到达底部114

    si.nPos =si.nMax ;115 break

    ;116

    117 case

    SB_LINELEFT: //左翻一行118

    si.nPos -= 1;119

    break;

    120

    121 case

    SB_LINERIGHT: //右翻一行122

    si.nPos += 1;123

    break;

    124

    125 case

    SB_PAGELEFT: //左翻一页126

    si.nPos -=si.nPage ;127 break;128

    129 case

    SB_PAGERIGHT: //右翻一页130

    si.nPos +=si.nPage ;131 break;132

    133 case

    SB_THUMBTRACK: //移动滑块时134

    si.nPos =si.nTrackPos ;135

    break;136

    137 default

    :138

    break;

    139 }

    140 si.fMask =SIF_POS ;

    141

    SetScrollInfo(hwnd, SB_HORZ, &si, TRUE) ; //

    重置滑块位置

    142

    GetScrollInfo(hwnd, SB_HORZ, &si) ;

    143 if( si.nPos !=iHscrollPos )144 {145

    ScrollWindow(hwnd, cxCaps * (iHscrollPos - si.nPos), 0

    , NULL, NULL) ; //滚动内容146 UpdateWindow(hwnd) ;147

    }

    148 return

    0;

    149

    150 case

    WM_PAINT: //处理WM_PAINT消息151

    hdc = BeginPaint( hwnd, &ps ) ;

    152

    153 si.cbSize = sizeof(si) ;154

    si.fMask =SIF_POS ;155

    GetScrollInfo(hwnd, SB_VERT, &si) ;

    156 iVscrollPos = si.nPos ; //

    获取当前垂直滑块位置

    157

    158

    GetScrollInfo(hwnd, SB_HORZ, &si) ;

    159

    iHscrollPos = si.nPos ; //

    获取当前水平滑块位置160

    161 for

    ( i= 0; i < NUMLINES; i++)

    162 {

    163 y = cyChar * ( i -iVscrollPos ) ;

    164 x = cxCaps * ( 0

    -iHscrollPos ) ;165

    TextOut( hdc, x, y, statement[i], lstrlen(statement[i]) ) ; //

    输出文字

    166 }

    167

    168 EndPaint( hwnd, &ps ) ;169 return

    0;

    170

    171 case

    WM_DESTROY: //处理WM_DESTROY消息172

    PostQuitMessage( 0) ;173

    return 0

    ;174

    }175

    176 return

    DefWindowProc( hwnd, message, wParam, lParam ) ;

    177 }

    69c5a8ac3fa60e0848d784a6dd461da6.png

    看一下成果:

    1a67c94e119b80bf00e2fb4900b81896.png

    嗯, 这样看起来就好多了, 如果嫌行间距太挤的话我们可以调节字符的高度

    cyChar = tm.tmHeight + tm.tmExternalLeading ; //

    字符高度

    使行间距增大些, 这样看起来会更舒服。

    好了, 到这里, 一个较为完善的滚动条就完成了。

    --------------------

    wid, 2012.10.31

    展开全文
  • 一、去除滚动条方法 ... 样式中需要对IE6、7及其它浏览器用hack辨别,这是因为当页面拉到下面时如果html或body被overflow:hidden,透明弹层下面的页面就会被部分正常隐藏,...windows平台下滚动条的宽度为17px,linux平
  • ASP.Net的GridView本身不带滚动条,可通过Panel实现。但是Windows自带的横向滚动条只支持显示在下方,为了使用方便,需要在上下方都显示横向滚动条
  • 摘要:VC/C++源码,控件相关,自绘控件,CListCtrl,滚动条 C++ MFC 重绘CListCtrl、CTreeCtrl滚动条源码。#define SCROLLBAR_NORMAL_MINIMUM 45 //经验值,当Scrollbar宽度/高度小于这一数值时需要特殊处理,保证与系统的...
  • 滚动条设置控件格式

    千次阅读 2021-06-13 07:30:02
    excel2013中插入滚动条控件滚动窗格如何设置我想在excel中插入滚动条,设置为能够像excel...excel滚动条设置控件格式里面对象位置无法选大小、...这里的改变是指如果你的单元格行高或者列宽小于控件的行高和列宽 控...

    excel2013中插入滚动条控件滚动窗格如何设置

    我想在excel中插入滚动条,设置为能够像excel自带的滚动条那样滚动单元点击开发工具-插入,选择滚动条。 Excel版本参考:2013

    点击开发工具-插入,滚动条;

    5eb1328ce03fe9b8517da1548dd4b363.png

    右击滚动条-设置控件格式,单元格链接(选择一个单元格),确定。

    excel滚动条设置控件格式里面对象位置无法选大小、...这里的改变是指如果你的单元格行高或者列宽小于控件的行高和列宽 控件就会和缩小和单元格一致 但是如果单元格大列宽比你自己原本控件的的列宽,控件是不可以再扩大的。

    excel表格怎么添加滚动条

    方法/步骤 在电脑上找到Microsoft Office,打开excel。 新建一个excel表格,点击『插入』选项 在『插入』选项里找到滚动条选框按钮,如果没有点击office按钮添加 打开『excel选项』,选择『自定义』,选择『开发工具选项卡』。

    如何在Excel中加入滚动条控件在Excel中加入一个滚动条来控制另一个单元格中数值,单元格中的数值随滚无需写编码,视图-工具栏-窗体勾选,调用出窗体控件。 点滚动条,在你需要滚动的区域画出滚动条,右键设置控件格式,设置步长及单元格连接即可。

    EXCEL中如何制作滚动条控件控制的动态图表?

    此图取自EXCEL 2013的Monthly college budget模板,图中可以通过拖动滚建立窗体控件 1.点击开发工具——插入——滚动条窗体控件。 2.右击——设置控件格式。 最小值——1月 最大值——12月 单元格链接——D2 定义名称建立动态数据源 3.点击公式——名称管理器。 4.月份的引用=OFFSET(Sheet1。$A$2,1,,Sheet1。

    excel控件的“设置控制格式"怎么没有”控制"这个标签在EXCEL窗口,如果你使用的“窗体”工具栏中的控件,里面有“控制”选项,如果使用的是“控件工具箱”中的控件,在右键菜单中就找不到“控制”选项了,但它的右键菜单中有一个“属性”选项,你可以点开它,会出现的一个窗口,其中的“max\min\linkedcell\sm

    Excel VBA编程 数值调节钮和滚动条控件

    ExcelVBA编程数值调节钮和滚动条控件当组合框中的值为数值型列表项,且列表项目过多,此时,用户可以使用数值调节钮来代替组合框。另外,通过使用滚动条按控件,可以在应用程序或控件中浏览较长的项目。1.数值调节钮控件数值调节钮控件用来输入

    vb.net 滚动条控件使用方法

    我想做一个窗口,看起来有有半个屏幕这么大,但实际有好几个屏幕这么大你可以使用用一个picturebox来完成。 ==界面设计== 如图,图片框名为Pic,横向滚动条名为HS,纵向滚动条名为VS。 将你的窗口内容放入Pic中。此时,Pic的大小就是你内容的大校也就是说,Pic的大小由你来设置。 ==代码编写== 滚动条的属性设置将会

    PPT中滚动条控件的使用方法

    视图-工具栏-控件工具箱 会出现一个工具栏 点"其他控件" 滚动条向下拉 点"windows media player" 拉出一个windows media player的窗口 右键点“属性” 然后出现一个程序设计时一样的窗口 点"自定义" 然后右边的空格中出现省略号的图标吧 点这

    树形控件添加滚动条就是树形界面如果长度过长右边会出现一个滚动条可以拖动请问如何实现。v在界面设计窗口,找到树形控件的属性窗口,选择 auto vscroll。

    展开全文
  • 摘要:Delphi源码,界面编程,ListBox,滚动条 一般情况下,ListBox的滚动条是默认不显示的,有些是根据内容自动显示的,本例将为TListBox组件强制添加一个水平方向的滚动条。为了更好的演示,窗体上有一个按钮可以控制...
  • windows 下默认的滚动条样式巨丑,项目中又有比较多地方会显示滚动条, 故回头翻了一下CSS3, 还真能不用插件实现自定义滚动条的样式,正合我意 代码如下: /定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸/ :...
  • 由扁平还原到立体的扩展,crx格式,适合Chrome和360极速浏览器等Chromium内核的浏览器。使用方法:拖动到Chrome的扩展管理页面中。
  • css实现滚动条兼容mac和windows

    千次阅读 2019-05-13 14:50:01
    要做到同时兼容windows和Mac,那么可以自定义滚动条,做法很简单,在全局的css样式中加入下面代码即可: //自动移滚动条样式 ::-webkit-scrollbar{ width: 5px; height: 5px; } ::-webkit-scrollbar-thumb{ ...
  • Windows程序设计--设置滚动条详解一

    千次阅读 2015-12-11 16:18:02
    先讲怎么用普通的方法设置滚动条。重点是设置滚动条而不是文本输出,所以示例程序的文本很简洁。说到设置滚动条我们就会想到三点: 1.用鼠标拖动滑块使客户区内容重绘 2.用键盘控制滑块移动 3.用鼠标滚轮控制滑块...
  • 主要介绍了jQuery实现判断滚动条到底部的相关资料,需要的朋友可以参考下
  • Windows系统下,滚动条的美化: 这个一般是全局性的配置,如果需要不同的滚动条配置不同的样式,可以在每个滚动条样式前加个class设置即可。 ::-webkit-scrollbar { width: 6px; height: 6px; } ::-webkit-...
  • XScrollBar是一个滚动条,可能会以可选的拇指颜色,拇指夹和通道颜色显示
  • 一个帮助你操作的工具,把鼠标移动到工具条上下就可以滚动当前屏幕,带有剪切板,返回按钮,操作任意windows界面。...开发动机 windows的高超开发者们,把侧边滚动条弄成蚊子腿那样窄,无奈只能搞了这个,
  • 让VC++使用WebBrowser控件加载HTML网页时不显示滚动条,实现思路为:...在特定的场合,比如要在软件中显示一个广告图片又不想滚动条的出现影响界面美观等,平时可遇到类似较多的情况。 运行环境:Windows/Visual C/C++
  • html怎么设置不显示滚动条

    千次阅读 2021-06-17 08:44:16
    html设置不显示滚动条的方法:首先新建一个HTML代码页面;然后在html代码页面上创建div;接着设置scroll-box、scroll类样式;最后给scroll-box设置一个高度和内容超出后隐藏的样式即可。本文操作环境:windows7系统...
  • 主要介绍了js网页滚动条滚动事件的用法,实例分析了javascript中[removed]监控滚动条滚动事件的相关技巧,需要的朋友可以参考下
  • windows 10下面可以自动滚屏的设置,对于我们在系统弹出不知名原因鼠标移动,导航栏滑动开以有很好的效果。尤其市蓝牙鼠标键盘可以查看插口问题。
  • 对于Firefox,我们可以将滚动条宽度设置为none: scrollbar-width:none;/* Firefox */ IE浏览器 对于IE,我们需要使用-ms-prefix属性定义滚动条样式: -ms-overflow-style:none;/* IE 10+ */ Chrome和Safari...
  • 摘要:VC/C++源码,界面编程,滚动条控件 VC++如何使用滚动条控件?源码例子下载,本例通过滚动条调整颜色为例,演示代表红、绿、蓝三基色的滚动条在拖动时如果动态取值、赋值,从而适时动态改变颜色值,这再VC++应用...
  • 网页美化之滚动条

    2019-11-07 00:20:17
    当然您也注意了它们的滚动条大多数不是Windows的默认颜色,和页面搭配起来很是好看,那么它们是怎么做到的呢?懂得一些HTML脚本的人应该知道其实只是在网页的之间加了一些代码而已,但对于一些人来说要加入这些代码...
  • By default, Windows 10 hides scrollbars in Windows Store apps when they’re inactive. When you move your mouse, the scrollbars reappear. If you find this behavior annoying, you can turn it off and ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 72,040
精华内容 28,816
关键字:

windows滚动条设置