0

我做了一个像这样的小文本框

EBX =   CreateWindow(TEXT("EDIT"),  TEXT(""),  WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_NUMBER | WS_BORDER, 
            client.right - offset[1] - 200, client.top + offset[2] - 27, 
            45, 25, hwnd, (HMENU)ID_EDIT_SPEED, NULL, NULL);

那里一切都很好,但是当我尝试像这样更改里面的文本时,我遇到了一些问题

SendMessage(EBX, WM_SETTEXT, 0, (LPARAM)"12"); // working
int a = 40;
SendMessage(EBX, WM_SETTEXT, 0, (LPARAM)a); // not working

知道有什么问题吗?

4

3 回答 3

2

40 不是字符串,“40”是。如果要将数字转换为字符串,则必须使用sprintf等函数。

例如

int a = 40;
char str[20];
StringCchPrintf(str, _countof(str), "%ld", a);
SendMessage(EBX, WM_SETTEXT, 0, (LPARAM)str);
于 2013-04-14T12:23:47.163 回答
1

您不能盲目地将 int 类型转换为 char*,使用 sprintf、stringstream 或 std::to_string 来创建包含 int 值的文字表示的字符串。
或者,如果您想输入值为 40 的 char,则需要将指针传递给 null 终止字符数组。喜欢

char str[2];
str[0]=40;
str[1]=0;
于 2013-04-14T12:22:14.063 回答
0

将 40 转换为 c-string 并在 sendmessage 函数中使用

char buffer [33];
int i =40;
itoa (i,buffer,10);
SendMessage(EBX, WM_SETTEXT, 0, (LPARAM)buffer);
于 2013-04-14T12:27:13.007 回答