• <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++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              106 Posts :: 1 Stories :: 97 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(12)

            搜索

            •  

            積分與排名

            • 積分 - 177258
            • 排名 - 151

            最新評(píng)論

            閱讀排行榜

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

            在MFC中,是用主框架類中的CStatusBar對(duì)象m_wndStatusBar來管理狀態(tài)欄的。CStatusBar中有一個(gè)SetPaneText的函數(shù)可用于設(shè)置狀態(tài)欄中的文字。我們?cè)贑MainFrame類中的OnCreate函數(shù)中添加

            m_wndStatusBar.SetPaneText(0, "Hello");

            則程序啟動(dòng)后,狀態(tài)欄上顯示的文字為“Hello”。但是當(dāng)我們點(diǎn)擊菜單后,會(huì)發(fā)現(xiàn)這段文字會(huì)消失,被替換成菜單的提示文本;若菜單操作結(jié)束,則又顯示成“就緒”了。那該如何禁止MFC自動(dòng)修改狀態(tài)欄文本呢?

            我們?cè)倏纯粗骺蚣茴惖脑闯绦颉.?dāng)中有這么一段

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

            而在OnCreate中有這么一段

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

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

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

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

            然后編譯運(yùn)行程序。我們會(huì)發(fā)現(xiàn),MFC不會(huì)再自動(dòng)修改狀態(tài)欄的文本了,可是前面添加的一句
            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上有一篇介紹如果修改狀態(tài)欄文本的文章。當(dāng)中有一句

            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.

            意思大概是如果我們不為狀態(tài)欄添加UPDATE的處理函數(shù),MFC會(huì)自動(dòng)禁止?fàn)顟B(tài)欄的該欄(pane)。按照MSDN的說法,我們需要增加UPDATE的處理函數(shù)。在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();
            }

            這樣我們就可以往狀態(tài)欄的第一欄寫文字,而避開MFC對(duì)其的自動(dòng)修改了。

            posted on 2007-10-13 19:55 erran 閱讀(2789) 評(píng)論(0)  編輯 收藏 引用 所屬分類: MFC
            99精品久久久久久久婷婷| 亚洲AV无码久久精品色欲| 久久精品国产72国产精福利| 久久久亚洲精品蜜桃臀 | 亚洲精品乱码久久久久久| 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 嫩草影院久久99| 无码精品久久一区二区三区| 久久综合88熟人妻| 久久久久国产一级毛片高清板| 77777亚洲午夜久久多人| 国产成人精品久久一区二区三区av| 久久久国产亚洲精品| 国产精品日韩深夜福利久久| 囯产精品久久久久久久久蜜桃| 香港aa三级久久三级| 91精品国产9l久久久久| 一本色综合久久| 久久久综合香蕉尹人综合网| …久久精品99久久香蕉国产| 色综合久久久久久久久五月| 久久天天婷婷五月俺也去| 94久久国产乱子伦精品免费| 韩国三级大全久久网站| 亚洲人成伊人成综合网久久久| 亚洲国产成人久久综合区| 99久久精品国产综合一区| 99久久成人国产精品免费| 久久久国产精品亚洲一区| 99久久精品免费看国产一区二区三区 | 亚洲伊人久久综合中文成人网| 91久久国产视频| 嫩草影院久久国产精品| 99国内精品久久久久久久| 久久免费小视频| 国产ww久久久久久久久久| 91精品免费久久久久久久久| 久久av免费天堂小草播放| 精品久久综合1区2区3区激情| 狠狠精品干练久久久无码中文字幕| 青青青国产精品国产精品久久久久 |