wxMSW: generate wxClipboardTextEvent from wxTextCtrl with wxTE_RICH style too

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH@52547 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík
2008-03-15 12:33:04 +00:00
parent 540ed0d7f4
commit 8fd5fa3a0e
4 changed files with 37 additions and 4 deletions

View File

@@ -157,6 +157,7 @@ wxMSW:
SmartPhone.
- Fixed rendering of borders for wxTextCtrl with wxTE_RICH(2) style when
using Windows XP's Classic UI theme.
- Text controls with wxTE_RICH style now also generate wxClipboardTextEvents.
wxGTK:

View File

@@ -30,10 +30,10 @@ was copied or cut.
\wxheading{Remarks}
These events are currently only generated by \helpref{wxComboBox}{wxcombobox} and
under Windows and \helpref{wxTextCtrl}{wxtextctrl} under Windows and GTK and
are not generated for the text controls with \texttt{wxTE\_RICH} style under
Windows.
These events are currently only generated by \helpref{wxTextCtrl}{wxtextctrl}
under GTK. They are generated by all controls under Windows. (Prior to version
2.8.8, only wxComboBox and wxTextCtrl without wxTE\_RICH style generated them
under Windows.)
\wxheading{Derived from}

View File

@@ -272,6 +272,8 @@ protected:
int m_updatesCount;
private:
void OnKeyDown(wxKeyEvent& event);
DECLARE_EVENT_TABLE()
DECLARE_DYNAMIC_CLASS_NO_COPY(wxTextCtrl)

View File

@@ -238,6 +238,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxTextCtrl, wxTextCtrlBase)
BEGIN_EVENT_TABLE(wxTextCtrl, wxTextCtrlBase)
EVT_CHAR(wxTextCtrl::OnChar)
EVT_KEY_DOWN(wxTextCtrl::OnKeyDown)
EVT_DROP_FILES(wxTextCtrl::OnDropFiles)
#if wxUSE_RICHEDIT
@@ -1968,6 +1969,35 @@ void wxTextCtrl::OnChar(wxKeyEvent& event)
event.Skip();
}
void wxTextCtrl::OnKeyDown(wxKeyEvent& event)
{
// richedit control doesn't send WM_PASTE, WM_CUT and WM_COPY messages
// when Ctrl-V, X or C is pressed and this prevents wxClipboardTextEvent
// from working. So we work around it by intercepting these shortcuts
// ourselves and emitting clipboard events (which richedit will handle,
// so everything works as before, including pasting of rich text):
if ( event.GetModifiers() == wxMOD_CONTROL && IsRich() )
{
switch ( event.GetKeyCode() )
{
case 'C':
Copy();
return;
case 'X':
Cut();
return;
case 'V':
Paste();
return;
default:
break;
}
}
// no, we didn't process it
event.Skip();
}
WXLRESULT wxTextCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
{
// we must handle clipboard events before calling MSWWindowProc, otherwise