【发布时间】:2018-12-03 22:44:47
【问题描述】:
我是 MFC 的初学者。我在属性表中嵌入了一个对话框。 由于对话框大于属性表,因此某些部分会被裁剪。
所以我打算添加一个垂直滚动条。我尝试了两种方法。
- 在对话框本身的工具箱中添加了滚动条控件。
创建了一个控制变量。
DDX_Control(pDX, IDC_SCROLLBAR, m_ctlScrollBar);
添加消息映射如下:
ON_WM_VSCROLL(IDC_SCROLLBAR,OnVScroll)
在OnInitDialog()中添加以下代码:
SCROLLINFO ScrollInfo;
ScrollInfo.cbSize = sizeof(ScrollInfo);
ScrollInfo.fMask = SIF_ALL;
ScrollInfo.nMin = 0;
ScrollInfo.nMax = 100;
ScrollInfo.nPage = 40;
ScrollInfo.nPos = 50;
ScrollInfo.nTrackPos = 0;
m_ctlScrollBar.SetScrollInfo(&ScrollInfo,TRUE);
OnVScroll() 函数重写如下:
void CFeesPage::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
SCROLLINFO ScrollInfo;
m_ctlScrollBar.GetScrollInfo(&ScrollInfo);
switch (nSBCode)
{
case SB_BOTTOM: //Scrolls to the lower right.
break;
case SB_ENDSCROLL: //Ends scroll.
break;
case SB_LINEDOWN: //Scrolls one line down.
m_ctlScrollBar.SetScrollPos(m_ctlScrollBar.GetScrollPos() + 1,TRUE);
break;
case SB_LINEUP: //Scrolls one line up.
m_ctlScrollBar.SetScrollPos(m_ctlScrollBar.GetScrollPos() - 1,TRUE);
break;
case SB_PAGEDOWN: //Scrolls one page down.
m_ctlScrollBar.SetScrollPos(m_ctlScrollBar.GetScrollPos() + ScrollInfo.nPage, TRUE);
break;
case SB_PAGEUP: //Scrolls one page up.
m_ctlScrollBar.SetScrollPos(m_ctlScrollBar.GetScrollPos() - ScrollInfo.nPage, TRUE);
break;
case SB_THUMBPOSITION:
break;
case SB_THUMBTRACK:
m_ctlScrollBar.SetScrollPos(nPos, TRUE);
break;
case SB_TOP: //Scrolls to the upper left.
break;
}
}
在这种情况下滚动条会移动,但子控件不会?
-
另一方面,我在
OnInitDialog中启用了属性表的滚动条控件,如下所示:CScrollBar* test = this->GetScrollBarCtrl(SB_VERT);如上设置
SCROLLINFO。
OnVScroll 写法如下:
void CSubTranSheet::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
SCROLLINFO ScrollInfo;
GetScrollInfo(SB_VERT, &ScrollInfo);
switch (nSBCode)
{
case SB_BOTTOM: //Scrolls to the lower right.
break;
case SB_ENDSCROLL: //Ends scroll.
break;
case SB_LINEDOWN: //Scrolls one line down.
SetScrollPos(SB_VERT, GetScrollPos(SB_VERT) + 1, TRUE);
break;
case SB_LINEUP: //Scrolls one line up.
SetScrollPos(SB_VERT, GetScrollPos(SB_VERT) - 1, TRUE);
break;
case SB_PAGEDOWN: //Scrolls one page down.
SetScrollPos(SB_VERT, GetScrollPos(SB_VERT) + ScrollInfo.nPage, TRUE);
break;
case SB_PAGEUP: //Scrolls one page up.
SetScrollPos(SB_VERT, GetScrollPos(SB_VERT) - ScrollInfo.nPage, TRUE);
break;
case SB_THUMBPOSITION:
break;
case SB_THUMBTRACK:
SetScrollPos(SB_VERT, nPos, TRUE);
break;
case SB_TOP: //Scrolls to the upper left.
break;
}
}
在这种情况下,滚动条也会移动,但子对话框不会?
请帮助我。我不确定哪种方法是正确的。提前致谢。
【问题讨论】:
-
@Andrew Truckle...感谢您更新问题..
-
看这里:codeproject.com/Articles/3895/Scrollable-PropertyPage。我注意到您没有调用底部的基类处理程序:
CPropertySheet::OnVScroll(nSBCode, nPos, pScrollBar);。虽然,查看上述教程,您需要在页面而不是工作表上执行此操作。 -
@AndrewTruckle 链接中的文章也可以正常工作。感谢您提供链接。
标签: mfc scrollbar propertysheet