山本ワールド
Windowsプログラミング
アルゴリズム Vitual C++ 2008/2013によるWin32/Win64 APIレベルのプログラム 基礎 Vitual C++ 2008/2013によるAPIレベルのプログラム(32/64bit) Wix3でインストーラーを作る Visual C++ 2008 Standard Editonによるフォームアプリケーションのプログラム(32/64bit) Vitual C++ 2008 Standard EditonによるAPIレベルのプログラム(32/64bit) Windows 7対応 Visual C++ 2008 ExpressによるAPIレベルのプログラム Visual C++ 2005 ExpressによるAPIレベルのプログラム Visual C++ Versiosn 5 BORLAND C++ Windowsプログラム全般 Excel VBA その他日時の修正コントロール(Date and Time Picker Control)
概要
年月日及び時刻を入力するコントロールです。このサンプルでは初期値のうち月を予め10月に修正してコントーロールを初期化しています。
現在日時でよい場合は初期化は不要です。OKボタンをクリックすると変更された日時をメッセージボックスで表示します。
現在日時でよい場合は初期化は不要です。OKボタンをクリックすると変更された日時をメッセージボックスで表示します。
テスト環境
コンパイラ
Visual C++ 2013 Express 32/64bit動作確認
Windows 7Windows 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
}
ソースファイルと実行ファイルのダウンロード
Copyright (C) 2012 山本ワールド All Rights Reserved.