PRB: Inter-thread SetWindowText() Fails to Update Window Text

ID: Q125687

The information in this article applies to:

SYMPTOMS

Calling SetWindowText() to set a window's text from a thread other than the one that created the window fails to display the new text.

CAUSE

When SetWindowText() is called from another thread, instead of sending a WM_SETTEXT message to the appropriate window procedure, only DefWindowProc() is called, so the edit and static controls do not paint the control appropriately because the appropriate code is never executed, so the text on the screen is never updated. In other words, calling SetWindowText() updates the buffer internally, but the change is not reflected on the screen.

RESOLUTION

One obvious workaround is to refrain from calling SetWindowText() from another thread, if possible.

If design considerations don't allow doing this, do one of the following:

STATUS

This inter-thread SetWindowText() behavior is by design in Windows version 3.x. It was maintained in Windows 95 for backward compatibility purposes. Applications written for Windows version 3.x can expect their inter-thread SetWindowText() calls to behave as they did in Windows version 3.x.

MORE INFORMATION

Calling SetWindowText() from another thread in Windows NT displays the window text correctly, so it works differently from Windows 95.

Additional query words:

Keywords          : kbGrpUser kbWinOS95 kbWinOS98 kbWndw kbWndwMsg 
Issue type        : kbprb

Last Reviewed: January 2, 1999