如何将格式字符串打印到窗口中?

时间:2011-05-04 15:44:50

标签: c++ windows winapi

窗口句柄HWND hwnd已经可用,现在我想打印一个格式字符串 进入此hwnd描述的窗口。我不熟悉Windows API,非常感谢您的帮助。

例如:

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

是否有解决此问题的功能?谢谢!

更新:我在使用IDA Pro SDK时遇到此问题。

在下面创建一个示例子窗口:

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

我使用SendMessage(hwnd, WM_SETTEXT, NULL, (LPARAM)"hello world");在子窗口中打印hello world字符串,但如果我想在此子窗口中打印格式字符串,该怎么办?

3 个答案:

答案 0 :(得分:2)

它并非那么简单。

首先,您需要设置窗口过程来处理WM_PAINT。然后,这将为您提供HDC (Device Context)。使用此HDC,您可以调用DrawText来绘制字符串。您最需要使用sprintf形成字符串。

答案 1 :(得分: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-flavour sprintf(),就像printf()一样,但它需要一个额外的字符串作为参数。使用StringCchPrintf需要额外的长度参数,以避免缓冲区溢出,这可能导致安全问题;如果您计划进行任何“真实世界”,最好先了解这些“安全”版本。 )

-

快速说明这与其他答案的关系:通常有两种基本方法可以在Windows屏幕上显示文本。最简单的方法是创建一堆标签或文本控件,让它们为您绘制图纸,并将文本发送给它们。如果您来自基于unix风格的控制台环境(printf等),这是最简单的入门方式。这似乎是你已经使用的方法,以及我正在使用的方法。另一种方法是自己绘制文本。这要复杂得多,因为您需要创建自己的控件并处理来自Windows的各种请求,以便当Windows要求时,您的控件将重绘自身 - 使用DrawText或其他API。这就是那些控件实际上代表您做的事情。这使您可以完全控制文本放置,字体,颜色等,但如果您只想为简单的小程序显示某些状态或结果文本,则有点过分。任何编程Windows书籍都会有很多关于这种方法的细节。)

答案 2 :(得分:1)

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