SetScrollInfo 滚动条不隐藏

// MyView.h
#pragma once
#include <afxwin.h>

class CMyView : public CView
{
protected:
    afx_msg void OnInitialUpdate();
    afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
    afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);

    DECLARE_MESSAGE_MAP()
};

// MyView.cpp
#include "pch.h"
#include "MyView.h"

BEGIN_MESSAGE_MAP(CMyView, CView)
    ON_WM_INITIALUPDATE()
    ON_WM_VSCROLL()
    ON_WM_HSCROLL()
END_MESSAGE_MAP()

void CMyView::OnInitialUpdate()
{
    CView::OnInitialUpdate();

    // 设置滚动条信息
    SCROLLINFO si;
    memset(&si, 0, sizeof(si));
    si.cbSize = sizeof(si);
    si.fMask = SIF_RANGE | SIF_PAGE;

    // 设置水平滚动条
    si.nMin = 0;
    si.nMax = 1000; // 假设内容宽度为1000
    si.nPage = GetClientRect().Width();
    SetScrollInfo(SB_HORZ, &si, TRUE);

    // 设置垂直滚动条
    si.nMin = 0;
    si.nMax = 1000; // 假设内容高度为1000
    si.nPage = GetClientRect().Height();
    SetScrollInfo(SB_VERT, &si, TRUE);
}

void CMyView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    SCROLLINFO si;
    memset(&si, 0, sizeof(si));
    si.cbSize = sizeof(si);
    si.fMask = SIF_ALL;

    GetScrollInfo(SB_VERT, &si);

    int nScrollPos = si.nPos;
    switch (nSBCode)
    {
    case SB_LINEUP:
        nScrollPos -= 1;
        break;
    case SB_LINEDOWN:
        nScrollPos += 1;
        break;
    case SB_PAGEUP:
        nScrollPos -= si.nPage;
        break;
    case SB_PAGEDOWN:
        nScrollPos += si.nPage;
        break;
    case SB_THUMBPOSITION:
    case SB_THUMBTRACK:
        nScrollPos = nPos;
        break;
    }

    si.nPos = nScrollPos;
    si.fMask = SIF_POS;
    SetScrollInfo(SB_VERT, &si, TRUE);
}

void CMyView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    SCROLLINFO si;
    memset(&si, 0, sizeof(si));
    si.cbSize = sizeof(si);
    si.fMask = SIF_ALL;

    GetScrollInfo(SB_HORZ, &si);

    int nScrollPos = si.nPos;
    switch (nSBCode)
    {
    case SB_LINELEFT:
        nScrollPos -= 1;
        break;
    case SB_LINERIGHT:
        nScrollPos += 1;
        break;
    case SB_PAGELEFT:
        nScrollPos -= si.nPage;
        break;
    case SB_PAGERIGHT:
        nScrollPos += si.nPage;
        break;
    case SB_THUMBPOSITION:
    case SB_THUMBTRACK:
        nScrollPos = nPos;
        break;
    }

    si.nPos = nScrollPos;
    si.fMask = SIF_POS;
    SetScrollInfo(SB_HORZ, &si, TRUE);
}
  • 初始化一个 SCROLLINFO 结构体 si,并设置其大小和掩码 fMaskSIF_RANGE 表示要设置滚动条的范围,SIF_PAGE 表示要设置页面大小。
  • 分别设置水平和垂直滚动条的范围和页面大小。范围的设置使得内容大小超出了客户区大小,从而确保滚动条显示。
  • 使用 SetScrollInfo 函数将设置的滚动条信息应用到窗口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

焰川

微信 2936729162

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值