当前位置:网站首页>MFC窗口滚动条用法
MFC窗口滚动条用法
2022-07-01 03:19:00 【三贝勒文子】
Hello小伙伴们,好几天没更新公众号了,因为文子回家吃粽子去了。
今天要给大家分享一个窗口滚动条的用法。你会好奇滚动条是什么?滚动条就是可以滚动的条,如图所示:

上面这个就是滚动条啦,那么它的作用是什么呢?你可以想想在一个大小固定的界面上,你的空间特别多,多到界面已经没有空隙可以放置的时候,这个时候就需要滚动条来协助界面的扩展了,啥都别说,先看效果图:

这是没有使用界面滚动条的效果,我们可以看到这个界面上有24个按钮,这24个按钮固定排列着,然后界面的宽度和高度已经是固定的长度了,接下来我们看一下加了滚动条的效果图:

可以看到界面上出现了水平滚动条和垂直滚动条,可以上下拉动滚动条进行界面的垂直扩展,也可以左右拉动滚动条进行界面的水平扩展。但是,存在一个问题就是:当你拉动滚动条的时候,界面是没有反应的,是因为我们的代码中没有添加滚动条的事件函数,需要在这个界面的代码中添加滚动条的响应函数。
界面添加滚动条的做法是:
选中界面;
点击界面属性,将属性中的“垂直滚动条”和“水平滚动条”均设置为True;
然后在类视图中选中这个界面的类,然后右键点击属性,然后选择属性中的消息,在消息中寻找WM_HSCROLL和WM_VSCROLL,添加这两个事件函数:


然后在这两个时间函数中添加以下代码:
void CceshiDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
SCROLLINFO scrollinfo;
GetScrollInfo(SB_HORZ, &scrollinfo, SIF_ALL);
//
switch (nSBCode)
{
case SB_LEFT:
ScrollWindow((scrollinfo.nPos - scrollinfo.nMin) * 10, 0);
scrollinfo.nPos = scrollinfo.nMin;
SetScrollInfo(SB_HORZ, &scrollinfo, SIF_ALL);
break;
case SB_RIGHT:
ScrollWindow((scrollinfo.nPos - scrollinfo.nMax) * 10, 0);
scrollinfo.nPos = scrollinfo.nMax;
SetScrollInfo(SB_HORZ, &scrollinfo, SIF_ALL);
break;
case SB_LINELEFT:
scrollinfo.nPos -= 1;
if (scrollinfo.nPos < scrollinfo.nMin)
{
scrollinfo.nPos = scrollinfo.nMin;
break;
}
SetScrollInfo(SB_HORZ, &scrollinfo, SIF_ALL);
ScrollWindow(10, 0);
break;
case SB_LINERIGHT:
scrollinfo.nPos += 1;
if (scrollinfo.nPos > scrollinfo.nMax)
{
scrollinfo.nPos = scrollinfo.nMax;
break;
}
SetScrollInfo(SB_HORZ, &scrollinfo, SIF_ALL);
ScrollWindow(-10, 0);
break;
case SB_PAGELEFT:
scrollinfo.nPos -= 5;
if (scrollinfo.nPos < scrollinfo.nMin)
{
scrollinfo.nPos = scrollinfo.nMin;
break;
}
SetScrollInfo(SB_HORZ, &scrollinfo, SIF_ALL);
ScrollWindow(10 * 5, 0);
break;
case SB_PAGERIGHT:
scrollinfo.nPos += 5;
if (scrollinfo.nPos > scrollinfo.nMax)
{
scrollinfo.nPos = scrollinfo.nMax;
break;
}
SetScrollInfo(SB_HORZ, &scrollinfo, SIF_ALL);
ScrollWindow(-10 * 5, 0);
break;
case SB_THUMBPOSITION:
break;
case SB_THUMBTRACK:
ScrollWindow((scrollinfo.nPos - nPos) * 10, 0);
scrollinfo.nPos = nPos;
SetScrollInfo(SB_HORZ, &scrollinfo, SIF_ALL);
break;
case SB_ENDSCROLL:
break;
}
}
void CceshiDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
SCROLLINFO scrollinfo;
GetScrollInfo(SB_VERT, &scrollinfo, SIF_ALL);
switch (nSBCode)
{
case SB_LINEUP: //Scroll one line up
scrollinfo.nPos -= 1;
if (scrollinfo.nPos < scrollinfo.nMin)
{
scrollinfo.nPos = scrollinfo.nMin;
break;
}
SetScrollInfo(SB_VERT, &scrollinfo, SIF_ALL);
ScrollWindow(0, 10);
break;
case SB_LINEDOWN: //Scroll one line down
scrollinfo.nPos += 1;
if (scrollinfo.nPos + scrollinfo.nPage > scrollinfo.nMax) //此处一定要注意加上滑块的长度,再作判断
{
scrollinfo.nPos = scrollinfo.nMax;
break;
}
SetScrollInfo(SB_VERT, &scrollinfo, SIF_ALL);
ScrollWindow(0, -10);
break;
case SB_PAGEUP: //Scroll one page up.
scrollinfo.nPos -= 5;
if (scrollinfo.nPos <= scrollinfo.nMin)
{
scrollinfo.nPos = scrollinfo.nMin;
break;
}
SetScrollInfo(SB_VERT, &scrollinfo, SIF_ALL);
ScrollWindow(0, 10 * 5);
break;
case SB_PAGEDOWN: //Scroll one page down
scrollinfo.nPos += 5;
if (scrollinfo.nPos + scrollinfo.nPage >= scrollinfo.nMax) //此处一定要注意加上滑块的长度,再作判断
{
scrollinfo.nPos = scrollinfo.nMax;
break;
}
SetScrollInfo(SB_VERT, &scrollinfo, SIF_ALL);
ScrollWindow(0, -10 * 5);
break;
case SB_ENDSCROLL: //End scroll
break;
case SB_THUMBPOSITION: //Scroll to the absolute position. The current position is provided in nPos
break;
case SB_THUMBTRACK: //Drag scroll box to specified position. The current position is provided in nPos
ScrollWindow(0, (scrollinfo.nPos - nPos) * 10);
scrollinfo.nPos = nPos;
SetScrollInfo(SB_VERT, &scrollinfo, SIF_ALL);
break;
}
}
添加后运行可以看到界面的效果如下图所示:

也就是滚动条可以被任意拉动了,界面可以被水平和垂直方向进行扩展显示。
边栏推荐
- 后台系统页面左边菜单按钮和右边内容的处理,后台系统页面出现双滚动
- idea插件备份表
- 10、Scanner. Next() cannot read spaces /indexof -1
- IPv4 and IPv6, LAN and WAN, gateway, public IP and private IP, IP address, subnet mask, network segment, network number, host number, network address, host address, and IP segment / number - what does
- torch.histc
- How to use hybrid format to output ISO files? isohybrid:command not found
- [小样本分割]论文解读Prior Guided Feature Enrichment Network for Few-Shot Segmentation
- 力扣-两数之和
- 排序链表(归并排序)
- shell脚本使用两个横杠接收外部参数
猜你喜欢

Nacos
![Pyramid scene parsing network [pspnet] thesis reading](/img/05/4645c8a595083479dee6835620335d.png)
Pyramid scene parsing network [pspnet] thesis reading

Hello World generation

岭回归和lasso回归

RSN:Learning to Exploit Long-term Relational Dependencies in Knowledge Graphs
![[deep learning] activation function (sigmoid, etc.), forward propagation, back propagation and gradient optimization; optimizer. zero_ grad(), loss. backward(), optimizer. Function and principle of st](/img/9f/187ca83be1b88630a6c6fbfb0620ed.png)
[deep learning] activation function (sigmoid, etc.), forward propagation, back propagation and gradient optimization; optimizer. zero_ grad(), loss. backward(), optimizer. Function and principle of st

jeecgboot输出日志,@Slf4j的使用方法

The value of the second servo encoder is linked to the NC virtual axis of Beifu PLC for display

家居网购项目

C # realize solving the shortest path of unauthorized graph based on breadth first BFS -- complete program display
随机推荐
torch. histc
【伸手党福利】开发人员重装系统顺序
Processing of menu buttons on the left and contents on the right of the background system page, and double scrolling appears on the background system page
ASGNet论文和代码解读2
5. [WebGIS practice] software operation - service release and permission management
雪崩问题以及sentinel的使用
gcc使用、Makefile总结
How to display scrollbars on the right side of the background system and how to solve the problem of double scrollbars
Develop industrial Internet with the technical advantages of small programs
GCC usage, makefile summary
Ctfshow blasting WP
shell脚本使用两个横杠接收外部参数
文件上传下载
pytorch训练深度学习网络设置cuda指定的GPU可见
JUC学习
Filter
Edge Drawing: A combined real-time edge and segment detector 翻译
TEC: Knowledge Graph Embedding with Triple Context
Analyze datahub, a new generation metadata platform of 4.7K star
Leetcode 1482 guess, how about this question?