2011-05-04 66 views
0

窗口句柄HWND hwnd已經可用,現在我想將格式字符串 打印到此hwnd所述的窗口中。我不熟悉Windows API,非常感謝您的幫助。如何將格式字符串打印到窗口中?

例如:

num = 23; 
printFunction(hwnd, "number is %d", num); 

有沒有辦法解決這個問題的功能?謝謝!

UPDATE:在使用IDA Pro SDK期間遇到此問題。

下面創建一個子窗口示例:

HWND hwnd = NULL; 
TForm *form = create_tform("Sample subwindow", &hwnd); 

我用SendMessage(hwnd, WM_SETTEXT, NULL, (LPARAM)"hello world");打印hello world字符串中的子窗口,但我應該怎麼做,如果我想打印格式字符串到這個子窗口?

+0

HWND指什麼語言和什麼類的窗口? (頂級/文本框/列表框)? – 2011-05-04 15:53:46

+0

@Alex K.我已更新問題,:) – Jason 2011-05-04 16:08:55

回答

1
sprintf(myString, "number is %d", num); 
SendMessage(hwnd, WM_SETTEXT, NULL, (LPARAM)myString); 
2

其實並不那麼簡單。

首先,您需要設置窗口過程來處理WM_PAINT。這會給你一個HDC (Device Context)。有了這個HDC,你可以撥打DrawText來繪製你的字符串。您將需要使用sprintf最有可能形成您的字符串。

+0

另請查看:http://books.google.com/books?id=eDvx4Qx63b0C&pg=PA333&lpg=PA333&dq=mfc+drawtext+example&source=bl&ots=v3q7CPjzKc&sig=yws05P0WIvRunEHTy- PxdviAle0&HL = EN&EI = fYzBTeuDBYbm0QGY-Z24Cg&SA = X&OI = book_result&CT =導致&resnum = 10&VED = 0CGAQ6AEwCQ#v = onepage&q = MFC%20drawtext%20example&F =假 – yasouser 2011-05-04 17:31:19

1

如果你已經有一個子窗口,您可以發送文字,那麼你可以使用類似下面的東西:

#include <strsafe.h> 
#define MAXSTRING 1024 

CHAR string[MAXSTRING]; 
StringCchPrinf(string, ARRAYSIZE(string), "number is %d", num); 
SendMessage(hwnd, WM_SETTEXT, NULL, (LPARAM)string); 

使用StringCchPrintf在中間串的文本格式,然後用WM_SETTEXT來將該字符串發送到子窗口進行顯示。沒有任何功能可以一次完成,但是如果你經常這樣做,沒有什麼能夠阻止你編寫一個輔助函數來包裝這兩個函數。 (我在這裏使用了StringCchPrintf,這是一個Windows API,你也可以使用C-flavor sprintf(),它就像printf()一樣,但它需要一個額外的字符串作爲參數。使用StringCchPrintf的原因是它需要一個額外的長度參數來避免緩衝區溢出,這可能會導致安全問題;如果您打算做任何「真實世界」,最好了解這些「安全」版本。)

-

速記如何這涉及到對方的回答:有一般兩到Windows在屏幕上獲取文本的基本方法。最簡單的方法是創建一堆標籤或文本控件,讓他們爲您繪製圖紙,並將文本發送給他們。如果您是來自基於unix風格的基於控制檯的環境(printf等),那麼這是最簡單的入門方法。這似乎是你已經使用的方法,以及我上面使用的方法。另一種方法是自己實際繪製文本。這要複雜得多,因爲您需要創建自己的控件並處理來自Windows的各種請求,以便在Windows要求時使用DrawText或其他API來控制自身。這是這些控件實際上代表您執行的操作。這使您可以完全控制文本的位置,字體,顏色等,但如果您只想爲簡單的小程序顯示某些狀態或結果文本,則有點矯枉過正。任何編程Windows書籍都會有大量關於這種方法的細節。)

相關問題