• <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>

            Welcome to ErranLi's Blog!

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              106 Posts :: 1 Stories :: 97 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(12)

            搜索

            •  

            積分與排名

            • 積分 - 175924
            • 排名 - 151

            最新評論

            閱讀排行榜

            在MFC程序中如果使用默認的狀態欄的話,其第一欄在空閑時顯示的是“就緒”,如果用戶點擊菜單,還會用于顯示菜單欄的提示文本,如“建立新文檔”等。有時候我們不希望程序在狀態欄中顯示這些東西,那該怎么辦呢?

            在MFC中,是用主框架類中的CStatusBar對象m_wndStatusBar來管理狀態欄的。CStatusBar中有一個SetPaneText的函數可用于設置狀態欄中的文字。我們在CMainFrame類中的OnCreate函數中添加

            m_wndStatusBar.SetPaneText(0, "Hello");

            則程序啟動后,狀態欄上顯示的文字為“Hello”。但是當我們點擊菜單后,會發現這段文字會消失,被替換成菜單的提示文本;若菜單操作結束,則又顯示成“就緒”了。那該如何禁止MFC自動修改狀態欄文本呢?

            我們再看看主框架類的源程序。當中有這么一段

            static UINT indicators[] =
            {
            ID_SEPARATOR,
            ID_INDICATOR_CAPS,
            ID_INDICATOR_NUM,
            ID_INDICATOR_SCRL,
            };

            而在OnCreate中有這么一段

            m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)))

            這一句的作用是設置狀態欄各部分的ID,默認的ID由indicators數組指定。由于MFC中把狀態欄的第一欄設置為ID_SEPARATOR 了,這是一個MFC默認的ID,所以它有一系列默認的操作,如顯示“就緒”二字。我們想禁止MFC自動操作狀態欄就必須修改indicators數組。

            我們打開Resource View,修改String Table,找到那堆ID_INDICATOR開頭的,在后面新加一個ID_INDICATOR_1。然后修改CMainFrame中indicators的聲明

            static UINT indicators[] =
            {
            ID_INDICATOR_1,
            ID_INDICATOR_CAPS,
            ID_INDICATOR_NUM,
            ID_INDICATOR_SCRL,
            };

            然后編譯運行程序。我們會發現,MFC不會再自動修改狀態欄的文本了,可是前面添加的一句
            m_wndStatusBar.SetPaneText(0, "Hello");
            也不起作用了。這是為什么呢?

            http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_status_bars.3a_.updating_the_text_of_a_status.2d.bar_pane.asp
            MSDN上有一篇介紹如果修改狀態欄文本的文章。當中有一句

            Note?? The SetText approach is recommended. It is possible to perform this task at a slightly lower level by calling the CStatusBar member function SetPaneText. Even so, you still need an update handler. Without such a handler for the pane, MFC automatically disables the pane, erasing its content.

            意思大概是如果我們不為狀態欄添加UPDATE的處理函數,MFC會自動禁止狀態欄的該欄(pane)。按照MSDN的說法,我們需要增加UPDATE的處理函數。在MainFrm.h中添加

            afx_msg void OnUpdate1(CCmdUI *pCmdUI);

            在MainFrm.cpp中添加

            ON_UPDATE_COMMAND_UI(ID_INDICATOR_1, OnUpdate1)

            void CMainFrame::OnUpdate1(CCmdUI *pCmdUI)
            {
            ?pCmdUI->Enable();
            }

            這樣我們就可以往狀態欄的第一欄寫文字,而避開MFC對其的自動修改了。

            posted on 2007-10-13 19:55 erran 閱讀(2778) 評論(0)  編輯 收藏 引用 所屬分類: MFC
            中文字幕乱码人妻无码久久| 久久亚洲国产精品123区| 久久人人爽人人爽人人片AV高清 | 欧美噜噜久久久XXX| 婷婷综合久久中文字幕蜜桃三电影| 亚洲国产美女精品久久久久∴ | 国产一久久香蕉国产线看观看| 精品乱码久久久久久久| 久久成人精品视频| 久久男人中文字幕资源站| 无码乱码观看精品久久| 久久精品国产亚洲精品2020| 久久亚洲国产精品123区| 久久久久亚洲av无码专区导航 | 一本色道久久88加勒比—综合| 亚洲精品国精品久久99热| 欧美噜噜久久久XXX| 久久人人爽人人爽人人片AV东京热 | 日本久久久久亚洲中字幕| 国产精品免费福利久久| 久久亚洲精品无码观看不卡| 2021久久国自产拍精品| 久久综合亚洲鲁鲁五月天| 国产精品久久久久乳精品爆| 久久精品人人做人人爽电影蜜月| 国产精品日韩深夜福利久久| 91精品国产综合久久婷婷| 99精品久久久久久久婷婷| 久久久久99精品成人片| 亚洲国产成人久久精品影视 | 亚洲第一永久AV网站久久精品男人的天堂AV| 国产成年无码久久久免费| 少妇无套内谢久久久久| 久久天天日天天操综合伊人av| 久久精品国产99国产电影网| 亚洲综合精品香蕉久久网| 久久久www免费人成精品| 成人久久免费网站| 久久综合久久自在自线精品自| 色偷偷88888欧美精品久久久| 无码人妻精品一区二区三区久久|