2013-03-11 49 views
1

是否可以在Windows API的文本框中使用SetWindowsText()显示值的单维数组?例如具有一维数组的SetWindowText

。 SetWindowText(hwndStatic3,sArray);

** * ** * ** * ** * ** * ** *编辑* ** * ** * ** * **

我有一个窗口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); 
+1

不,它只会显示一个字符串。您必须先将数组转换为字符串。 – 2013-03-11 23:07:39

+0

我不认为您可以提供代码(a)执行您提到的多个转换步骤,以及(b)尝试使用'SetWindowText()'将所述结果设置为窗口文本的代码?此外,你在Windows下这样做,所以你有麻烦**调试**这个? – WhozCraig 2013-03-11 23:55:58

+0

什么是循环? – alk 2013-03-12 07:34:52

回答

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 *)与您的设置不兼容的。

0

首先,atollulltoa没有记录在Microsoft Visual C/C++(这是我用于Windows),所以我正在从我在网上找到的文档工作。要么你的版本比我发现的版本做得更多,要么你的例子中遗漏了一些重要的代码。

基于循环控制,我猜你希望总是在第一个控件的读取的字符串中找到15个值。但是... atollulltoa函数一次只能在一个值上运行,并且无法通过输入列表前进。所以你的循环将的第一个数字从字符串转换为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是Microsoft的一件事在其他编译器/库中可能会有所不同

FYI,所述sprintf技术我用让功能保持附加到缓冲器的末端,但递增所述偏移到由刚刚所附串,其是由sprintf返回的值的长度的缓冲液(len)。这是一种快速简单的方式来组装字符串列表,比如你的。

相关问题