我用vc++做了一个多文档程序,并用使用了滚动视图。现在,我想不使用系统提供的滚动功能,就是说,当我把滚动条拖动到某一位置后,屏幕显示内容不是有系统自动进行滚动,而是由我自己滚据滚动条的位置来处理显示内容,请问如何做?
1条回答
- ChatGPTᴼᴾᴱᴺᴬᴵ 2023-03-08 00:45关注
该回答引用ChatGPT
您可以通过重写滚动视图的OnScroll函数来处理滚动条拖动事件,并根据滚动条位置计算显示内容的偏移量。
以下是一个示例代码:
void CMyScrollView::OnInitialUpdate() { CScrollView::OnInitialUpdate(); SetScrollSizes(MM_TEXT, CSize(0, 0)); // 禁用系统的滚动条 } void CMyScrollView::OnDraw(CDC* pDC) { // 根据滚动条位置计算需要显示的内容的偏移量 int nHorzPos = GetScrollPos(SB_HORZ); int nVertPos = GetScrollPos(SB_VERT); int nPixelX = nHorzPos * m_nContentWidth / m_nScrollWidth; int nPixelY = nVertPos * m_nContentHeight / m_nScrollHeight; // 绘制内容,使用偏移量调整绘制位置 pDC->SetViewportOrg(-nPixelX, -nPixelY); // 绘制内容的代码 // ... pDC->SetViewportOrg(0, 0); } void CMyScrollView::OnScroll(UINT nSBCode, UINT nPos, BOOL bDoScroll) { // 处理滚动条拖动事件,不使用系统的滚动功能 if (nSBCode == SB_THUMBTRACK || nSBCode == SB_THUMBPOSITION) { SetScrollPos(SB_HORZ, nPos); // 设置水平滚动条位置 SetScrollPos(SB_VERT, nPos); // 设置垂直滚动条位置 RedrawWindow(); // 重绘视图 } else { CScrollView::OnScroll(nSBCode, nPos, bDoScroll); // 调用基类的实现 } }
在上述代码中,我们在OnInitialUpdate函数中禁用了系统的滚动条,然后在OnDraw函数中根据滚动条位置计算需要显示的内容的偏移量,并使用偏移量调整绘制位置。
在OnScroll函数中,我们检查滚动条事件的类型,如果是拖动事件,则手动设置滚动条位置并重绘视图;否则,调用基类的实现以使用系统的滚动功能。
请根据您的具体需求调整代码。
解决 无用评论 打赏 举报
悬赏问题
- ¥15 对于相关问题的求解与代码
- ¥15 ubuntu子系统密码忘记
- ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
- ¥15 保护模式-系统加载-段寄存器
- ¥15 电脑桌面设定一个区域禁止鼠标操作
- ¥15 求NPF226060磁芯的详细资料
- ¥15 使用R语言marginaleffects包进行边际效应图绘制
- ¥20 usb设备兼容性问题
- ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
- ¥15 安装svn网络有问题怎么办