本人在做一个项目,想在ListCtrl对象中内嵌一个CDateTimeCtrl对象,当点击ListCtrl对象的某一行的某一列时,可以动态显示一个CDateTimeCtrl对象,当用户选择完时间后,注销掉该CDateTimeCtrl对象,使用户选择的时间显示在对应的格子中。我的主要工作是在CDateTimeCtrl对象的OnKillFocus函数中实现的,即在该函数中实现向ListCtrl对象传递消息及注销掉该对象。但我发现一个问题,就是当我在点击CDateTimeCtrl对象的下拉按钮并选择某个时间的时候,OnKillFocus函数就执行了,也就是说,我所选择的时间还没有来得及反映到控件上,该控件就被注销了,不过好像只注销掉一半即下拉日历控件没有了,但日历控件还在。而显示在对应格子上的时间始终是当前的时间。我的问题就是怎么才能在选择完时间后再把控件注销掉,并且是一起注销掉。是不是不应该在OnKillFocus函数中实现,多谢!!!

解决方案 »

  1.   

    ListCtrl不好这样实现,建议用MsFlexGrid
      

  2.   

    那你在dtctrl的OnSelected之类的事件里写不就完了?
    在事件里设置list的itemtext之后,给list发消息,让list来销毁这个dtctrl如何?
      

  3.   

    问题解决了吗?我也遇到这样的问题了!如果问题已解决,能不能发给我一份啊,邮箱:[email protected]
    先谢了!!
      

  4.   

    将获取时间写在CLOSEUP事件里就可以了.
    但是这样做的话,如果不操作CLOSEUP这样的动作的话,还是取不到时间.因此,还需要补充失去焦点ONKILLFOCUS函数的代码:
    CString strTestDate;
    m_DateTimeCtrl.GetWindowText(strTestDate);  //获取当前显示在DATETIMECTRL中的时间
    SetItemText(m_DateTimeCtrl.m_Item,m_DateTimeCtrl.m_subItem,strTestDate);