【发布时间】:2011-06-10 12:58:54
【问题描述】:
我正在尝试在编辑控件中设置滚动位置,我想将其设置为从顶部到底部的 20%。我怎样才能通过百分比来做到这一点?
【问题讨论】:
标签: c windows winapi controls edit
我正在尝试在编辑控件中设置滚动位置,我想将其设置为从顶部到底部的 20%。我怎样才能通过百分比来做到这一点?
【问题讨论】:
标签: c windows winapi controls edit
当窗口的标准垂直滚动条中发生滚动事件时,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
希望这会有所帮助。
【讨论】:
SetScrollRange()设置范围
SetScrollPosition() 为一个常数值(比如你的 20%),并在每个输入字符上设置它。让我知道这是否是一个解决方案。
特别是对于设置滚动位置的编辑控件,似乎不会将文本实际移动到预期的位置。滚动条位置已移动,但文本仍保持原位。
要滚动编辑框,我发现以下内容可以按预期工作:
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);
【讨论】: