Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将格式字符串打印到窗口中?_C++_Windows_Winapi - Fatal编程技术网

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

C++ 如何将格式字符串打印到窗口中?,c++,windows,winapi,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 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)“helloworld”)在子窗口中打印
hello world
字符串,但是如果我想在子窗口中打印格式字符串,我该怎么办?

其实没那么简单


首先,您需要设置要处理的窗口过程。这将给你一个新的答案。使用此HDC,您可以调用来绘制字符串。您将需要使用最有可能的方法形成字符串。

其实并没有那么简单


首先,您需要设置要处理的窗口过程。这将给你一个新的答案。使用此HDC,您可以调用来绘制字符串。您需要使用最有可能的格式来形成字符串。

如果您已经有一个子窗口可以向其发送文本,则可以使用类似于以下内容的格式:

#include <strsafe.h>
#define MAXSTRING 1024

CHAR string[MAXSTRING];
StringCchPrinf(string, ARRAYSIZE(string), "number is %d", num);
SendMessage(hwnd, WM_SETTEXT, NULL, (LPARAM)string);
#包括
#定义MAXSTRING 1024
字符字符串[MAXSTRING];
StringCchPrinf(字符串,数组化(字符串),“数字为%d”,num);
SendMessage(hwnd,WM_SETTEXT,NULL,(LPARAM)字符串);
使用StringCchPrintf将文本格式化为中间字符串,然后使用WM_SETTEXT将该字符串发送到子窗口进行显示。没有一个函数可以同时完成这两个任务,但是如果您经常这样做,那么没有任何东西可以阻止您编写一个helper函数来包装这两个任务

(我在这里使用了StringCchPrintf,这是一个Windows API,您也可以使用C-flavor sprintf(),它与printf()类似),但它需要一个额外的字符串作为参数。使用StringCchPrintf的优点是,它需要一个额外的长度参数,用于避免缓冲区溢出,这可能会导致安全问题;如果您计划进行任何“真实世界”,最好了解这些“安全”版本。)

--


快速说明这与另一个答案的关系:在Windows中,获取屏幕上的文本通常有两种基本方法。最简单的方法是创建一组标签或文本控件,让它们为您绘制图形,然后向它们发送文本。如果您来自基于unix风格控制台的环境(printf等),这是最简单的入门方法。这似乎是您已经在使用的方法,也是我在上面使用的方法。另一种方法是亲自绘制文本。这相当复杂,因为您需要创建自己的控件并处理来自Windows的各种请求,以便在Windows请求时,您的控件将使用DrawText或其他API重新绘制自己。这就是那些控件实际上代表您所做的事情。这使您可以完全控制文本的位置、字体、颜色等,但如果您只想为一个简单的小程序显示一些状态或结果文本,这就有些过分了。任何一本Windows编程书籍都会详细介绍这种方法。)

如果您已经有了可以发送文本的子窗口,那么您可以使用类似于以下内容的工具:

#include <strsafe.h>
#define MAXSTRING 1024

CHAR string[MAXSTRING];
StringCchPrinf(string, ARRAYSIZE(string), "number is %d", num);
SendMessage(hwnd, WM_SETTEXT, NULL, (LPARAM)string);
#包括
#定义MAXSTRING 1024
字符字符串[MAXSTRING];
StringCchPrinf(字符串,数组化(字符串),“数字为%d”,num);
SendMessage(hwnd,WM_SETTEXT,NULL,(LPARAM)字符串);
使用StringCchPrintf将文本格式化为中间字符串,然后使用WM_SETTEXT将该字符串发送到子窗口进行显示。没有一个函数可以同时完成这两个任务,但是如果您经常这样做,那么没有任何东西可以阻止您编写一个helper函数来包装这两个任务

(我在这里使用了StringCchPrintf,这是一个Windows API,您也可以使用C-flavor sprintf(),它与printf()类似),但它需要一个额外的字符串作为参数。使用StringCchPrintf的优点是,它需要一个额外的长度参数,用于避免缓冲区溢出,这可能会导致安全问题;如果您计划进行任何“真实世界”,最好了解这些“安全”版本。)

--


快速说明这与另一个答案的关系:在Windows中,获取屏幕上的文本通常有两种基本方法。最简单的方法是创建一组标签或文本控件,让它们为您绘制图形,然后向它们发送文本。如果您来自基于unix风格控制台的环境(printf等),这是最简单的入门方法。这似乎是您已经在使用的方法,也是我在上面使用的方法。另一种方法是亲自绘制文本。这相当复杂,因为您需要创建自己的控件并处理来自Windows的各种请求,以便在Windows请求时,您的控件将使用DrawText或其他API重新绘制自己。这就是那些控件实际上代表您所做的事情。这使您可以完全控制文本的位置、字体、颜色等,但如果您只想为一个简单的小程序显示一些状态或结果文本,这就有些过分了。任何一本Windows编程书籍都会详细介绍这种方法。)

HWND指的是哪种语言和哪类窗口?(顶级/文本框/列表框)?@Alex K.我已经更新了问题:)HWND指的是什么语言和窗口的类别?(顶级/文本框/列表框)?@Alex K.我更新了问题:)也检查一下:也检查一下: