精华内容
下载资源
问答
  • 2018-04-13 19:55:52

    在开发中,有一些常常用到的方法,每次查找以前写的比较麻烦 ,自己写有在做重复工作 ,所以总一个小的工具类,随时添加内容

    4.winform控件是否出现滚动条  静态类 FormTools( public static class FormTools)

            private const int HSCROLL = 0x100000;
            private const int VSCROLL = 0x200000;
            private const int STYLE = -16;
    
            [DllImport("user32", CharSet = CharSet.Auto)]
            private static extern int GetWindowLong(IntPtr hwnd, int nIndex);
    
            /// <summary>
            /// 是否出现垂直滚动条
            /// </summary>
            /// <param name="ctrl">要测试的控件</param>
            /// <returns>true 出现,false 未出现</returns>
            public static bool IsVScrolVisible(this Control ctrl)
            {
                if (!ctrl.IsHandleCreated)
                    return false;
    
                return (GetWindowLong(ctrl.Handle, STYLE) & VSCROLL) != 0;
            }
    
            /// <summary>
            /// 是否出现水平滚动条
            /// </summary>
            /// <param name="ctrl">要测试的控件</param>
            /// <returns>true 出现,false 未出现</returns>
            public static bool IsHScrolVisible(this Control ctrl)
            {
                if (!ctrl.IsHandleCreated)
                    return false;
                return (GetWindowLong(ctrl.Handle, STYLE) & HSCROLL) != 0;
            }

    调用

                var isHScrol = flowLayoutPanel1.IsHScrolVisible();
                var isVScrol = flowLayoutPanel1.IsVScrolVisible();

    参考文章 https://blog.csdn.net/ltolll/article/details/7637995

    更多相关内容
  • 窗体添加滚动条

    2018-04-25 15:46:36
    窗体添加滚动条,欢迎大家交流经验,共同进步,一起探讨
  • VB6 给窗体添加滚动条,调整水平滚动条的一些属性。当窗体的大小发生变化时发生,垂直滚动条与窗体相对位置不变,滚动条的大小随着窗体大小的改变而改变,命令按钮作水平滚动条与垂直滚动条交接处的填充。  因代码...
  • 一般情况下,ListBox的滚动条是默认不显示的,有些是根据内容自动显示的,本例将为TListBox组件强制添加一个水平方向的滚动条。为了更好的演示,窗体上一个按钮可以控制滚动条添加,你只需点击一下按钮,即可...
  • VB为ListBox 增加水平滚动条,这是一个滚动条类的应用,可实现的功能和演示功能为:改变窗体宽度使得滚动条消失、加载ListBox、改变最后项的标题、增加item、删除最后一个item、items数量统计。
  • VB 给窗体添加滚动条

    热门讨论 2010-06-07 13:14:33
    VB 给窗体添加滚动条 VB 给窗体添加滚动条
  • 窗体加上滚动条

    2021-03-13 14:15:23
    为windows32窗体加入滚动条,代码如下:#includeLRESULT CALLBACK WindowProc(HWND hwnd, // handle to windowUINT uMsg, // message identifierWPARAM wParam, // first message parameterLPARAM lParam // second ...

    为windows32窗体加入滚动条,代码如下:

    #include

    LRESULT CALLBACK WindowProc(

    HWND hwnd, // handle to window

    UINT uMsg, // message identifier

    WPARAM wParam, // first message parameter

    LPARAM lParam // second message parameter

    );

    int WINAPI WinMain(

    HINSTANCE hInstance, // handle to current instance

    HINSTANCE hPrevInstance, // handle to previous instance

    LPSTR lpCmdLine, // command line

    int nCmdShow // show state

    )

    {

    static TCHAR szAppName[]=TEXT("AppName");

    HWND hwnd;

    MSG msg;

    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=WindowProc;

    wndclass.lpszClassName=szAppName;

    wndclass.lpszMenuName=NULL;

    wndclass.style=CS_HREDRAW|CS_VREDRAW;

    if(!RegisterClass(&wndclass)){

    MessageBox(NULL,TEXT("This program requires Windows NT"),szAppName,MB_ICONERROR);

    }

    hwnd=CreateWindow(

    szAppName, // registered class name

    TEXT("This is title"), // window name

    WS_OVERLAPPEDWINDOW|WS_VSCROLL, // window style

    CW_USEDEFAULT, // horizontal position of window

    CW_USEDEFAULT, // vertical position of window

    CW_USEDEFAULT, // window width

    CW_USEDEFAULT, // window height

    NULL, // handle to parent or owner window

    NULL, // menu handle or child identifier

    hInstance, // handle to application instance

    NULL // window-creation data

    );

    ShowWindow(hwnd,nCmdShow);

    UpdateWindow(hwnd);

    while(GetMessage(&msg,NULL,0,0)){

    TranslateMessage(&msg);

    DispatchMessage(&msg);

    }

    return msg.wParam;

    }

    LRESULT CALLBACK WindowProc(

    HWND hwnd, // handle to window

    UINT uMsg, // message identifier

    WPARAM wParam, // first message parameter

    LPARAM lParam // second message parameter

    )

    {

    static int cxClient,cyClient,cxChar,cyChar,iVscrollPos;

    HDC hdc;

    PAINTSTRUCT ps;

    int i=50,j=20;

    TCHAR szBuffer[20];

    TEXTMETRIC tm;

    int numberline=30;

    switch(uMsg){

    case WM_CREATE:

    //hdc=GetDC(hwnd);

    //TextOut(hdc,0,0,TEXT("hello,world"),strlen("hello,world"));

    //ReleaseDC(hwnd,hdc);

    hdc=BeginPaint(hwnd,&ps);

    GetTextMetrics(hdc,&tm);

    SetScrollRange(hwnd,SB_VERT,0,numberline-1,FALSE);

    SetScrollPos(hwnd,SB_VERT,iVscrollPos,TRUE);

    cyChar=(tm.tmHeight+tm.tmExternalLeading);

    EndPaint(hwnd,&ps);

    return 0;

    case WM_PAINT:

    hdc=BeginPaint(hwnd,&ps);

    GetTextMetrics(hdc,&tm);

    TextOut(hdc,iVscrollPos,iVscrollPos,szBuffer,wsprintf(szBuffer,TEXT("%d"),tm.tmAveCharWidth));//字符宽度

    TextOut(hdc,iVscrollPos+30,iVscrollPos+40,szBuffer,wsprintf(szBuffer,TEXT("%d"),tm.tmHeight+tm.tmExternalLeading));//字符长度

    EndPaint(hwnd,&ps);

    return 0;

    case WM_VSCROLL:

    switch(LOWORD(wParam)){

    case SB_LINEUP:

    iVscrollPos-=100;//为了效果更明显由iVscrollPos-=1;改成了iVscrollPos-=100;

    break;

    case SB_LINEDOWN:

    iVscrollPos+=100;

    break;

    case SB_PAGEUP:

    iVscrollPos-=cyClient/cyChar;//cyClient/cyChar表示一页最多几行或一列最多包括多少个字符

    break;

    case SB_PAGEDOWN:

    iVscrollPos+=cyClient/cyChar;

    break;

    case SB_THUMBPOSITION:

    iVscrollPos=HIWORD(wParam);

    break;

    default:

    break;

    }

    iVscrollPos=max(0,min(iVscrollPos,numberline-1));

    if(iVscrollPos!=GetScrollPos(hwnd,SB_VERT)){

    SetScrollPos(hwnd,SB_VERT,iVscrollPos,TRUE);

    InvalidateRect(hwnd,NULL,TRUE);

    }

    return 0;case WM_SIZE:

    cyClient=HIWORD(lParam);

    return 0;

    /*case WM_SIZE:

    hdc=BeginPaint(hwnd,&ps);

    cxClient=LOWORD(lParam);

    cyClient=HIWORD(lParam);

    GetTextMetrics(hdc,&tm);

    TextOut(hdc,0,100,szBuffer,wsprintf(szBuffer,TEXT("%d"),cxClient/tm.tmAveCharWidth));//一行最多显示多少个字符

    TextOut(hdc,0,150,szBuffer,wsprintf(szBuffer,TEXT("%d"),cyClient/(tm.tmHeight+tm.tmExternalLeading)));//一列最多显示多少字符

    EndPaint(hwnd,&ps);

    return 0;*/

    case WM_DESTROY:

    PostQuitMessage(0);

    return 0;

    }

    return DefWindowProc(hwnd,uMsg,wParam,lParam);

    }

    截图如下:

    1343715813_4475.jpg

    1343715795_7170.jpg

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

    展开全文
  • 当前位置:我的异常网» VB»给VB窗体加滚动条是否有新的办法解决思路给VB窗体加滚动条是否有新的办法解决思路www.myexceptions.net网友分享于:2013-01-08浏览:30次给VB窗体加滚动条是否有新的办法程序所有窗体已...

    当前位置:我的异常网» VB » 给VB窗体加滚动条是否有新的办法解决思路

    给VB窗体加滚动条是否有新的办法解决思路

    www.myexceptions.net  网友分享于:2013-01-08  浏览:30次

    给VB窗体加滚动条是否有新的办法

    程序所有窗体已设计好了,用加图片的方法实现似乎已很困难,请问大家是否有什么新的办法?谢谢

    ------解决方案--------------------

    加滚动条本身很容易,一两句代码就可以实现,关键是我们加的滚动条要能响应事件,所以没什么简单的办法

    ------解决方案--------------------

    偶现在用的也是关于图片的超长窗体,楼主可试试下面方法:

    先在窗体上拖一个双屏幕长的frame1框(你的所有内容都可以在这上面拖出),高18000;宽15085;(窗体的属性Scalemode取1-Twip)

    然后拖水平与垂直的两个滚动条;(注意:要在窗体上拖出)

    Vscrloo1(竖滚动条)属性:LargeChange=20000,Max=11055

    HScroll1(横)属性:LargeChange=8000;Max=1000;Top=18000;Width=14040

    上面是偶的选用参数,你也可自选;

    建立一个模块:下面代码放进去

    Option Explicit

    Public Type POINTL

    x As Long

    y As Long

    End Type

    Declare Function CallWindowProc _

    Lib "user32 " Alias "CallWindowProcA " _

    (ByVal lpPrevWndFunc As Long, _

    ByVal hwnd As Long, _

    ByVal Msg As Long, _

    ByVal wParam As Long, _

    ByVal lParam As Long) As Long

    Declare Function SetWindowLong _

    Lib "user32 " Alias "SetWindowLongA " _

    (ByVal hwnd As Long, _

    ByVal nIndex As Long, _

    ByVal dwNewLong As Long) As Long

    Declare Function SystemParametersInfo _

    Lib "user32 " Alias "SystemParametersInfoA " _

    (ByVal uAction As Long, _

    ByVal uParam As Long, _

    lpvParam As Any, _

    ByVal fuWinIni As Long) As Long

    Declare Function ScreenToClient Lib "user32 " _

    (ByVal hwnd As Long, xyPoint As POINTL) As Long

    Public Const GWL_WNDPROC = -4

    Public Const SPI_GETWHEELSCROLLLINES = 104

    Public Const WM_MOUSEWHEEL = &H20A

    Public WHEEL_SCROLL_LINES As Long

    Global lpPrevWndProc As Long

    Public Sub Hook(ByVal hwnd As Long)

    lpPrevWndProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)

    Call SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, WHEEL_SCROLL_LINES, 0)

    If WHEEL_SCROLL_LINES > Form1.VScroll1.Max Then

    WHEEL_SCROLL_LINES = Form1.VScroll1.Max

    End If

    End Sub

    Public Sub UnHook(ByVal hwnd As Long)

    Dim lngReturnValue As Long

    lngReturnValue = SetWindowLong(hwnd, GWL_WNDPROC, lpPrevWndProc)

    End Sub

    Function WindowProc(ByVal hw As Long, _

    ByVal uMsg As Long, _

    ByVal wParam As Long, _

    ByVal lParam As Long) As Long

    Dim pt As POINTL

    Select Case uMsg

    Case WM_MOUSEWHEEL

    If wParam = -7864320 Then

    If Form1.VScroll1.Value <= Form1.VScroll1.Max - 300 Then '4个300值可调鼠标滚轮移动屏幕的速度,可取300-1000(值越大,移动速度越快)

    Form1.VScroll1.Value = Form1.VScroll1.Value + 300

    Else

    Form1.VScroll1.Value = Form1.VScroll1.Max

    End If

    ElseIf wParam = 7864320 Then

    If Form1.VScroll1.Value > = 300 Then

    Form1.VScroll1.Value = Form1.VScroll1.Value - 300

    Else

    Form1.VScroll1.Value = 0

    End If

    End If

    Case Else

    WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)

    End Select

    End Function

    Public Function HIWORD(LongIn As Long) As Integer

    HIWORD = (LongIn And &HFFFF0000) \ &H10000

    End Function

    Public Function LOWORD(LongIn As Long) As Integer

    LOWORD = LongIn And &HFFFF&

    End Function

    下面代码放在窗体中:

    Private Sub Form_Load()

    Hook Me.hwnd

    End Sub

    Private Sub Form_Resize()

    If Frame1.Height > Me.Height Then

    VScroll1.Visible = True

    Else

    VScroll1.Visible = False

    文章评论

    展开全文
  • winform 滚动条示例

    2012-02-17 10:48:26
    C# winform 滚动条的代码示例,详细描述了实现滚动条的例子
  • 改变列宽或者改变控件尺寸或者最小化或最大化窗体水平滚动条才显示出来。 经过资料查找,使用SetColumnWidth(tempcol, LVSCW_AUTOSIZE_USEHEADER);完美解决问题。tempcol最后列的索引。 记录下!!! ...
  • c#中TextBox控件设置了ScrollBars属性为both,为何运行后缩小窗体水平竖直滚动条都不见了,感觉是每当缩小到某一个大小之后滚动条就不见了,再放大就出来了,好像被什么遮住了一样,可是,Dock属性设为Fill,不...
  • java中如何添加滚动条

    千次阅读 2021-03-03 13:00:54
    对象,然后定义一个JScrollPane ScrollPane =new JScrollPane(jTextArea);注意将应将JTextArea置于JScrollPanel中,设置一些textArea的属性:textArea.setBounds(136, 136, 264, 61);textArea.setW...
  • DBgrideh做了勾选框,指定行勾选后,原地位置刷新数据,光标以及滚动条都不变; 原地刷新数据后,用DBGRID的DataSource.DataSet.Locate自带定位功能,将光标指向原选中行,但是,原选中行的物理顺序的位置变...
  • MFC中为Edit编辑框添加滚动条

    千次阅读 2018-11-29 15:58:32
    外观中找到下列四,从到下依次是自动水平滚动、自动垂直滚动、显示水平滚动条、显示垂直滚动条,将需要的设置为True: 不过当我将水平和垂直滚动条都同时打开时,运行后只能拖动水平滚动条,而垂直的无法...
  • MFC-给窗口添加滚动条

    千次阅读 2018-06-12 15:13:49
    创建滚动条滚动条是这样一个窗口,窗口两端各有一个箭头,之间还有一个可用鼠标拖动的滑块,... 如果要添加水平滚动条,则创建WS_HSCROLL样式的窗口; 如果要同时创建水平滚动条和垂直滚动条,则两种样式都采用...
  • 对话框滚动条及滚动效果实现,用的api主要有: ScrollWindow, SetScrollInfo, ...响应滚动条的消息,其中记录窗口原点的x和y坐标,并滚动窗口;OnPaint中设置窗口原点,并绘图。SCROLLINFOtypedef struct tagS...
  • 侧边栏滚动条

    千次阅读 2021-06-14 00:33:37
    先来简单说说原理:监测浏览器滚动条的距离,大于一定长度时,给导航栏添加“position:fixed”,小于则取消,同时还添加了animate自定义的透明度渐变过渡!小小滚动条,设计还是挺复杂。滚动条出现页面不跳动.wrap {...
  • textbox多行带滚动条

    千次阅读 2021-06-11 01:07:11
    textbox允许有滚动条的属性是什么?首先设置成TextMode=MultiLine; 再右边属性查找ScrollBars 设置为 Vertical 或者bothC# ...文本框的属性栏里,选择ScrollBars,有Horizontal(水平滚动条),Vertical(竖直滚...
  • 如何只去掉水平滚动条或垂直滚动条呢,一些网页组件通过设置组件的style属性的overflow-x : hidden或overflow : hidden来去掉水平滚动条或垂直滚动条。但是对iframe不起作用。 可以通过下面的方法来去掉: ...
  • C# 滚动条应用总结

    万次阅读 2016-01-30 22:05:17
    01.窗体自动显示滚动条 方式(利用窗体的AutoScroll属性):  设置窗体的AutoScroll属性为true,自适应窗体上的子控件的布局,...当窗体尺寸变小后,让其自动显示滚动条,只需Form1_Load()函数中增加句代码:
  • 动条小部件用于向下滚顶其他小部件的内容,如列表框,文本和画布,但是,我们也可以为Entry小部件创建水平滚动条,常常被用于实现文本,画布和列表框的滚动 可以配合Text组件,Canvas组,Listbox组件一起使用,水平滚动条还...
  • 要给PictureBox添加滚动条需要以下步骤: 1)将picturebox放在panel; 2)将panel的AutoScroll设置为ture; 3)将picturebox的SizeMode设置为AutoSize; 4)将picturebox的Dock设置为None(必须为None,...
  • Win32 滚动条的创建实例(

    千次阅读 2019-08-06 18:44:18
    滚动描述: 我们所看到的滚动其实是文本打印位置的改变,例如:向下滚动,本来...设置滚动条的范围:SetScrollRange 设置滚动滑块的位置:SetScrollPos 获取滚动条的范围:GetScrollRange 获取滚动滑块的位置:GetS...
  • MFC对话框水平和垂直滚动条功能

    千次阅读 2017-10-31 11:01:25
    1.Resource View - Dialog - 主程序对话框 - 右键 - 属性 - Horizontal Scroll - true ...2.Message - WM_HSCROLL :OnHScroll回车,跳到.cpp文件添加代码,同理WM_HSCROLL; 3.添加代码: void CMyBSplineDlg::OnHSc
  • 去除页面滚动条

    2021-01-15 09:19:35
    去掉水平滚动条: <body style="overflow-x: hidden"> 去掉竖直滚动条: <body style="overflow-y: hidden"> 隐藏横向滚动条,显示纵向滚动条: <body style="overflow-x:hidden;overflow-y:scroll"&...
  • Java中给JTextArea添加滚动条

    千次阅读 2019-12-20 12:55:09
    这里JScrollPane面板不能用add方法添加JTextArea,否则显示不了滚动条,必须用setViewportView方法添加添加JTable的时候也会用到这方法) 这里简单写下步骤: 创建JTextArea对象和JScrollPane对象 设置...
  • MFC界面编程基础(14):滚动条

    千次阅读 2018-12-27 20:21:04
    建立一个水平滚动条,最小值为 0 ,最大值为 100 ,单击滚动条两端箭头时滑块移动的增量值为 2 ,单击滚动条中的空白处(滑块与两端箭头之间的区域)时滑块移动的增量值为 10 。另有一个只读的编辑框...
  • VB6 FORM窗体上控件实现滚动的方法

    万次阅读 2014-09-09 13:54:06
    当所包含的图形超过控件范围时,单独一个 PictureBox 控件无法实现滚动功能─ 因为 PictureBox 控件不能自动添加滚动条。 应用程序使用两图片框。称第一个为平稳的父 PictureBox 控件。称第二为子 PictureBox
  • #nav { position: fixed; top: 5px; right: 10px; } #nav span { margin-left: 10px; cursor: pointer; }

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,532
精华内容 3,412
关键字:

在窗体上添加一个水平滚动条