• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            cyt

            近來想做一個日歷控件,于是用了BCG(www.ttdown.com 可以下載)的CBCGPCalendarBar。不過想做成鼠標停留在日期上的時候,提示信息是農歷。
            不過很奇怪,BCG的日期控件竟然不支持日期提示。究其原因,原來:
            BOOL CBCGPCalendarButton::OnToolHitTest(const CWnd* /*pWnd*/, TOOLINFO* /*pTI*/)
            {
            ?return FALSE;
            }
            其實想改也很容易,改BCG的源代碼就行了。但是想到一旦BCG更新換代,又要重新編譯了,實在是麻煩。于是想通過OO的繼承,擴展這個類。

            class CLunarCalendarButton : public? CBCGPCalendarButton
            {
            ?DECLARE_SERIAL(CLunarCalendarButton)
            public:
            ?CLunarCalendarButton() : CBCGPCalendarButton() {}
            ?CLunarCalendarButton(const COleDateTime& date, BOOL bHighlight = FALSE) : CBCGPCalendarButton(date, bHighlight) {}
            protected:
            ?virtual BOOL OnToolHitTest(const CWnd* /*pWnd*/, TOOLINFO* pTI);
            };

            IMPLEMENT_SERIAL(CLunarCalendarButton, CBCGPCalendarButton, 1)

            BOOL CLunarCalendarButton::OnToolHitTest(const CWnd* /*pWnd*/, TOOLINFO* pTI)
            {
            ?if (pTI == NULL)
            ??return FALSE;

            ?CString str;
            ?
            ?str = _T("農歷:");
            ?CLunarCalendarBar::FormatLunarDate(m_Calendar, str);

            ?pTI->lpszText = (LPTSTR) ::calloc ((str.GetLength () + 1), sizeof (TCHAR));
            ?_tcscpy (pTI->lpszText, str);

            ?return TRUE;
            }

            但是問題是怎么樣子把這個Button替換原來控件上的CBCGPCalendarButton呢?CBCGPCalendarBar沒有接口讓用戶建立自己的Button。
            最后還是要比較“茅”的方法,通過覆蓋虛函數:
            class CLunarCalendarBar : public CBCGPCalendarBar
            {
            ......
            protected:
            ?virtual void Rebuild ();
            ?virtual CBCGPToolbarButton * createDateButton(void);?
            };

            CBCGPToolbarButton * CLunarCalendarBar::createDateButton(void)
            {
            ??? return new CLunarCalendarButton();

            }

            void CLunarCalendarBar::Rebuild ()
            {
            ?CBCGPCalendarBar::Rebuild();

            ?int i = 0;
            ?for (i = 0; !m_Buttons.IsEmpty() && i < 42; ++i)
            ?{
            ??CBCGPToolbarButton* pButton = (CBCGPToolbarButton*) m_Buttons.RemoveTail();
            ??ASSERT_VALID (pButton);

            ??if (pButton != NULL)
            ??{
            ???pButton->OnCancelMode ();
            ???delete pButton;
            ??}
            ?}
            ?for (i = 0; i < 42; i ++)
            ??InsertButton ( createDateButton() );

            ?SetDate (m_dateSelected);
            }
            把原來的CBCGPCalendarBar建立的那42個按鈕全部去掉,換上自己的按鈕。

            posted on 2005-10-08 14:46 cyt 閱讀(801) 評論(0)  編輯 收藏 引用
             
            蜜臀av性久久久久蜜臀aⅴ| 国产精品久久久久久久久久影院 | 久久久久久久精品成人热色戒| 久久久免费观成人影院| 欧美成人免费观看久久| 色8久久人人97超碰香蕉987| 国产精品久久久久无码av| 久久这里只有精品视频99| 久久久久久综合网天天| 青青青伊人色综合久久| 久久中文字幕人妻熟av女| 久久香蕉一级毛片| 亚洲乱码精品久久久久..| 99久久精品免费看国产一区二区三区| 一级女性全黄久久生活片免费| 久久婷婷激情综合色综合俺也去| 国产精品青草久久久久福利99| 97精品国产97久久久久久免费| 久久久久综合网久久| 精品多毛少妇人妻AV免费久久| 久久精品国产福利国产秒| 模特私拍国产精品久久| 久久久久久青草大香综合精品| 久久精品亚洲精品国产色婷| 久久久午夜精品| 国产午夜电影久久| 久久精品国产91久久综合麻豆自制| 99精品国产免费久久久久久下载| 夜夜亚洲天天久久| 久久精品国产影库免费看| 亚洲va久久久噜噜噜久久狠狠| 久久精品亚洲男人的天堂| 久久久青草青青亚洲国产免观| 国产精品久久久久久久久鸭| 老色鬼久久亚洲AV综合| 亚洲国产精品无码久久一线| 国产亚洲精品久久久久秋霞 | 久久精品亚洲一区二区三区浴池| 久久精品久久久久观看99水蜜桃| 麻豆久久| 久久精品青青草原伊人|