将矩形(和点)滚动到视图中
scrolling rect (and point) into view
我有一个逻辑顺序问题。
假设我有三个重要点。编辑栏左侧,编辑栏右侧,插入符号在编辑栏中的位置
我想显示有焦点的控件,并显示它的插入符号
为了显示有焦点的字段,我通常按照这个顺序尝试确保以下内容。1. 确保右侧可见。2. 确保左侧可见。3.确保插入符号(加上最大宽度字符)可见。
问题是如果字段对父字段太宽。该控件将始终尝试显示右,然后是左,然后是插入。如果插入符号接近结尾(当前滚动确保右侧可见),并且用户键入类型,则父级将滚动到插入符号之后,即使它已经可见。如果插入符号<的右边。我不想那样做。>
伪代码:
if (cFocusRect.right > cClientRect.right)
{
cFinalPoint.x += cClientRect.right - cFocusRect.right;
cFocusRect.OffsetRect(cClientRect.right - cFocusRect.right, 0);
fBoundRight = TRUE;
}
if (cFocusRect.left < 0)
{
cFinalPoint.x -= cFocusRect.left;
cFocusRect.OffsetRect(cFocusRect.left, 0);
}
nCaretRight = min(cFocusRect.right, pChild->GetCaretPos().x + nMaxCharWidth);
if (nCaretRight > cClientRect.right)
{
cFinalPoint.x += cClientRect.right - nCaretRight;
cFocusRect.OffsetRect(cClientRect.right - nCaretRight, 0);
fBoundRight = TRUE;
}
解决方案如下:如果需要将插入符号滚动到视图中,则不要将字段的矩形滚动到视图中。要确定,请检查该字段是否大于可滚动区域。
if (cFocusRect.Width() < cClientRect.Width())
{
if (cFocusRect.right > cClientRect.right)
{
cFinalPoint.x += cClientRect.right - cFocusRect.right;
cFocusRect.OffsetRect(cClientRect.right - cFocusRect.right, 0);
cCaretPoint.Offset(cClientRect.right - cFocusRect.right, 0);
fBoundRight = TRUE;
}
if (cFocusRect.left < 0)
{
cFinalPoint.x -= cFocusRect.left;
cFocusRect.OffsetRect(cFocusRect.left, 0);
cCaretPoint.Offset(cFocusRect.left, 0);
}
}
else
{
nCaretRight = min(cFocusRect.right, cCaretPoint.x + (cFocusRect.Height() * 3));
if (nCaretRight > cClientRect.right)
{
cFinalPoint.x += cClientRect.right - nCaretRight;
cFocusRect.OffsetRect(cClientRect.right - nCaretRight, 0);
cCaretPoint.Offset(cClientRect.right - nCaretRight, 0);
fBoundRight = TRUE;
}
nCaretLeft = max(cFocusRect.left, cCaretPoint.x);
if (nCaretLeft < 0)
{
cFinalPoint.x -= nCaretLeft;
cFocusRect.OffsetRect(cClientRect.left - nCaretLeft, 0);
cCaretPoint.Offset(cClientRect.left - nCaretLeft, 0);
}
}
相关文章:
- 如何在不使用滚动条的情况下使视图更改
- GTKMM 文本视图 epands 而不是滚动
- 如何在移动列表视图中添加滚动条?并且用户只能垂直滚动特定区域
- 如何将当前视图滚动到C++生成器中FMX备忘录中的特定行
- 列表视图中的 CListCtrl 垂直滚动条
- 当用户将列表视图项拖动到其滚动条上时,执行默认滚动行为
- 如何在C++中滚动锁定报表样式列表视图的第一列
- 黑莓 10 SDK 测试版 2 中的列表视图滚动问题
- 如何获取避免滚动条的树视图控件的最小大小
- 禁用列表视图中的水平滚动条
- 在 OnLButtonUp 中滚动和更新视图
- QListView:当从顶部删除项目时,如何自动滚动视图并保持视图中正确项目的当前选择
- QtQAbstractItemModel在树视图中滚动时速度较慢
- QGraphics 中不需要的边距与滚动条视图
- 如何访问Qtitan视图的滚动条?
- 删除鼠标滚轮QGraphics视图上的滚动功能
- 滚动QListView以在列表开始插入时保持项目在视图中
- 使用 cocos2d-x 3.6 实现滚动视图
- 将矩形(和点)滚动到视图中
- 如何实现网格/平铺图像视图与滚动在BB10