是否可以在windows api的文本框中使用SetWindowsText()显示单维数组值?
例如,。 SetWindowText(hwndStatic3,sArray);
的 的 ** * ** * ** * 的** * ** * ** * 修改的 * < / EM> ** * ** * ** * **
我在windows api上有一个文本框,我使用GetWindowText()来检索文本框中写入的字符串,然后将字符串转换为十进制数组。然后我将此十进制数组值转换为十六进制值,因为我试图在另一个文本框中使用SetwindowsText打印这些值。但是,只有数组的最后一个值是打印。如何打印所有值?
的 的 ** * ** * ** * 的** * ** * ** * 修改的 * < / EM> ** * ** * ** * **
代码:
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);
答案 0 :(得分:1)
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 *
)。
答案 1 :(得分:0)
首先,atoll
和ulltoa
未记录Microsoft Visual C / C ++(我用于Windows),所以我正在使用我在网上找到的文档。你的版本比我发现的版本更多,或者你从你的例子中遗漏了一些重要的代码。
基于循环控制,我猜你总是会在第一个控件中读取的字符串中找到15个值。但是...... atoll
和ulltoa
函数一次只能在一个值上运行,并且无法通过输入列表前进。所以你的循环是将第一个数字从字符串转换为64位int,然后将其转换为字符串15次。
由于您说 last 值是您看到的唯一值,因此您的函数实际上必须以某种方式解析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
格式文档。)如果您希望列表每行一个项目,则用换行符替换尾随空格。哦,I64
中的%16.16I64X
是微软的东西,在其他编译器/库中可能会有所不同。
仅供参考,我使用的sprintf
技术让函数继续附加到缓冲区的末尾,但是将偏移量增加到缓冲区(len
)中,增加了刚刚附加的字符串的长度,这是sprintf
返回的值。这是一种快速简便的方法来组合你的字符串列表。