0
votes

i made a small textbox like this

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);

everything is fine there but when i try to change the text inside like this i got some problems

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

any idea what is wrong ?

3

3 Answers

2
votes

40 is not a string, "40" is. If you want to convert a number to a string you must use a function like sprintf, etc.

E.g.

int a = 40;
char str[20];
StringCchPrintf(str, _countof(str), "%ld", a);
SendMessage(EBX, WM_SETTEXT, 0, (LPARAM)str);
1
votes

You cannot, blindly typecast int to char*, use sprintf, stringstream or std::to_string to create string that holds literal representation of int value.
Or if you want to otput char with value 40 you need to pass pointer to null terminate array of chars. Like

char str[2];
str[0]=40;
str[1]=0;
0
votes

convert 40 to c-string and use it in sendmessage function

char buffer [33];
int i =40;
itoa (i,buffer,10);
SendMessage(EBX, WM_SETTEXT, 0, (LPARAM)buffer);