Use ListView_CancelEditLabel() to implement wxListCtrl::EndEditLabel().
Windows XP and later finally added a special message to cancel label editing, use it if available. Also improve the documentation of this method. See #7663. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64374 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -252,7 +252,13 @@ public:
|
|||||||
|
|
||||||
This method allows to programmatically end editing a list control item
|
This method allows to programmatically end editing a list control item
|
||||||
in place. Usually it will only be called when editing is in progress,
|
in place. Usually it will only be called when editing is in progress,
|
||||||
i.e. if GetEditControl() returns non-NULL.
|
i.e. if GetEditControl() returns non-NULL. In particular, do not call
|
||||||
|
it from EVT_LIST_BEGIN_LABEL_EDIT handler as the edit control is not
|
||||||
|
yet fully created by then, just veto the event in this handler instead
|
||||||
|
to prevent the editing from even starting.
|
||||||
|
|
||||||
|
Notice that calling this method will result in EVT_LIST_END_LABEL_EDIT
|
||||||
|
event being generated.
|
||||||
|
|
||||||
Currently only implemented in wxMSW.
|
Currently only implemented in wxMSW.
|
||||||
|
|
||||||
|
@@ -1561,10 +1561,21 @@ bool wxListCtrl::EndEditLabel(bool cancel)
|
|||||||
if ( !hwnd )
|
if ( !hwnd )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// We shouldn't destroy the control ourselves according to MSDN, which
|
// Newer versions of Windows have a special message for cancelling editing,
|
||||||
// proposes WM_CANCELMODE to do this, but it doesn't seem to work so
|
// use it if available.
|
||||||
// emulate the corresponding user action instead.
|
#ifdef ListView_CancelEditLabel
|
||||||
::SendMessage(hwnd, WM_KEYDOWN, cancel ? VK_ESCAPE : VK_RETURN, 0);
|
if ( cancel && (wxApp::GetComCtl32Version() >= 600) )
|
||||||
|
{
|
||||||
|
ListView_CancelEditLabel(GetHwnd());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif // ListView_CancelEditLabel
|
||||||
|
{
|
||||||
|
// We shouldn't destroy the control ourselves according to MSDN, which
|
||||||
|
// proposes WM_CANCELMODE to do this, but it doesn't seem to work so
|
||||||
|
// emulate the corresponding user action instead.
|
||||||
|
::SendMessage(hwnd, WM_KEYDOWN, cancel ? VK_ESCAPE : VK_RETURN, 0);
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user