Use the Date/Time Picker common control (2)

I just read the article "Use the Date/Time Picker common control (IE3+)" and now I'll try to explain my code.

I want to use only MFC interface for all my applications,then when MFC doesn't wrap some API and I want to use it,I write a MFC class.

In the article I just read,I see a GOOD IDEA for use Data/Time Picker but If you have a MFC class you can have a self control that has more feature . I wrote a MFC class that wrap Date Picker Control (no Time picker for now) that allows you

A) RANGE VALIDATION SUPPORT
B) EMPTY VALUE SUPPORT (CHECK BOX)
C) Auto InitCommonControlsEx
D) Data changing notifycation

Construction:

1. The default contructor assigns the current date.
CBaseDataPk();

2.SetRange - this method assign dt1 current value and a range from dt1 to dt2 (I want use only MFC class)

	SetRange(COleDateTime* dt1,COleDateTime* dt2);

3. SetRange - this method assign current date value and a range from < dayback > back to < dayafter > forward
SetRange(365,0) from a year ago to today;
SetRange(1,1) from yesterday to tomorrow;

	SetRange(int dayback,int dayafter);

4. You don't need data exchange the control provide it when you need the value you have a COleDateTime Value with the method GetCurDate(),it dosn't matter if the there are a window on not.

5. the subclassing method is

BOOL  SetData(UINT idc,CWnd* parent,BOOL empty = TRUE,BOOL updown = FALSE);
WHERE
idc is the static control yo've placed in the dialog parent is the dialog object
empty = TRUE empty value is allowed (check box)
updown = TRUE updown style

To use the control

1. Put a static control in your dialog for each data picker control you need
CBaseDataPk m_pk1;
CBaseDataPk m_pk2;

2. in the InitDialog put this code
  m_pk1.SetRange(60,0);  // from 60 days back to today
  m_pk1.SetData(IDC_DATAPK1,this); // subclass1
  m_pk2.SetRange(1,1); // from yesterday to tomorrow
  m_pk2.SetData(IDC_DATAPK2,this); // subclass2 ,FALSE,TRUE);

UPDATE #1:

I wrote some update to Date Picker Class :

In the new implementation you can now

1) Easily test null value through IsNullDate() method

2) Initial Null Value through new implementation of SetRange methods

void SetRange(COleDateTime* dt1,COleDateTime* dt2,BOOLnulvalue=FALSE,BOOL updatecurvalue = TRUE);
void SetRange(int dayback,int dayafter,BOOL nullvalue =FALSE,BOOL updatecurvalue = TRUE);

3) Buddy Support. New methods are

	CBaseDataPk* GetBuddy() { return m_pDataBuddy; }
	void SetBuddy(CBaseDataPk* p) {  m_pDataBuddy = p; }

The Buddy support allow you to have another CBaseDatePk control that changes his range dynamically when the first (master) CBaseDatePk changes his value.

To use Buddy feature in the InitDialog put this code:

  m_pk2.SetData(IDC_DATAPK2,this); 
  m_pk1.SetRange(60,5,TRUE);  // FROM 60 DAYS BACK TO 5 DAYS FORWARD ,initial null value
  m_pk1.SetBuddy(&m_pk2);  // m_pk1 master m_pk2 slave
  m_pk1.SetData(IDC_DATAPK1,this);

the master m_pk1 changes the range of m_pk2 when his value changes so you'll be sure that the date of m_pk1 is always < of m_pk2 if you uncheck box (null value) from m_pk1 then m_pk2 becomes unchecked at last if only m_pk2 has a good value then m_pk1 has the same value.

Download Project. 51KB



Comments

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • 10 Rules that Make or Break Enterprise App Development Projects In today's app-driven world, application development is a top priority. Even so, 68% of enterprise application delivery projects fail. Designing and building applications that pay for themselves and adapt to future needs is incredibly difficult. Executing one successful project is lucky, but making it a repeatable process and strategic advantage? That's where the money is. With help from our most experienced project leads and software engineers, …

  • IT decision support impacts all aspects of technology management, from governance and strategy to budgets and resource planning. IT decision support effectiveness often falls prey to data-driven challenges that make it difficult to understand the data in context. These challenges: overwhelming data volumes, heterogeneous data types, and growing data complexity. This Forrester Consulting Paper reports the three key findings from their study conducted, on behalf of BDNA, to test the hypothesis that data …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds