概要

 年月日及び時刻を入力するコントロールです。このサンプルでは初期値のうち月を予め10月に修正してコントーロールを初期化しています。
 現在日時でよい場合は初期化は不要です。OKボタンをクリックすると変更された日時をメッセージボックスで表示します。


テスト環境

コンパイラ

Visual C++ 2013 Express 32/64bit

動作確認

Windows 7
Windows 8.1
Windows 10 Version 1803

プログラムソースの概要

_tWinMain関数

 Windowsから最初に_tWinMain関数が呼び出されます。
 DialogBox APIでダイアログボックスを表示します。

DlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)ダイアログボックスプロシージャー

case WM_INITDIALOG:

 ダイアログボックスの初期化時に呼び出されます。
 GetLocalTime APIで現在の日時をSYSTEMTIME構造体に取得します。
 月のみ10月に修正します。
 DateTIme_SetSystemTimeマクロにより日時の初期値を設定します。

WM_COMMAND

 各ボタンがクリックされた場合およびコンボボックスでアイテムが選択されたときやに呼び出されます。
 wParamの下位ワード(16bit)にコントロールのID、wParamの上位ワードにメッセージが格納されています。
 コントロールのID別に処理をswitchステートメントで記述しています。
IDOK
 DateTime_GetSystemtimeマクロによりSYSTEMTIME構造体を取得します。
 年月日と時分秒を別々に取得しているので、一方の構造体にまとめます。
 MessageBoxで変更された日時を表示します。
 EndDialogプログラムを終了させます。
IDCANCEL
 EndDialogプログラムを終了させます。

プログラムソース

dtp.cpp

//	Date and Time Picker Controlサンプル 日時の修正
//	Visual C++ 2013 32/64bit

#include <windows.h>
#include <commctrl.h> 
#include <time.h>
#include <tchar.h>
#include "resource.h"


LRESULT CALLBACK DlgProc1(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPreInst,
						TCHAR* lpszCmdLine, int nCmdShow){
	
	DialogBox(hInstance, TEXT("DLG"), 0, (DLGPROC)DlgProc1);
	return (int)0;
}

//	ダイアログボックスプロシージャー

LRESULT CALLBACK DlgProc1(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam){
	TCHAR buf[32];
	SYSTEMTIME st,st2;
	static HWND  hDate1, hTime1;

	switch (msg) {
		case WM_INITDIALOG:{
			GetLocalTime(&st);
			st.wMonth = 10;// 現在日時から月のみ修正
			hDate1 = GetDlgItem(hDlg, IDC_DTP100);
			DateTime_SetSystemtime(hDate1, GDT_VALID, &st);
			hTime1 = GetDlgItem(hDlg, IDC_DTP102);
			DateTime_SetSystemtime(hTime1, GDT_VALID, &st);
			break;
		}
		case WM_COMMAND:
			switch(LOWORD(wParam)){
			case IDOK:{
				DateTime_GetSystemtime(hDate1, &st);
				DateTime_GetSystemtime(hTime1, &st2);
				st.wHour = st2.wHour;	//	時刻のみコピー
				st.wMinute = st2.wMinute;
				st.wSecond = st2.wSecond;
				_stprintf_s(buf,sizeof(buf)/sizeof(buf[0]),_TEXT("%i/%0.2i/%0.2i %0.2i:%0.2i:%0.2i"),
					st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
				MessageBox(hDlg, buf, _TEXT("日時"), MB_OK);
				EndDialog(hDlg, TRUE);
				return TRUE;
			}
			case IDCANCEL:
				EndDialog(hDlg, FALSE);
				return FALSE;
			default:
				return FALSE;
			}
			default:
				return FALSE;
	}
	return TRUE;
}

resource.h

#define	IDC_DTP100		100
#define	IDC_DTP102		102

resource.rc

#include <windows.h>
#include "resource.h"


DLG DIALOG DISCARDABLE 0, 0, 144, 56
EXSTYLE WS_EX_DLGMODALFRAME
STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | DS_SETFONT
CAPTION "日時変更"
FONT 9, "MS Shell Dlg"
{
 CONTROL "DTP100", IDC_DTP100, "SYSDATETIMEPICK32", WS_CHILD | WS_VISIBLE | DTS_RIGHTALIGN | DTS_LONGDATEFORMAT, 8, 8, 72, 14
 CONTROL "DTP100", IDC_DTP102, "SYSDATETIMEPICK32", WS_CHILD | WS_VISIBLE | DTS_RIGHTALIGN | DTS_TIMEFORMAT, 88,8, 48, 14

 CONTROL "OK(&O)", IDOK, "BUTTON", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, 10, 32, 54, 14
 CONTROL "キャンセル", IDCANCEL, "BUTTON", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 80, 32, 54, 14

}

ソースファイルと実行ファイルのダウンロード

ダウンロード dtp.zip(40.7kbyte)
ZIPファイルに含まれるファイル
dtp.cpp
resource.h
resource.rc
dtp.exe