DateTimePickerのカレンダーコントロールの置換 – プログラミング – Home

DateTimePickerのカレンダ...
 
通知
すべてクリア

DateTimePickerのカレンダーコントロールの置換


ほえほえむー
 ほえほえむー
(@ほえほえむー)
ゲスト
結合: 17年前
投稿: 5
Topic starter  

お世話になります。
WinXP Pro SP3 / VC6 MFC(APP・ダイアログベース)です。

DateTimePickerのドロップダウンで表示されるカレンダーを
CStaticから派生させた自作のカレンダーコントロールに
置き換えたいと思っています。

全部オーナードローをすればある程度のものはできるのですが、
DateTimePickerコントロールのMaskedTextBoxのような動作を
実装するのがとても大変です。
そのため、日付の表示部分はDateTimePickerのものをそのまま使い、
ドロップダウンのカレンダーだけを自作コントロールに
置換できればいいなと思っているのですが、可能なのでしょうか。

もし可能だとすればどのようにすればいいのか
教えていたますでしょうか。

よろしくお願い致します。


引用解決済
トピックタグ
にーに
 にーに
(@にーに)
ゲスト
結合: 15年前
投稿: 5
 

PreTranslateMessage内でクリックした位置が取得できるので
自作コントロールがうまいこと起動できるようにしてみては
どうでしょう。
テキスト部に表示されている日付の受け渡しとか
自作カレンダー部のフォーカスが外れた時の処理とか
色々ありそうですけど。

BOOL ChogehogeDlg::PreTranslateMessage(MSG* pMsg)
{
POINTS pnt;
CRect rect;
int limit;

if(pMsg->hwnd == m_date.m_hWnd ){
if(pMsg->message == WM_LBUTTONDOWN ) {
m_date.GetWindowRect(rect);
m_date.ScreenToClient(rect);
pnt = MAKEPOINTS(pMsg->lParam);
limit = rect.right -
(::GetSystemMetrics(SM_CYVSCROLL)
+::GetSystemMetrics(SM_CXEDGE));

if( limit <= pnt.x) {
TRACE(カレンダー部分\n);
return TRUE;
}
}
}
return CDialog::PreTranslateMessage(pMsg);
}

#SM_CXEDGE使いましたけど、コントロールが3Dじゃない時の処理なんかも
#必要かもしれません。


返信引用
にーに
 にーに
(@にーに)
ゲスト
結合: 15年前
投稿: 5
 

追記です。キーボード操作 「alt + ↓」なんかも
対応しないと駄目ですね。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました