|
日時指定コントロールの基本
今回は日時指定コントロール(Date-Time Picker)を実装します。日時指定コントロールは、日付と時間をそれぞれユーザが入力できるコントロールです。日付はカレンダー形式で選択します。

まず、リソースエディタで日時指定コントロールを追加しましょう。今回は日時指定コントロール2つとボタン1つを追加しました。
次に日時指定コントロールのプロパティを設定します。ここではリソースIDとフォーマットを設定します。日付と時刻は別々のコントロールになるので、片方は「短い日付形式」または「長い日付形式」、もう片方は「時刻」にします。

次は日時を保持する変数を作ります。これはDDXのvalue変数を使うと簡単に実装できます。
では、DDX変数を追加しましょう。日時指定コントロールを右クリックし、「変数の追加」を選択します。

アクセスはprivate、「コントロール変数」をチェックし、カテゴリにvalueを選択します。変数のデータ型はいくつか選べますが、MFCで日時を扱うときに標準的に使われるCTime型をここでは選択します。
変数名はメンバ変数となるのでm_で始まる名前にしましょう。さらにDDXのvalue変数であることがわかるようにm_xvで始まる名前にすると分かりやすくなります。この辺は好みで決めましょう。

2つの日時指定コントロールに変数を追加し、さらに「日時取得」ボタンにBN_CLICKEDのメッセージハンドラを追加します。(ボタンのイベントハンドラの追加方法は、「ボタンの基本」を見てください。)
ハンドラの内容は次のようにしました。UpdateData()でDDX変数の値を更新し、メッセージボックスに設定された日時を表示します。
// "日時取得"ボタン押下
void CPickerDlg::OnBnClickedGet()
{
CTime cTime;
CString str;
UpdateData();
cTime = CTime(m_xvPickerD.GetYear(), m_xvPickerD.GetMonth(),
m_xvPickerD.GetDay(), m_xvPickerT.GetHour(),
m_xvPickerT.GetMinute(), m_xvPickerT.GetSecond());
str = cTime.Format("%Y/%m/%d %H:%M:%S");
MessageBox(str);
}
|
日付を保持している変数と時刻を保持している変数は別々になっているので、一度2つを合成したCTimeクラスの変数を作っています。
CTime::Format()関数は、日時を指定したフォーマットに成型した文字列を返してくれます。
逆に、日時指定コントロールに日時を設定したい場合は、次のようにDDX変数に日時をセットし、UpdateData(FALSE)を呼び出します。ここでは、OnInitDialog()で現在日時をセットするようにしてみました。
BOOL CPickerDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE); // 大きいアイコンの設定
SetIcon(m_hIcon, FALSE); // 小さいアイコンの設定
// TODO: 初期化をここに追加します。
{
CTime cTime = CTime::GetCurrentTime();
m_xvPickerD = cTime;
m_xvPickerT = cTime;
UpdateData(FALSE);
}
return TRUE;
}
|
コンパイルして実行してみましょう。現在の日付、時刻が表示されています。日時を設定しボタンを押すと、設定した日時が表示されます。
 
|