我有一個用於顯示診斷輸出的CEdit控件。
有時數據會溢出屏幕大小,所以自然我將Vertical Scroll屬性設置爲true(MFC對話框編輯器)。如何讓CEdit正確滾動?
但是,當我試圖滾動之前沒有清除窗口中的文本,並將新文本寫在它上面時。
結果是我滾動過去的一切都很糟糕。
我查找了一個繪製背景屬性或類似的東西,它將在滾動時(在重新繪製新數據之前)擦除窗口中的所有內容。
有什麼建議嗎?
我有一個用於顯示診斷輸出的CEdit控件。
有時數據會溢出屏幕大小,所以自然我將Vertical Scroll屬性設置爲true(MFC對話框編輯器)。如何讓CEdit正確滾動?
但是,當我試圖滾動之前沒有清除窗口中的文本,並將新文本寫在它上面時。
結果是我滾動過去的一切都很糟糕。
我查找了一個繪製背景屬性或類似的東西,它將在滾動時(在重新繪製新數據之前)擦除窗口中的所有內容。
有什麼建議嗎?
我想你可能需要設置自動VSCROLL和多行爲真,並自動HSCROLL爲false。
我用MFC 8.0附帶的VS2005測試了這個。我無法複製你的問題。
我添加了一個CEdit和一個CRichEditCtrl到基於對話框的應用程序。更改屬性Multiline,Auto VSCroll和Vertical滾動到true。使用SetWindowText方法將loooooong文本字符串添加到它們兩個中。我開始的應用程序和文字滾動得很好。
你做了什麼不同?
只是爲了確定。你沒有使用SetCaretPos方法,是嗎?在MSDN頁面中有一些關於此的注意事項。這是Knowledge Base article。
我似乎記得在代碼中看到SetCaretPos方法,我會檢查什麼時候回去工作。謝謝你的提示。 – CodeFusionMobile 2009-10-13 02:24:00
此外,我與2003年的工作,因爲它是舊的代碼,所以也可能會影響它。 – CodeFusionMobile 2009-10-13 15:27:17
添加了有關SetCaretPos的知識庫文章的直接鏈接。可悲的是,它沒有描述在CEdit中使用SetCaretPos的可能症狀。文章是爲在Visual C++ 4.2中使用的MFC 4.2編寫的,因此可能從那時起它已經被修復。試試吧,讓我們知道。 – Rope 2009-10-14 11:20:58
我們遇到了類似的問題。當我們得到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;
...
}
當然,我不得不將它泛化一點。我只是想讓你知道,是的,還有其他人看到你的問題,我們找到了解決方法。
除了自動HScroll之外,所有設置都已按照您的建議進行設置,但不起作用。 – CodeFusionMobile 2009-10-06 19:16:24