中易网

帅哥,看见你的帖子,想请教个问题,如何取得日历控件中的正确值啊? #include <windows.h> #include <wind

答案:1  悬赏:30  
解决时间 2021-01-18 21:04
  • 提问者网友:沦陷
  • 2021-01-18 12:21
帅哥,看见你的帖子,想请教个问题,如何取得日历控件中的正确值啊? #include <windows.h> #include <wind
最佳答案
  • 二级知识专家网友:山河有幸埋战骨
  • 2021-01-18 13:50
#include "stdafx.h"
#include
#include
#include "resource.h"
#include "Commctrl.h"
#include "TimepickerDlg.h"

BOOL WINAPI TimepickerDlg_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
HANDLE_MSG(hWnd, WM_INITDIALOG, TimepickerDlg_OnInitDialog);
HANDLE_MSG(hWnd, WM_COMMAND, TimepickerDlg_OnCommand);
HANDLE_MSG(hWnd,WM_CLOSE, TimepickerDlg_OnClose);
}

return FALSE;
}

BOOL TimepickerDlg_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
TimepickerDlg* timepicker_td=(TimepickerDlg*)lParam;
SetWindowLong(hwnd,GWL_USERDATA,(LPARAM)timepicker_td);

return TRUE;
}

void TimepickerDlg_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
switch(id)
{
case IDC_TIMEPICKER_OK:
{

SYSTEMTIME st;
LRESULT lResult1,lResult2;
TimepickerDlg* timepicker_td=(TimepickerDlg*)GetWindowLong(hwnd,GWL_USERDATA);
lResult1 = SendMessage(GetDlgItem(hwnd,IDC_DATETIMEPICKER1), DTM_GETSYSTEMTIME, 0, (LPARAM)&st);
if(lResult1 == GDT_VALID)
{
// 获取成功,进行其他处理。
// TCHAR szDay[50];
// wsprintf(szDay, TEXT("%04u-%02u-%02u"),st.wYear, st.wMonth, st.wDay);
// MessageBox(hwnd,szDay,TEXT(""),MB_OK);
timepicker_td->year=st.wYear;
timepicker_td->month=st.wMonth;
timepicker_td->day=st.wDay;
}
lResult2 = SendMessage(GetDlgItem(hwnd,IDC_DATETIMEPICKER2), DTM_GETSYSTEMTIME, 0, (LPARAM)&st);
if(lResult2 == GDT_VALID)
{

timepicker_td->hour=st.wHour;
timepicker_td->minute=st.wMinute;
timepicker_td->second = st.wSecond;


}
//TCHAR str[50];
//wsprintf(str,TEXT("%04u-%02u-%02u %02u:%02u:%02u"),timepicker_td->year ,timepicker_td->month ,timepicker_td->day ,timepicker_td->hour ,timepicker_td->minute ,timepicker_td->second);
//MessageBox(hwnd,str,TEXT(""),MB_OK);

EndDialog(hwnd, 1);
}
break;
case IDC_TIMEPICKER_CANCEL:
{
EndDialog(hwnd, 0);
}
break;
default:
break;
}
}

void TimepickerDlg_OnClose(HWND hwnd)
{
EndDialog(hwnd, 0);
}

我之前写的有些你都不用管,主要的是这句吧:lResult1 = SendMessage(GetDlgItem(hwnd,IDC_DATETIMEPICKER1), DTM_GETSYSTEMTIME, 0, (LPARAM)&st);用SendMessage,第一个参数得到控件句柄,因为我用的是长时间,两个控件,第二个参数是获取时间的宏定义,最后传向的参数吧,我用的是结构体,基本上就这样的,其实回答我问题 的那个人已经给出答案了
追问:LRESULT lResult = SendMessage (hwnddtm, DTM_GETSYSTEMTIME, 0, (LPARAM) &gst );
我也是这么来的,但是返回值一直都是错误的,不知道为什么。
后来我在网上找到一个方法,
LPNMDATETIMECHANGE lpChange = (LPNMDATETIMECHANGE)lParam;
lpChange ->st 就是正确的值了。
不知道为啥
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息