【冰冻苔原】  
网聚无限美与忆

公告
日历
<2005年12月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567
统计
  • 随笔 - 70
  • 文章 - 11
  • 评论 - 99
  • 引用 - 0

导航

常用链接

留言簿(13)

随笔分类

随笔档案

文章分类

文章档案

相册

收藏夹

链接无限

搜索

  •  

积分与排名

  • 积分 - 64167
  • 排名 - 56

最新评论

阅读排行榜

 
在Visual C++6.0 中增加了日期时间拾取控件(简称DTP控件)和月历控件,这两个控件

允许用户选择日期、时间和月份并可对其进行操作。

    再DTP控件中,用户可调整现实的日期。缺省时,用户可单击控件的右边的下拉按钮,
即可弹出月历控件以供用户选择日期,通过风格的改变还可在DTP控件内显示时间。

    在月历控件中,用户可按击控件左右两边的箭头按钮,可前后翻页显示相关的月份。

    一、DTP控件和月历控件的风格及其设置

    (1)DTP控件

    DTP控件的风格分别如下:
DTS_APPCANPARSE 允许用户对输入消息进行必要的处理。
DTS_LONGDATEFORMAT 用长格式显示日期,如"1999年6月22日"。
DTS_RIGHTALIGN 下拉月历右对齐控件。
DTS_SHOWNONE 在控件中可能没有当前日期。使用此风格时,控件显示一个复选框,当用户选中时,方可键入或选择一个日期。DTS_SHORTDATEFORMAT用短格式显示日期,如“99-6-22"。
DTS_TIMEFORMAT 在控件内显示时间。
DTS_UPDOWN 在控件的右边出现一个旋转按钮用来调整日期。若此风格没指定,则控件的右边是一个下拉按钮用来弹出月历。

    这些风格可在CDateTimeCtrl::Create函数中加以设定,也可通过DTP控件的Styles属
性对话框进行设置(如图6.9所示),相关属性说明如下:
.Format DTP控件的格式有:ShortDate(短格式)、LongDate(长格式)、Time(显示 时 间 ) 。 分别与DTS_SHORTDATEFORMAT 、DTS_LONGDATEFORMAT、DTS_TIMEFORMAT相同。
.Right Align 同DTS_RIGHTALIGN。
.Use Spin Control 同DTS_UPDOWN。
.Show None 同DTS_SHOWNONE。
.Allow Edit DTP控件允许编辑。

    (2)月历控件

    月历控件的风格有:
MCS_DAYSTATE 此风格将某一天的显示变成粗体。
MCS_MULTISELECT 允许用户在控件中选择日期范围。缺省时,最大的范围为一周。
MCS_NOTODAY  在控件的下边不再显示今天的日期。
MCS_NOTODAYCIRCLE 不圈定今天的日期。
MCS_WEEKNUMBERS 在控件的每行左边显示周数(1-52)。

    这些风格可在CMonthCalCtrl::Create函数中加以设定,也可通过月历控件的Styles属性
对话框进行设置,相关属性说明如下:
.Day States 同MCS—DAYSTATE。
.Multi Select 同MCS臼MULTISELECT。
.No Today Circle 同MCS—NOTODAYCIRCLE。
.No Today 同MCS_NOTODAY。
.Week Numbers 同MCS_WEEKNUMBERS。

    二、基本操作

    (1)DTP控件

    字体、颜色的操作DTP控件可改变月历对话框的字体,成员函数CDateTimeCtrl::SetMonthCalFont
可实现此操作,其函数原型如下:

    void SetMonthCalFont(HFONT hFont,BOOL bRedraw=TRUE);

    参数:
hFont 要设置的字体句柄.
bRedraw 当字体设置后,是否立即重画。

    与此函数相对应的是获得字体的成员函数CDateTimeCtrl::GetMonthCalFont.改变DTP控件
中的月历颜色可用成员函数CDateTimeCtrl::SetMonthCalColor,其原型如下:

    COlORREF SetMonthCalColor(int iColor,COLORREF ref);

    此函数成功时将返回月历先前的颜色,否则返回-1。

    参数:
iColor 指定月历控件中要设置颜色的部位,它可以是下列值之一
MCSC_BACKGROUND 设置在月份之间的背景色。
MCSC_MONTHBK 设置月份中的背景色。
MCSC_TEXT 设置月份中的文本色。
MCSC_TITLEBK 设置月历题头背景色。
MCSC_TITLETEXT 设置月历题头文本色。
MCSC_TRAILINGTEXT 设置当月份向前后翻页时,与今日相同的日期的颜色。
ref 指定的颜色。

    与其相对应的成员函数CDateTimeCtrl::GetMonthCalColor可用来获得相关颜色。在DTP控件
中还可调用成员函数CDateTimeCtrl::GetMonthCalCtrl来获得下拉月历指针。

    设置显示的格式

    成员函数CDateTimeCtrl::SetFormat是用来设置DTP控件的显示格式,其原型如下:
    BOOL SetFormat(LPCTSTR pstrFormat);

    参数pstrFormat是用来指定显示格式,若为NULL则使用缺省的格式。该参数可包含下列格式字符:
"d" 1或2位日期。
"dd" 两位日期,日期为1位数字时,在前加0.
"ddd" 星期缩写成三个字符。
"dddd" 星期全名。
"h" 在12小时格式中,显示1位或2位。
"hh" 12小时格式的两位数显,不足时前补0。
"H" 24小时格式的1位或2位数显。
"HH" 24小时格式的两位数显,不足时前补0。
"m" 分钟的1位或2位数显。
"mm" 分钟的两位数显,不足时前补0。
"M" 月份的1位或2位数显。
"MM" 月份的两位数显,不足时前补0.
"MMM" 月份缩写成三个字符.
"MMMM" 月份全名。
"t" AM/PM缩写成一个字符如AM缩写成"A"。
"tt" AM/PM。
"y" 年号的最后1位数,显如1999年显示为9.
"yy" 年号的最后2位数显。
"yyy" 整个年号,如1999。

    设置或获取时间

    成员函数CDateTimeCtrl::SetTime和CDateTimeCtrl::GetTime分别用来设置和获取DTP
控件中的时间。其函数原型如下:

     BOOL SetTime(const COIeDateTime& timeNew);
     BOOL SetTime(const CTime* pTimeNew);
     BOOL SetTime(LPSYSTEMTIME pTimeNew=NULL);

   函数第三个形式中的参数pTimeNew是指向SYSTEMTIME结构的指针,其结构如下:
  
typedef struct_SYSTEMTIME{ //st
     
WORD wYear; //年
     
WORD wMonth; //月,0=1月,以此类推
     
WORD wDayOfWeek; //一周的某一天,0=星期天,以此类推
     
WORD wDay; //天数
     
WORD wHour; //小时
     
WORD wMinute; //分针
     
WORD wSecond; //秒
     
WORD wMilliseconds; //百万分之一秒
   } SYSTEMTIME;

    BOOL GetTime(COIeDateTime& timeDest)const;
    DWORD GetTime(CTime& timeDest)const;
    DWORD GetTime(LPSYSTEMTIME pTimeDest)const;

    (2)月历控件

    颜色的设置

    在CMonthCalCtrl中,成员函数GetColor和SetColor是用来获取或设置月历控件的有关颜色的,
其定义同DTP控件的同名函数。

    设置或获取今天的日期

    在CMonthCalCtrl中,成员函数GetToday和SetToday是用来获取或设置月历控件的今
天日期的。其函数原型如下:

    BOOL GetToday(COleDateTime& refDateTime)const;
    BOOL GetToday(CTime& refDateTime)const;
    BOOL GetToday(LPSYSTEMTIME pDateTime)const;
   
void SetToday(const COleDateTime& refDateTime);
    void SetToday(const LPSYSTEMTIME pDateTime);

    设置或获取当前选择项

    在CMonthCalCtrl中,成员函数GetCurSel和SetCurSel是用来获取或设置月历控件当
前选择项的。其函数原型如下:
    BOOL GetCurSel(COleDateTime& refDateTime)const;
    BOOL GetCurSel(CTime& refDateTime)const;
    BOOL GetCurSel(LPSYSTEMTIME pDateTime)const;
   
BOOL SetCurSel(const COleDateTime& refDateTime);
   
BOOL GetCurSel(const CTime& refDateTime);
    BOOL GetCurSel(const LPSYSTEMTIME pDateTime);

    三、通知消息

    DTP控件的通知消息有:
DTN_DROPDOWN DTP控件中的月历控件将要显示。
DTN_CLOSEUP DTP控件中的月历控件将要关闭。
DTN_DATETIMECHANGEDTP 控件中的内容已发生改变。
DTN_FORMAT 文本需要显示在回调域中。
DTN_FORMATQUERY 文本显示所需最大尺寸。
DTN_USERSTRING 用户已完成DTP控件的编辑。
DTN_WMKEYDOWN 用户单击回调域。

    月历控件的通知消息有:
MCN_GETDAYSTATE 获得日期的定制风格。
MCN_SELCHANGE 当前选择项已被改变。
MCN_SELECT 在月历控件中选择一个日期。
NM_RELEASEDCAPTURE 释放鼠标的捕获消息。

    以上这些消息均可用ClassWizard加以映射。

posted on 2005-12-19 13:50 【冰冻苔原】 阅读(5035) 评论(10)  编辑  收藏 所属分类: 编程&&电脑技术随笔
评论:
  • # re: 日期时间拾取控件(简称DTP控件)和月历控件  none Posted @ 2006-04-06 17:54
    thanks for your work.  回复  更多评论   

  • # re: 日期时间拾取控件(简称DTP控件)和月历控件  bbx Posted @ 2006-07-30 09:31
    请问:怎么响应鼠标单击事件?  回复  更多评论   

  • # re: 日期时间拾取控件(简称DTP控件)和月历控件  vcbird Posted @ 2006-07-31 09:48
    你试试响应DTN_WMKEYDOWN消息  回复  更多评论   

  • # 日期时间拾取控件DTS_SHOWNONE样式  vc爱好者! Posted @ 2006-11-28 09:50
    请问怎么判断控件的复选框(DTS_SHOWNONE样式)有没有选中啊?如:
    OnOK()
    {
    if(复选框选中)
    ....
    else
    .....
    }  回复  更多评论   

  • # re: 日期时间拾取控件(简称DTP控件)和月历控件  乌鸦 Posted @ 2007-03-13 18:28
    非常感谢!!  回复  更多评论   

  • # re: 日期时间拾取控件(简称DTP控件)和月历控件  MFCBUG Posted @ 2007-11-21 15:34
    帮助很大,非常感谢.  回复  更多评论   

  • # re: 日期时间拾取控件(简称DTP控件)和月历控件  we Posted @ 2008-05-21 07:16
    xie xie
      回复  更多评论   

  • # re: 日期时间拾取控件(简称DTP控件)和月历控件  北京时间 Posted @ 2008-12-27 14:15
    xie xie   回复  更多评论   

  • # re: 日期时间拾取控件(简称DTP控件)和月历控件  khjt123 Posted @ 2009-03-18 09:25
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Target.Count = 1 Then

    If Target.Column = 3 Then

    With Me.DTPicker1

    If Target <> "" Then

    .Value = Target

    End If

    .Visible = True

    .Top = Target.Top

    .Left = Target.Left

    .Application.EnableEvents = False

    .ActiveCell.Value = Me.DTPicker1.Value

    .Application.EnableEvents = True

    End With

    Else

    Me.DTPicker1.Visible = False

    End If

    End If

    End Sub

    当程序运行到ActiveCell.Value = Me.DTPicker1.Value时显示“运行时错误‘438’ 对象不支持该属性或方法” 请帮忙,谢谢!!!!!!
      回复  更多评论   

  • # re: 日期时间拾取控件(简称DTP控件)和月历控件  jom Posted @ 2009-05-13 15:19
    楼主的帖子看以前很舒服,还没查看自己想要的内容,先顶一下,赞~  回复  更多评论   

 
Copyright © 【冰冻苔原】 Powered by: 博客园 模板提供:沪江博客