generate double click events in the native MSW version of wxCalendarCtrl
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@53008 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -298,11 +298,11 @@ public:
|
|||||||
// implementation only from now on
|
// implementation only from now on
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// generate the given calendar event(s)
|
// generate the given calendar event, return true if it was processed
|
||||||
void GenerateEvent(wxEventType type)
|
bool GenerateEvent(wxEventType type)
|
||||||
{
|
{
|
||||||
wxCalendarEvent event(this, GetDate(), type);
|
wxCalendarEvent event(this, GetDate(), type);
|
||||||
HandleWindowEvent(event);
|
return HandleWindowEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
// generate all the events for the selection change from dateOld to current
|
// generate all the events for the selection change from dateOld to current
|
||||||
|
@@ -55,6 +55,8 @@ protected:
|
|||||||
|
|
||||||
virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result);
|
virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result);
|
||||||
|
|
||||||
|
void MSWOnDoubleClick(wxMouseEvent& event);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
wxDateTime m_date;
|
wxDateTime m_date;
|
||||||
|
|
||||||
|
@@ -60,12 +60,38 @@ wxCalendarCtrl::Create(wxWindow *parent,
|
|||||||
if ( !CreateControl(parent, id, pos, size, style, wxDefaultValidator, name) )
|
if ( !CreateControl(parent, id, pos, size, style, wxDefaultValidator, name) )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// create the native control
|
// create the native control: this is a bit tricky as we want to receive
|
||||||
if ( !MSWCreateControl(MONTHCAL_CLASS, wxEmptyString, pos, size) )
|
// double click events but the MONTHCAL_CLASS doesn't use CS_DBLCLKS style
|
||||||
|
// and so we create our own copy of it which does
|
||||||
|
static ClassRegistrar s_clsMonthCal;
|
||||||
|
if ( !s_clsMonthCal.IsInitialized() )
|
||||||
|
{
|
||||||
|
// get a copy of standard class and modify it
|
||||||
|
WNDCLASS wc;
|
||||||
|
if ( ::GetClassInfo(NULL, MONTHCAL_CLASS, &wc) )
|
||||||
|
{
|
||||||
|
wc.lpszClassName = wxT("_wx_SysMonthCtl32");
|
||||||
|
wc.style |= CS_DBLCLKS;
|
||||||
|
s_clsMonthCal.Register(wc);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
wxLogLastError(_T("GetClassInfoEx(SysMonthCal32)"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const wxChar * const clsname = s_clsMonthCal.IsRegistered()
|
||||||
|
? s_clsMonthCal.GetName().wx_str()
|
||||||
|
: MONTHCAL_CLASS;
|
||||||
|
|
||||||
|
if ( !MSWCreateControl(clsname, wxEmptyString, pos, size) )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
SetDate(dt.IsValid() ? dt : wxDateTime::Today());
|
SetDate(dt.IsValid() ? dt : wxDateTime::Today());
|
||||||
|
|
||||||
|
Connect(wxEVT_LEFT_DOWN,
|
||||||
|
wxMouseEventHandler(wxCalendarCtrl::MSWOnDoubleClick));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -300,4 +326,15 @@ bool wxCalendarCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
|
|||||||
return wxCalendarCtrlBase::MSWOnNotify(idCtrl, lParam, result);
|
return wxCalendarCtrlBase::MSWOnNotify(idCtrl, lParam, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wxCalendarCtrl::MSWOnDoubleClick(wxMouseEvent& event)
|
||||||
|
{
|
||||||
|
if ( HitTest(event.GetPosition()) == wxCAL_HITTEST_DAY )
|
||||||
|
{
|
||||||
|
if ( GenerateEvent(wxEVT_CALENDAR_DOUBLECLICKED) )
|
||||||
|
return; // skip event.Skip() below
|
||||||
|
}
|
||||||
|
|
||||||
|
event.Skip();
|
||||||
|
}
|
||||||
|
|
||||||
#endif // wxUSE_CALENDARCTRL
|
#endif // wxUSE_CALENDARCTRL
|
||||||
|
Reference in New Issue
Block a user