Mihai Vilcu
Mihai Vilcu

Reputation: 1967

win32 WM_SETTEXT not working

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 ?

Upvotes: 0

Views: 7921

Answers (3)

shivakumar
shivakumar

Reputation: 3407

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

Upvotes: 0

Jonathan Potter
Jonathan Potter

Reputation: 37192

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

Upvotes: 2

alexrider
alexrider

Reputation: 4463

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;

Upvotes: 1

Related Questions