カレンダーコントロールの初期表示


hiro  2006-09-29 20:30:01  No: 63127

DATETIMEPICK_CLASSをCreateExして、カレンダーを表示し日付を設定できるようにしました。
デフォルトで今日の日付を表示します。そのデフォルトを最初は空白表示して、日付をクリックしたら表示するようにしたいのです。
DTM_SETFORMATに空白を設定したら、デフォルトでの日付表示はなくなったのですが、今度はクリックして日付を設定しても空白のままになってしまいました。日付をクリックしたイベントを拾うにはどうしたらいいのでしょうか?


PATIO  2006-09-30 02:28:56  No: 63128

開発環境とMFCの使用の有無等必要な情報も一緒に公開してください。
可決方法に若干の違いが出てくる事があります。
提示していてくれないとこういうときはこう、こういうときはこうと
一々書かなくてはならないので面倒です。

多分、設定されたら表示フォーマットを戻そうと言う話なのだと思いますけれど、
このイベント拾おうと思ったらサブクラス化して乗っ取らないとだめなのではないかと思います。
結構めんどくさそうです。
実際にサブクラス化してメッセージの流れを確認する必要があると思います。


PATIO  2006-09-30 02:30:01  No: 63129

誤字訂正

>可決方法に若干の違いが出てくる事があります。

解決方法に若干の違いが出てくる事があります。


hiro  2006-09-30 03:15:52  No: 63130

PATIO様。
その通りで、設定されたら表示フォーマットを戻したいのです。
開発環境はVc++6.0で、MFCを使用しています。

GetWindowRect(&r1);
GetClientRect(&r2);
GetDlgItem(IDC_EDIT1)->GetWindowRect(&r3);
GetDlgItem(IDC_EDIT2)->GetClientRect(&r4);
y = r1.bottom - r1.top - r2.bottom ;
icex.dwSize = sizeof(INITCOMMONCONTROLSEX ) ;
icex.dwICC = ICC_DATE_CLASSES ;
InitCommonControlsEx(&icex) ;
m_wndEdit.CreateEx
    (0, DATETIMEPICK_CLASS, 
    NULL,WS_BORDER|WS_VISIBLE|WS_CHILD|DTS_LONGDATEFORMAT,
     r3.left-r1.left, r3.top-r1.top, r4.right, r4.bottom,
   m_hWnd, NULL ) ;
のようにしてカレンダーを表示させました。
LPSTR lpstrTime = "    ";
::SendMessage
  (m_wndSDate1.m_hWnd,DTM_SETFORMAT, 0, (LPARAM)lpstrTime );
ここまでが初期処理です。ここまでは完璧なのですが、難しそうですね。。。


PATIO  2006-10-02 23:43:56  No: 63131

考え方の問題かもしれませんけれど、
DATETIMEPICKコントロールは基本的に何も表示されていない状態と言うのを
許していないと思います。それは、エディットボックス内の日時の数値を
直接変更できるようなインターフェイスになっている所為でしょう。
コントロールの日付表示を殺してしまうと言う方法ではなくて
もっと別のアプローチで目的が達成できないかと言う考えも必要ではないかと
思います。
どうしてコントロールの初期表示で空白にしておきたいのか?
空白にしておきたい理由を外の方法で解決する手は無いのか?
考えて見てはどうでしょう。


PATIO  2006-10-02 23:45:56  No: 63132

もとい、
空白にしておきたい理由を他の方法で解決する手は無いのか?
です。


hiro  2006-10-03 17:49:35  No: 63133

そうですね。
ある期間の開始日と終了日を設定する必要があり、それも次期版も設定でき、さらに次期版は省略も可能にしなければならなくて、入力方法としてエンドユーザにカレンダーコントロールを求められました。初期表示で開始を現在日時、終了日を、2999/12/31(または適当に2100/12/31)などにしようと思ったのですが画面がくどく見えるのと、省略できるように見えないので、空白にできないかな・・・と思った次第です。
「空白にしてほしい」とは要求されていないので
デフォルト表示をもう一度考え直してみたいと思います。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加