VC中日历控件的GetCulSet(CTime& a)不能正确获得当前日期!!新手

luodike2001 2005-07-19 09:21:13
在对话框中直接拖入一个日历控件,然后添加一个CMonthCalCtrl类的变量(m_p),然后给这个控件添加一个MCN_SELECT消息,然后消息响应函数如下:

CTime a;

m_t.GetCurSel(a);
CString str;
str.Format("%d,%d,%d",a.GetYear(),a.GetMonth(),a.GetDay());
MessageBox(str);
可是奇怪的是显示的时间并不是我选中的时间,并且也没什么规律好像?为什么?新手,详细一点,谢谢!
...全文
520 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
birdman9876 2010-06-06
  • 打赏
  • 举报
回复
大小写错了,学习啦,呵呵
luodike2001 2005-07-25
  • 打赏
  • 举报
回复
哦,明白了,非常谢谢
vcmute 2005-07-23
  • 打赏
  • 举报
回复
CAUSE
MFC's implementation of CMonthCalCtrl::GetCurSel() for the CTime class calls SendMessage(MCM_GETCURSEL, &sysTime) where sysTime is a SYSTEMTIME structure. The MCM_GETCURSEL message does not fill in the hours, minutes, and seconds part of the sysTime Structure with valid values. However, the constructor for CTime class takes these values into consideration, so the date in CTime class is incorrect.

原因,没有修改小时,分和秒,用的还是构造初始化的值
Release中一般为0,Debug中取内存中的随机值
luodike2001 2005-07-23
  • 打赏
  • 举报
回复
UP
luodike2001 2005-07-22
  • 打赏
  • 举报
回复
按楼上的确实可以,可是为什么呢,有没有人能解释我前面的做法只能在release下等到正确结果??
vcmute 2005-07-21
  • 打赏
  • 举报
回复
PRB: CMonthCalCtl::GetCurSel(CTime) Returns Wrong Value

Q235355



RESOLUTION
The workaround is to use the CMonthCalCtrl::GetCurSel(SYSTEMTIME*) version of GetCurSel for this class to get the correct date. The code will look like the following example:


SYSTEMTIME sysTime;

m_MonthCal.GetCurSel(&sysTime);

sysTime.wHour = sysTime.wMinute = sysTime.wSecond = sysTime.wMilliseconds = 0;

CTime l_time(sysTime);
Jeff_zhuang 2005-07-21
  • 打赏
  • 举报
回复
改变一下day states属性就行了.
把false 改为true
luodike2001 2005-07-21
  • 打赏
  • 举报
回复
”在对话框构函数里这个变量系统初始化为0;(值为:1970。01。01)改一下就OK了。“,这个类的变量怎么初始化为0 ,不是CTime类型的数据。

“改变一下day states属性就行了.把false 改为true”,我改了,但是在debug模式下编译还是不对??

期待解答!
TOUT 2005-07-20
  • 打赏
  • 举报
回复


“在对话框中直接拖入一个日历控件,然后添加一个CMonthCalCtrl类的变量(m_p)”

在对话框构函数里这个变量系统初始化为0;(值为:1970。01。01)改一下就OK了。
handsomerun 2005-07-20
  • 打赏
  • 举报
回复
晕,要打pp了,那现在肯定是对了
luodike2001 2005-07-20
  • 打赏
  • 举报
回复
笔误,是笔误
luodike2001 2005-07-20
  • 打赏
  • 举报
回复
我是说这里笔误,程序那儿不可能笔误的,我又发现了,用debug编译,得到的时间是错的,但是用release编译,就能得到正确的结果,不知道为什么?有没有高人指点一下!谢谢了
AntonlioX 2005-07-19
  • 打赏
  • 举报
回复
up
handsomerun 2005-07-19
  • 打赏
  • 举报
回复
然后添加一个CMonthCalCtrl类的变量(m_p),


m_t.GetCurSel(a);??
m_p.GetCurSel(a);??

老兄,难道是你的笔误??
handsomerun 2005-07-19
  • 打赏
  • 举报
回复
对了,你那个m_p变量是你的那个控件变量吧
handsomerun 2005-07-19
  • 打赏
  • 举报
回复
不知道你为什么有这样的问题,我新建了一个工程,用你的代码拷进去试了试,好用的很

void CMyDlg::OnSelectMonthcalendar1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here


CTime a;

m_a.GetCurSel(a);
CString str;
str.Format("%d,%d,%d",a.GetYear(),a.GetMonth(),a.GetDay());
MessageBox(str);

*pResult = 0;


}
AntonlioX 2005-07-19
  • 打赏
  • 举报
回复
up

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧