窗口句柄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
字符串,但如果我想在此子窗口中打印格式字符串,该怎么办?
答案 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);