6 out of 19 rated this helpful Rate this topic

WM_GETTEXT message

Copies the text that corresponds to a window into a buffer provided by the caller.

#define WM_GETTEXT                      0x000D

Parameters

wParam

The maximum number of characters to be copied, including the terminating null character.

ANSI applications may have the string in the buffer reduced in size (to a minimum of half that of the wParam value) due to conversion from ANSI to Unicode.

lParam

A pointer to the buffer that is to receive the text.

Return value

The return value is the number of characters copied, not including the terminating null character.

Remarks

The DefWindowProc function copies the text associated with the window into the specified buffer and returns the number of characters copied. Note, for non-text static controls this gives you the text with which the control was originally created, that is, the ID number. However, it gives you the ID of the non-text static control as originally created. That is, if you subsequently used a STM_SETIMAGE to change it the original ID would still be returned.

For an edit control, the text to be copied is the content of the edit control. For a combo box, the text is the content of the edit control (or static-text) portion of the combo box. For a button, the text is the button name. For other windows, the text is the window title. To copy the text of an item in a list box, an application can use the LB_GETTEXT message.

When the WM_GETTEXT message is sent to a static control with the SS_ICON style, a handle to the icon will be returned in the first four bytes of the buffer pointed to by lParam. This is true only if the WM_SETTEXT message has been used to set the icon.

Rich Edit: If the text to be copied exceeds 64K, use either the EM_STREAMOUT or EM_GETSELTEXT message.

Sending a WM_GETTEXT message to a non-text static control, such as a static bitmap or static icon control, does not return a string value. Instead, it returns zero. In addition, in early versions of Windows, applications could send a WM_GETTEXT message to a non-text static control to retrieve the control's ID. To retrieve a control's ID, applications can use GetWindowLong passing GWL_ID as the index value or GetWindowLongPtr using GWLP_ID.

Requirements

Minimum supported client

Windows 2000 Professional

Minimum supported server

Windows 2000 Server

Header

Winuser.h (include Windows.h)

See also

Reference
DefWindowProc
GetWindowLong
GetWindowLongPtr
GetWindowText
GetWindowTextLength
WM_GETTEXTLENGTH
WM_SETTEXT
Conceptual
Windows
Other Resources
EM_GETSELTEXT
EM_STREAMOUT
LB_GETTEXT

 

 

Send comments about this topic to Microsoft

Build date: 9/11/2011

Did you find this helpful?
(1500 characters remaining)
Community Content Add
Annotations FAQ
Quick notes
It's rare, but sometimes WM_GETTEXT would give me back a string without a terminator (not sure if it's a problem on my end or not). The symptom is text from the control followed by a bunch of gobbledygook. An easy solution is this:

length = SendMessage(hwnd, WM_GETTEXT, 99, (LPARAM)buf); 
buf[length] = _T('\0'); // make sure you have the space for the extra character

For a multiline edit box, the lines are ended with \n or \r\n, sometimes except the last line. You can extract an individual line by using EM_GETLINE. Unfortunately, I couldn't find an EM_SETLINE, so you may have to use WM_GETTEXT to extract the text with if you want to modify stuff that's in the edit control.

Feel free to add to this or make corrections.
Value
WM_GETOBJECT = &H3D