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:
parent
be35fb7a15
commit
82112b5de2
@ -115,6 +115,8 @@ public:
|
||||
wxCoord width,
|
||||
wxCoord widthTotal) const;
|
||||
|
||||
virtual void SetId(wxWindowID winid);
|
||||
|
||||
#if wxUSE_DRAG_AND_DROP
|
||||
virtual void SetDropTarget( wxDropTarget *dropTarget );
|
||||
#endif // wxUSE_DRAG_AND_DROP
|
||||
|
@ -236,7 +236,7 @@ public:
|
||||
|
||||
// window id uniquely identifies the window among its siblings unless
|
||||
// it is wxID_ANY which means "don't care"
|
||||
void SetId( wxWindowID winid ) { m_windowId = winid; }
|
||||
virtual void SetId( wxWindowID winid ) { m_windowId = winid; }
|
||||
wxWindowID GetId() const { return m_windowId; }
|
||||
|
||||
// generate a unique id (or count of them consecutively), returns a
|
||||
|
@ -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
|
||||
// ---------------------------------------------------------------------------
|
||||
|
Loading…
Reference in New Issue
Block a user