- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有类似的问题:How do you use MFC CScrollbar controls?但我发现我的 ON_WM_VSCROLL
消息正在发送参数 nPos
始终等于 0。我认为我应该使用 SetScrollInfo
方法或在至少使用 SetScrollRange
,我尝试在 View 类函数(派生自 CFormView
)的 PreCreateWindow()
中执行此操作。
然而,滚动条似乎没有从 SCROLLINFO
结构中获取数据。
这是我的代码示例:
BOOL CInterfaceView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
drawphoto=false; //other unrelated variables;
zoomfactor=1.0;
info1.cbSize=sizeof(SCROLLINFO); //SCROLLINFO global variable
info1.fMask=SIF_ALL;
info1.nMin=0;
info1.nMax=100;
info1.nPage=2;
info1.nPos=5;
info1.nTrackPos=2;
ScrollBar1.SetScrollInfo(&info1); //the vertical ScrollBar
// ScrollBar1.SetScrollRange(0,100); //this has no effect either
return CFormView::PreCreateWindow(cs);
}
VSCROLL 消息处理程序:
void CInterfaceView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
int CurPos = pScrollBar->GetScrollPos();
//debug code:
CString test;
int rn,rx;
pScrollBar->GetScrollRange(&rn,&rx);
test.Format(_T("%d %d %d\n"),nPos,CurPos,rx-rn);
if(pScrollBar!=NULL)
TRACE(test+_T(" dzialamy\n"));
//end debug code
//this part found on the Internet
// Determine the new position of scroll box.
switch (nSBCode)
{
case SB_LEFT: // Scroll to far left.
CurPos = 0;
break;
case SB_RIGHT: // Scroll to far right.
CurPos = 100;
break;
case SB_ENDSCROLL: // End scroll.
break;
case SB_LINELEFT: // Scroll left.
if (CurPos > 0)
CurPos--;
break;
case SB_LINERIGHT: // Scroll right.
if (CurPos < 100)
CurPos++;
break;
case SB_PAGELEFT: // Scroll one page left.
{
// Get the page size.
SCROLLINFO info;
ScrollBar1.GetScrollInfo(&info, SIF_ALL);
if (CurPos > 0)
CurPos = max(0, CurPos - (int) info.nPage);
}
break;
case SB_PAGERIGHT: // Scroll one page right
{
// Get the page size.
SCROLLINFO info;
ScrollBar1.GetScrollInfo(&info, SIF_ALL);
if (CurPos < 100)
CurPos = min(100, CurPos + (int) info.nPage);
}
break;
case SB_THUMBPOSITION: // Scroll to absolute position. nPos is the position
CurPos = nPos; // of the scroll box at the end of the drag operation.
break;
case SB_THUMBTRACK: // Drag scroll box to specified position. nPos is the
CurPos = nPos; // position that the scroll box has been dragged to.
break;
}
// Set the new position of the thumb (scroll box).
ScrollBar1.SetScrollPos(50); //orignally it was CurPos
CFormView::OnVScroll(nSBCode, 50, pScrollBar);
// ScrollBar1.SetScrollPos(nPos);
}
所以我怀疑,我尝试将滚动条设置在错误的位置,或者做错了什么?感谢您的帮助。
最佳答案
PreCreateWindow 在创建窗口(及其滚动条)之前被调用。在 View 类中,您应该在 OnInitialUpdate 中进行初始化。这是在窗口创建之后但在窗口变得可见之前调用的。
关于c++ - CScrollbar SetScrollInfo 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25363059/
我正在尝试使用 CScrollBar 来导航对话框中的项目列表。我在对话框中捕捉到 OnVScroll 消息,并且滚动条正确响应单击栏顶部和底部的箭头,以及单击栏的范围以整页前进。问题是,当您尝试拖动
我有类似的问题:How do you use MFC CScrollbar controls?但我发现我的 ON_WM_VSCROLL 消息正在发送参数 nPos 始终等于 0。我认为我应该使用 Se
尝试在我的 Windows7 的 MFC C++ 应用程序中使用 CScrollBar。 我收到所有消息都很好,并且有一个看起来像这样的处理程序: void Dialog::OnHScroll(UIN
我使用 CScrollbar 用 C++ 编写了一些代码,它同时滚动 CWnd 和 TreeView 。这在我的电脑上完美运行,但在办公室的其他电脑上却有问题: 它只会向上滚动 它允许用户在不需要时滚
我已将水平 CScrollBar 控件拖放到对话框中。你到底是怎么用的?? 我尝试将 handle 向右移动,但它直接跳回左侧......所以我想我可能需要设置范围。我调用了 SetScrollRan
我是一名优秀的程序员,十分优秀!