Date Time用法

Date Time Picker控件的使用,一点儿经验总结zz  2007-11-22 15:46   MFC中的一些控件总是用起来不怎么爽,下面我结合自己的经验与大家分享一下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 oletimeTime = COleDateTime::GetCurrentTime();
       m_leveldate.SetTime(oletimeTime);       //设置为当前时间
       oletimeTime.SetStatus(COleDateTime::null);//复选框不打勾
       m_leveldate.SetTime(oletimeTime);       //使复选框不打勾生效
}
    使用该函数,可以使复选框不打钩,后面的日期为灰色不可更改的。这时,如果我们用GetLevelDate(int nID)的话,将返回一个空字符串。
    那么如何检测控件是否为空呢?可以用这个函数int CheckLevelDateNull(),该函数用来得到控件的状态,返回枚举类型的值,valid = 0,invalid = 1,NULL=2。当然我们也可以把函数的返回值类型设为整形。函数实现如下:
{
       COleDateTime oletimeTime;
       m_leveldate.GetTime(oletimeTime);
       COleDateTime::DateTimeStatus status = oletimeTime.GetStatus();
       return status;
}
    以上是我对Date Time Picker控件的一些总结,还有很多不完善之处,希望与大家共勉

你可能感兴趣的:(Date Time用法)