我有一个CEdit控件,用于显示诊断输出 有时数据会溢出屏幕大小,因此我自然将Vertical Scroll属性设置为true(MFC对话框编辑器)。
但是,当我尝试滚动窗口中的文本之前没有清除,并且新文本被写在上面。
结果是我滚动过去的一切都很糟糕。
我已经找了一个绘制背景属性或类似的东西,它会在滚动时擦除窗口中的所有内容(在重新绘制新数据之前)。
有什么建议吗?
答案 0 :(得分:2)
我认为您可能希望将自动VScroll 和多行设置为true,将自动HScroll 设置为false。
答案 1 :(得分:1)
我们遇到了类似的问题。当我们得到WM_VSCROLL时,我们最终必须使父窗口的区域无效以使其更新。我试图这样做,因为用户demorge在这里说:
SetBkMode(hdc, TRANSPARENT) doesn't work
但是我们的代码没有使用句柄,我们实际上使用CWnd类,所以我们最终在WindowProc中这样做了:
switch(message)
{
...
case WM_VSCROLL:
case WM_HSCROLL:
LRESULT answer;
PAINTSTRUCT ps;
CDC* pdc;
CWnd* MyParentHWnd;
// We want the scroll to work the same way it has always worked for our
// ancestor class. Let them handle the scrolling and save off their
// return.
answer = AncestorClass::WindowProc(message, wParam, lParam);
pdc = BeginPaint(&ps);
// DO NOT change the assignement operator in the conditional below to an
// equality operator. We are actually trying to get the parent window and
// and storing locally, and then verifying that we didn't get back null.
// This is a purposeful design decision.
if (MyParentHWnd = GetParent()){
RECT MyRect;
GetClientRect(&MyRect);
ClientToScreen(&MyRect);
MyParentHWnd->ScreenToClient(&MyRect);
MyParentHWnd->InvalidateRect(&MyRect);
}
EndPaint(&ps);
return answer;
break;
...
}
当然,我不得不对它进行一般化。我只是想让你知道是的,还有其他人看到了你的问题,我们找到了解决方法。
答案 2 :(得分:0)
我用VS2005测试了这个,它随MFC 8.0一起提供。我无法复制你的问题。
我在基于对话框的应用程序中添加了一个CEdit和一个CRichEditCtrl。已更改属性Multiline,Auto VSCroll和Vertical Scroll为true。使用SetWindowText方法将loooooong文本字符串放入其中。我启动了应用程序并且文本滚动得很好。
你做了哪些不同的事?
只是为了确定。你没有使用SetCaretPos方法,是吗?在MSDN页面中有一些关于这一点的说明。这是Knowledge Base article。