[英]SetWindowText with a single dimensional array
是否可以在Windows API的文本框中使用SetWindowsText()显示值的一维数组?
例如。 SetWindowText(hwndStatic3,sArray);
** * ** * ** * ** * ** * ** * 编辑 * ** * ** * ** * **
我在Windows api上有一个文本框,在其中使用GetWindowText()来检索写在文本框中的字符串,然后将字符串转换为十进制数组。 然后,在尝试使用另一个文本框中的SetwindowsText打印这些值时,我将此十进制数组值转换为十六进制值。 但是,只有数组的最后一个值正在打印。 如何打印所有值?
** * ** * ** * ** * ** * ** * 编辑 * ** * ** * ** * **
码:
GetWindowText(hwndtext1, value, 256);
for (i = 15; i >= 0; i--)
{
temp[i] = atoll(value); //converts sting to decimal
ulltoa(temp[i] , sArray, 16); //converts decimal to hexadecimal
buf[i] = temp[i];
}
SetWindowText(hwndStatic3, sArray);
SetWindowText
只是具有签名的宏:
BOOL SetWindowText(HWND, const TCHAR*);
根据您的构建设置,它将调用以下之一:
BOOL SetWindowTextA(HWND, const char*); //ansi version
BOOL SetWindowTextW(HWND, const wchar_t*); //unicode version
TCHAR
定义为:
#ifdef _UNICODE
typedef wchar_t TCHAR;
#else
typedef char TCHAR;
#endif
因此, 字符串数组与SetWindowText
不兼容,但是可以使用字符数组,只要该数组的类型为TCHAR *
,或者类型( char *
或wchar_t *
)与您的设置兼容即可。
首先,没有在Microsoft Visual C / C ++(这是我在Windows中使用的文件)中记录atoll
和ulltoa
,因此我使用的是我在网上找到的文档。 要么您的版本做得比我发现的要多,要么您的示例中遗漏了一些重要的代码。
基于循环控件,我猜您希望在从第一个控件读取的字符串中始终找到15个值。 但是... atoll
和ulltoa
函数一次只能对一个值进行操作,无助于输入列表。 因此,循环将第一个数字从字符串转换为64位int,然后将其转换为字符串15次。
由于您说的是最后一个值是唯一看到的值,因此您的函数实际上必须以某种在示例中不明显的方式来解析value
字符串。 但是, ulltoa
似乎总是将值放在同一字符串变量中的同一位置,循环中的每个后续调用都将覆盖先前的调用。 我的懒惰自我会像这样添加:
int len = 0;
char szOutput[15*20]; // enough space for 15 64 bit hex strings
GetWindowText(hwndtext1, value, 256);
for (i = 15; i >= 0; i--)
{
temp[i] = atoll(value); //converts sting to decimal
ulltoa(temp[i] , sArray, 16); //converts decimal to hexadecimal
buf[i] = temp[i];
len += sprintf( szOutput+len, "%s ", sArray );
}
szOutput[len-1] - '\0'; // remove the final space
SetWindowText(hwndStatic3, szOutput);
当然,使用sprintf
您还可以完全跳过ulltoa
调用,并将sprintf
行更改为:
len += sprintf( szOutput+len, "%16.16I64X", temp[i] );
(或所需的十六进制输出的任何样式/形式(有关详细信息,请参见printf
格式文档。)如果您希望列表为每行一项,请用换行符替换尾随空格。哦, %16.16I64X
的I64
%16.16I64X
是Microsoft的东西,在其他编译器/库中可能有所不同。
仅供参考,我使用的sprintf
技术使该函数继续追加到缓冲区的末尾,但将缓冲区中的偏移量( len
)增加刚刚追加的字符串的长度,即sprintf
返回的值。 这是组装字符串列表(例如您的字符串列表)的快速简便的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.