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用法
最新推荐文章于 2023-02-23 14:07:25 发布