Windows Date Time Pickerでテキスト入力、コピペを可能にする

Visual C++ での話
Windowsアプリで日付・時刻を選択するためのコントロールDate Time Picker。一つの日付だけを選択するなら便利だが、複数のコントロール間でコピー&ペーストができないのが不便。

  1. リソースエディタでコントロールのAllow EditプロパティをONにする。
  2. コントロールイベントハンドラを追加する。DTN_USERSTRINGメッセージに対するハンドラを追加する。
  3. ハンドラ内でテキスト形式の入力をSYSTEMTIME形式に変換する。
void CXXXXXXXXDialog::OnDtnUserstringDatetimepicker(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMDATETIMESTRING pDTString = reinterpret_cast(pNMHDR);
	// TODO: ここにコントロール通知ハンドラ コードを追加します。
	COleDateTime dt;
	dt.ParseDateTime(pDTString->pszUserString, VAR_DATEVALUEONLY);
	dt.GetAsSystemTime(pDTString->st);
	*pResult = 0;
}