Date Time Picker控件的使用

 

首先,不管怎么样,控件是要往窗口上拖的,所以你得准备一个对话框。

然后,把Date Time Picker拖放到对话框上。

    接下来设置它的属性,右键单击该控件,弹出属性对话框。

在General属性页中,给它取个名字,其它默认就可以了。

 在Styles属性页中,Format下拉框中,选择Long Date。至于为什么要选这个,根据个人需要了,它的格式是:****年**月**日;而Short Date的格式如:2007-6-7。

    Right Align是默认的对齐属性,我们不管它。

    另外钩上Show None和Use Spin Control属性。Show None属性,用于将日期值设为空的操作,也就是我们以后从空间得到的是空值。Use Spin Control属性,就是给你提供一个调整时间的按钮,一个上(增加),一个下(减少)。

    至于Allow Edit,我的看法是有了之前的设置,这个可以不要。因为它可以编辑整行,这不是我所需要的,最好只允许用户对数字操作。

    第三个属性页,如果你有兴趣,可以试试,是一些扩展的属性。

 

    接下来,我们需要给该控件绑定一个变量,如m_leveldate,注意,该变量的种类(category)选(Control),变量类型选CDateTimeCtrl。

 

    假如SQL数据库里有一个datetime类型的字段,我们要把它显示到控件上。

    首先,把该字段读出来,保存在CString strDate变量中。

    接下来的问题就是如何将这个字符串显示到 Date Time Picker中了?我们可以用一个函数来解决这个问题。设为这个函数void SetLevelDate(CString strdatetime),现在头文件中声明,再在CPP文件中实现。函数体如下:

{

CString year,month,day;

    year=strdatetime.Left(4);

    strdatetime=strdatetime.Right(strdatetime.GetLength()-strdatetime.Find("-")-1);

    month=strdatetime.Left (strdatetime.Find ("-"));

    day=strdatetime.Right(strdatetime.GetLength()-strdatetime.Find("-")-1);

 

    int y=atoi(year);              //将字符串转换为整形

    int m=atoi(month);

    int d=atoi(day);

    CTime time(y,m,d,0,0,0);

 

    m_leveldate.SetTime(&time);

}

    这里需要注意的是,SQL数据库里的datetime类型的格式如:1900-01-01 00:00:000,而我们只要年月日,所以得分别提取出来。

    另外,MFC中对时间的处理,我们需要用到几个类,如:CTime和COleDateTime,具体怎么用可以到MSDN中查。

 

    显示实现了,那如何将Date Time Picker中的日期读到字符串中呢?我们同样利用一个函数:CString GetLevelDate(int nID),注意这个函数是有参数,并有返回值的。参数的作用是,传递该控件的ID,也就是命名,如上面图中的IDC_19_LEVELDATE。函数体实现如下:

{

       CDateTimeCtrl * pWndTemp = (CDateTimeCtrl*)GetDlgItem(nID);

       CTime tempTime;

       pWndTemp->GetTime(tempTime);

       CString strTemp1 = tempTime.Format("%Y-%m-%d");

       return strTemp1;

 

}

    同样,函数返回值的格式如:2007-6-7,这样可以方便的插入数据库中。

 

    那么如何使得该控件传递空值呢?我们用这样一个函数void SetLevelDateNull(),函数实现如下:

{

       COleDateTime letimeTime = COleDateTime::GetCurrentTime();

       m_leveldate.SetTime(oletimeTime);       //设置为当前时间

       oletimeTime.SetStatus(COleDateTime::null);//复选框不打勾

       m_leveldate.SetTime(oletimeTime);       //使复选框不打勾生效

}

    使用该函数,可以使复选框不打钩,后面的日期为灰色不可更改的。这时,如果我们用GetLevelDate(int nID)的话,将返回一个空字符串。

    那么如何检测控件是否为空呢?可以用这个函数int CheckLevelDateNull(),该函数用来得到控件的状态,返回枚举类型的值,valid = 0invalid = 1,NULL=2。当然我们也可以把函数的返回值类型设为整形。函数实现如下:

{

       COleDateTime oletimeTime;

       m_leveldate.GetTime(oletimeTime);

       COleDateTime::DateTimeStatus status = oletimeTime.GetStatus();

       return status;

}

 

    以上是我对Date Time Picker控件的一些总结,还有很多不完善之处,希望与大家共勉。

 

http://www.tong-xin.com/html/64/3464-22.html

 

阅读更多
想对作者说点什么? 我来说一句

DateTimePicker控件

2016年11月09日 3.15MB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭