【问题标题】:Setting the scroll position in edit control在编辑控件中设置滚动位置
【发布时间】:2011-06-10 12:58:54
【问题描述】:

我正在尝试在编辑控件中设置滚动位置,我想将其设置为从顶部到底部的 20%。我怎样才能通过百分比来做到这一点?

【问题讨论】:

    标签: c windows winapi controls edit


    【解决方案1】:

    当窗口的标准垂直滚动条中发生滚动事件时,WM_VSCROLL 消息将发送到窗口。当控件中发生滚动事件时,该消息也会发送给垂直滚动条控件的所有者。

    http://msdn.microsoft.com/en-us/library/bb787577%28v=vs.85%29.aspx

    你可以先GetScrollRange()(http://msdn.microsoft.com/en-us/library/bb787587%28v=vs.85%29.aspx),计算有多少行,然后计算百分比.之后 WindowProc()VM_SCROLL 或者更简单的解决方案使用 SetScrollPos() 函数 http://msdn.microsoft.com/en-us/library/bb787597%28v=vs.85%29.aspx

    你可以在这里找到所有的滚动功能http://msdn.microsoft.com/en-us/library/ff486021%28v=VS.85%29.aspx

    希望这会有所帮助。

    【讨论】:

    • 谢谢,知道为什么即使禁用 AUTOSCROLL 标志,当文本添加到多行编辑控件时,垂直滚动也会移动?
    • ES_AUTOHSCROLL 样式告诉编辑控件在用户输入文本时在必要时水平滚动文本。如果未指定此样式,则编辑控件无法水平滚动。对于没有 ES_AUTOHSCROLL 的单行编辑控件,只接受填充控件可见区域的字符。对于没有 ES_AUTOHSCROLL 的多行编辑控件,当用户输入的文本超过单行显示时,文本将换行到下一行...
    • ...如果为多行编辑控件指定 ES_AUTOHSCROLL,则当用户输入的文本多于单行显示时,控件会水平滚动;文本不会换行。 ~msdn.microsoft.com/en-us/library/…
    • 也许你应该尝试用SetScrollRange()设置范围
    • SetScrollPosition() 为一个常数值(比如你的 20%),并在每个输入字符上设置它。让我知道这是否是一个解决方案。
    【解决方案2】:

    特别是对于设置滚动位置的编辑控件,似乎不会将文本实际移动到预期的位置。滚动条位置已移动,但文本仍保持原位。

    要滚动编辑框,我发现以下内容可以按预期工作:

    double desiredPercentage = 0.7;
    CEdit* pEditBox = (CEdit*)GetDlgItem(IDC_CONTROLID)
    
    int totalLines = pEditLog->GetLineCount();
    // Truncatest to the nearest int, do different rounding method for round up/down.
    int scrollLine = (int)(desiredPercentage * (double)totalLines));
    
    pEditBox->LineScroll(scrollLine);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-03
      • 2012-10-24
      • 2011-09-20
      • 1970-01-01
      相关资源
      最近更新 更多