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
|
||||
|
||||
protected:
|
||||
// generate the given calendar event(s)
|
||||
void GenerateEvent(wxEventType type)
|
||||
// generate the given calendar event, return true if it was processed
|
||||
bool GenerateEvent(wxEventType type)
|
||||
{
|
||||
wxCalendarEvent event(this, GetDate(), type);
|
||||
HandleWindowEvent(event);
|
||||
return HandleWindowEvent(event);
|
||||
}
|
||||
|
||||
// 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);
|
||||
|
||||
void MSWOnDoubleClick(wxMouseEvent& event);
|
||||
|
||||
private:
|
||||
wxDateTime m_date;
|
||||
|
||||
|
@@ -60,12 +60,38 @@ wxCalendarCtrl::Create(wxWindow *parent,
|
||||
if ( !CreateControl(parent, id, pos, size, style, wxDefaultValidator, name) )
|
||||
return false;
|
||||
|
||||
// create the native control
|
||||
if ( !MSWCreateControl(MONTHCAL_CLASS, wxEmptyString, pos, size) )
|
||||
// create the native control: this is a bit tricky as we want to receive
|
||||
// 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;
|
||||
|
||||
SetDate(dt.IsValid() ? dt : wxDateTime::Today());
|
||||
|
||||
Connect(wxEVT_LEFT_DOWN,
|
||||
wxMouseEventHandler(wxCalendarCtrl::MSWOnDoubleClick));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -300,4 +326,15 @@ bool wxCalendarCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *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
|
||||
|
Reference in New Issue
Block a user