Fix changing wxWindow ID in wxMSW.

This must be done both at wxWidgets and MSW level, otherwise changing the ID
results in window not recognizing itself as the recipient of the messages sent
to it by Windows.

Closes #3697.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@76672 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2014-06-09 00:54:12 +00:00
parent be35fb7a15
commit 82112b5de2
3 changed files with 17 additions and 1 deletions

View File

@@ -552,6 +552,20 @@ bool wxWindowMSW::Create(wxWindow *parent,
return true;
}
void wxWindowMSW::SetId(wxWindowID winid)
{
wxWindowBase::SetId(winid);
// Also update the ID used at the Windows level to avoid nasty surprises
// when we can't find the control when handling messages for it after
// changing its ID because Windows still uses the old one.
if ( GetHwnd() )
{
if ( !::SetWindowLong(GetHwnd(), GWL_ID, winid) )
wxLogLastError(wxT("SetWindowLong(GWL_ID)"));
}
}
// ---------------------------------------------------------------------------
// basic operations
// ---------------------------------------------------------------------------