richedit 1.0 controls now send the left up event

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15870 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2002-06-18 00:34:45 +00:00
parent 47df2b8c54
commit 1dae1d0098

View File

@@ -300,10 +300,17 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
#if wxUSE_RICHEDIT #if wxUSE_RICHEDIT
if ( IsRich() ) if ( IsRich() )
{ {
// have to enable events manually // enable the events we're interested in: we want to get EN_CHANGE and
LPARAM mask = ENM_CHANGE | ENM_DROPFILES | ENM_SELCHANGE | ENM_UPDATE; // EN_UPDATE as for the normal controls
LPARAM mask = ENM_CHANGE | ENM_UPDATE;
if ( m_windowStyle & wxTE_AUTO_URL ) if ( GetRichVersion() == 1 )
{
// we also need EN_MSGFILTER for richedit 1.0 for the reasons
// explained in its handler
mask |= ENM_MOUSEEVENTS;
}
else if ( m_windowStyle & wxTE_AUTO_URL )
{ {
mask |= ENM_LINK; mask |= ENM_LINK;
@@ -1291,6 +1298,7 @@ bool wxTextCtrl::MSWCommand(WXUINT param, WXWORD WXUNUSED(id))
case EN_HSCROLL: case EN_HSCROLL:
case EN_VSCROLL: case EN_VSCROLL:
return FALSE; return FALSE;
default: default:
return FALSE; return FALSE;
} }
@@ -1506,14 +1514,45 @@ void wxTextCtrl::OnUpdateRedo(wxUpdateUIEvent& event)
bool wxTextCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) bool wxTextCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
{ {
NMHDR *hdr = (NMHDR* )lParam; NMHDR *hdr = (NMHDR* )lParam;
if ( hdr->code == EN_LINK ) switch ( hdr->code )
{ {
ENLINK *enlink = (ENLINK *)hdr; case EN_MSGFILTER:
{
const MSGFILTER *msgf = (MSGFILTER *)lParam;
UINT msg = msgf->msg;
// this is a bit crazy but richedit 1.0 sends us all mouse
// events _except_ WM_LBUTTONUP (don't ask me why) so we have
// generate the wxWin events for this message manually
//
// NB: in fact, this is still not totally correct as it does
// send us WM_LBUTTONUP if the selection was cleared by the
// last click -- so currently we get 2 events in this case,
// but as I don't see any obvious way to check for this I
// leave this code in place because it's still better than
// not getting left up events at all
if ( msg == WM_LBUTTONUP )
{
WXUINT flags = msgf->wParam;
int x = GET_X_LPARAM(msgf->lParam),
y = GET_Y_LPARAM(msgf->lParam);
HandleMouseEvent(msg, x, y, flags);
}
}
// return TRUE to process the event (and FALSE to ignore it)
return TRUE;
case EN_LINK:
{
const ENLINK *enlink = (ENLINK *)hdr;
switch ( enlink->msg ) switch ( enlink->msg )
{ {
case WM_SETCURSOR: case WM_SETCURSOR:
// ok, so it is hardcoded - do we really nee to customize it? // ok, so it is hardcoded - do we really nee to
// customize it?
::SetCursor(GetHcursorOf(wxCursor(wxCURSOR_HAND))); ::SetCursor(GetHcursorOf(wxCursor(wxCURSOR_HAND)));
*result = TRUE; *result = TRUE;
break; break;
@@ -1557,7 +1596,7 @@ bool wxTextCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
} }
break; break;
} }
}
return TRUE; return TRUE;
} }