お世話になります。
WinXP Pro SP3 / VC6 MFC(APP・ダイアログベース)です。
DateTimePickerのドロップダウンで表示されるカレンダーを
CStaticから派生させた自作のカレンダーコントロールに
置き換えたいと思っています。
全部オーナードローをすればある程度のものはできるのですが、
DateTimePickerコントロールのMaskedTextBoxのような動作を
実装するのがとても大変です。
そのため、日付の表示部分はDateTimePickerのものをそのまま使い、
ドロップダウンのカレンダーだけを自作コントロールに
置換できればいいなと思っているのですが、可能なのでしょうか。
もし可能だとすればどのようにすればいいのか
教えていたますでしょうか。
よろしくお願い致します。
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じゃない時の処理なんかも
#必要かもしれません。
追記です。キーボード操作 「alt + ↓」なんかも
対応しないと駄目ですね。