如何将格式字符串打印到窗口中
How to print format string into a window?
窗口句柄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
字符串在子窗口,但我应该怎么做,如果我想打印格式字符串到这个子窗口?
没那么简单。
首先你需要设置你的窗口过程来处理WM_PAINT。这将给你一个HDC(设备上下文)。有了这个HDC,你可以调用DrawText来绘制你的字符串。您很可能需要使用sprintf来形成字符串。
sprintf(myString, "number is %d", num);
SendMessage(hwnd, WM_SETTEXT, NULL, (LPARAM)myString);
如果您已经有了可以发送文本的子窗口,那么您可以使用类似于以下内容:
#include <strsafe.h>
#define MAXSTRING 1024
CHAR string[MAXSTRING];
StringCchPrintf(string, ARRAYSIZE(string), "number is %d", num);
SendMessage(hwnd, WM_SETTEXT, NULL, (LPARAM)string);
使用StringCchPrintf在中间字符串中格式化文本,然后使用WM_SETTEXT将该字符串发送到子窗口以显示。没有一个函数可以一次完成这两件事,但是如果你发现自己经常这样做,也没有什么可以阻止你编写一个辅助函数来包装这两件事。
(我在这里使用了StringCchPrintf,这是一个Windows API,你也可以使用c风格的sprintf(),就像printf()一样,但它需要一个额外的字符串作为参数。使用StringCchPrintf的优点是,它使用一个额外的长度参数来避免缓冲区溢出,这可能导致安全问题;如果你打算做任何"现实世界",了解这些"安全"的版本是一个很好的实践。
,
快速说明这与另一个答案的关系:在Windows中,通常有两种基本方法可以在屏幕上显示文本。最简单的方法是创建一堆标签或文本控件,让它们为你绘图,并将文本发送给它们。如果您来自基于unix风格的控制台环境(printf等),这是最简单的入门方法。这似乎是您已经使用的方法,也是我在上面使用的方法。另一种方法是自己画文本。这是相当复杂的一点,因为你需要创建自己的控件,并处理来自Windows的各种请求,这样你的控件就会在Windows请求时重新绘制自己-使用DrawText或其他api。这就是这些控件实际上代表你做的事情。这使您可以完全控制文本位置、字体、颜色等,但如果您只想为一个简单的applet显示一些状态或结果文本,则有些多余。任何一本Windows编程的书都有很多关于这种方法的细节。
- 为什么如果我从键盘输入EOF克里昂不要在运行窗口打印程序的输出?
- 在窗口中加速打印f和cout
- 创建位图图像未在窗口上打印
- 打印窗口发送消息WM_PAINT或WM_PRINT
- 在带有转义反斜杠的窗口上打印加速路径
- PDCurses 窗口在某些区域不打印字母
- 窗口后台处理程序究竟如何确定它将发送到打印处理器的数据类型?
- 打印到Visual Studio中的输出窗口
- 不打印窗口的名称
- 将键盘上输入的文本打印到 GLUT 窗口
- 在 dlib 窗口中打印文本
- 我可以使用我打印到控制台窗口的内容作为输入吗
- 为什么在Qt C++关闭主窗口后打印消息
- 如何使用qt5(QtQuick 2.1)及更高版本在窗口上打印度数符号
- 河内塔算法无需打印任何内容到终端窗口
- 将f打印到控制台窗口和文件
- 如何在主窗口上打印来自其他类的消息(QString)
- 在Visual C++IDE的输出窗口上打印输出
- 如何扫描外来字符(如 ä、ß、ő、ű)并将它们打印到控制台窗口?
- 在窗口上的float中额外的0打印