在Win32工程下利用API函数使用DateTimePicker方法小结

DateTimePicker是一种能够直观显示短日期/时间的控件,我想在Win32工程下,只利用API函数来使用它,以下为自己的使用方法总结:
前提:已经利用可视化界面直接拖放一个DateTimePicker控件在对话框指定的位置,然后设置ID名为IDC_DATETIMEPICKER1;
1、获取DTP上的时间
    为了获取当前显示的时间(注:在创建控件后不添加任何代码运行的话,DTP会自动显示当前系统时间,以此为例),可以发送DTM_GETSYSTEMTIME消息,将获取的时间存储在时间结构体中。代码如:
    SYSTEMTIME st={0};
    SendMessage(hWndDTP1,DTM_GETSYSTEMTIME,0,(LPARAM)&st);
注释:SYSTEMTIME为时间结构体,包含了年、月、周内日、日、时、分、秒、微秒信息。
发送这个消息的返回值为GDT_VALID或者GDT_NONE,前者表示时间获取成功,而后者则表示没有获取时间信息。
2、设置DTP上的时间
    如果要自定义设置DTP上时间,可以发送DTM_SETSYSTEMTIME,代码如:
    SYSTEMTIME st={2014,1,0,1,1,0,0,0};
    SendMessage(hWndDTP1,DTM_GETSYSTEMTIME,GDT_VALID,(LPARAM)&st);
注释:发送此消息时,wParam必须为GDT_VALID,要设置的时间信息存储在结构体st中。
3、DTP上的时间改变时做出响应
    DTP上的时间改变时,会向系统发送通知消息DTN_DATETIMECHANGE。可以在消息响应循环中,截获并解析,判断是此DTP发生了时间信息改变,然后可用LPNMDATETIMECHANGE来得到时间改变的信息。代码如:
 case WM_NOTIFY:
  {
   if(wParam==IDC_DATETIMEPICKER1)
   {
    NMHDR* pHeader=(NMHDR*)lParam;
    HWND hWndDTP1=pHeader->hwndFrom;
    if(pHeader->code==DTN_DATETIMECHANGE)
         LPNMDATETIMECHANGE lpChage=(LPNMDATETIMECHANGE)lParam; 
     }
  }
注释:LPNMDATETIMECHANGE 结构体中的st保存改变之后的时间信息。定义如下:
typedef struct tagNMDATETIMECHANGE {
  NMHDR nmhdr;
  DWORD dwFlags;
  SYSTEMTIME st;
} NMDATETIMECHANGE, *LPNMDATETIMECHANGE;

程序实现的过程:
在一个对话框上添加了一个DTP和一个编辑框,对话框初始化时,获取DTP上显示的时间(即系统时间),然后显示在编辑框里。点击设置按钮后,系统显示设置的时间并同样显示在编辑框里。然后在DTP的下拉中选择时间改变后,在编辑框会显示改变之后的时间。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值