2011-05-05 97 views
0

成功解決了這個問題how to print a format string into window後,又出現了另一個問題。如何將多個格式字符串打印到窗口中?

如果有許多格式字符串,如何將它們打印到窗口中?例如下面:

sprintf(buf, formatString-1...); 
SendMessage(hwnd, WM_SETTEXT, NULL, (LPARAM)buf); 
... 
sprintf(buf, formatString-2...); 
SendMessage(hwnd, WM_SETTEXT, NULL, (LPARAM)buf); 
... 
sprintf(buf, formatString-3...); 
SendMessage(hwnd, WM_SETTEXT, NULL, (LPARAM)buf); 
... 

注意只有formatString的-3印刷成窗口,而我希望把他們都到窗口。如何做到這一點?(PS:請勿使用buf concatenate)謝謝!〜

+0

短訴諸所有者繪製渲染控制,你會得到所有的三串在控制的唯一方法是將它們串聯幷包含在一個單一的WM_SETTEXT消息。你能否詳細說明爲什麼連接不可接受? – Bill 2011-05-05 03:38:37

+0

您使用的是哪一類窗口?前兩個字符串可能會被第三個字符串覆蓋,因此您只能看到最後一個字符串。 – 2011-05-05 03:57:14

+0

你打算在主窗口中打印多行文本嗎? – 2011-05-05 04:08:07

回答

2

您是否試圖生成一個控制檯樣式或日誌樣式的窗口,其中有多行文本,一個接一個?

如果是這樣,最簡單的方法是選擇一個控件,爲您做到這一點。像靜態(通常用於標籤)的東西通常只對一個字符串有用。如果要顯示多行輸出,您的兩個主要選項是:

  • 列表框控件:使用LB_ADDSTRING將項目添加到結尾。 (您可能想要使用LB_SETCURSEL或類似的選項來選擇最後一個項目,以便在項目添加到最後時,它將滾動以顯示最後一個項目。)

  • 只讀多行編輯控件:使用the technique outlined here on MSDN將文本追加到最後。請注意,採用這種方法,您需要自己提供「\ r \ n」來創建新行。

2

每個WM_SETTEXT消息覆蓋前一個。這就是爲什麼你只能觀察最終消息的效果。

雖然您在發送WM_SETTEXT消息之前聲明不想連接緩衝區,但這是WM_SETTEXT的唯一選項。

如果您有編輯控件,則可以使用EM_REPLACESEL消息插入文本。

相關問題