熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> C編程 >> 正文

動態菜單項、狀態條提示、工具條提示問題

2022-06-13   來源: C編程 
動態菜單項狀態條提示工具條提示問題 趙湘寧本文例子代碼問題的提出
       一個應用程序想要動態改變菜單項使用CCmdUI::SetText("Menu Text")可以改變菜單文本但是如何動態改變工具條和狀態條的文本呢?
       
       有幾種策略避免欺騙面對
           首先避免為什麼你非要動態改變菜單項?一般說來這是個壞主意動態菜單容易把人搞糊塗我正在使用你的產品本來用得好好的突然菜單項變了不管什麼時候每當我看到一個改變菜單的應用時都要琢麽為什麼他們需要這樣的用戶界面設計
       
           然而每一個規則都有例外許多例子的動態改變菜單項都很酷例如在大多數面向文檔的應用程序中文件菜單的最後一項MRU(最近使用的文件列表)但作為一個用戶面對動態菜單項的弊端是顯而易見的我把避免動態菜單提升為設計准則即便是采用了動態菜單的設計也要讓用戶注意不到菜單項是改變否則It&#;&#;s         bad design反之如果用戶注意不到菜單項的改變It&#;&#;s OK
       
           但是動態改變狀態條提示又如何呢?在MRU菜單中無論什麼文件狀態條一般都提示打開選擇的文檔這是另一個要避免的策略只有特別本位或任性的程序員會操心實現一個動態提示的菜單打開某某文件而不去用完全可行並且有效的提示打開這個文檔你完全有權利不遵循這種慣例也就是說如果你非要改變狀態條提示的話那就請往下繼續看吧你會明白的
       
       使用動態菜單的另一場合是當你想設置某個布爾狀態時例如隱藏或顯示工具條當工具條可見時顯示隱藏工具條反之顯示顯示工具條更為普通的方法是用單個命令以校驗標記來實現當工具條可見時顯示標記(如下圖)      GUI的高手們常常爭論哪種方法更好可能它沒有什麼差別但是即使你決定使用動態提示(如隱藏/顯示工具條)你也能使用單個的命令IDID_VIEW_TOOLBAR和單個的提示隱藏或顯示工具條我認為沒有必要去實現動態提示
       
           在所有建議中你要做的第一件事情是好好重新考慮用戶的界面你確實需要動態菜單項嗎?以及你確實需要菜單的動態提示嗎?除非兩個問題的答案都是否則就止住別再浪費時間
       
           要改變菜單文本是容易的只要實現ON_UPDATE_COMMAND_UI處理器並調用CCmdUI::SetText即可
       
        void CFrameWnd::OnUpdateToolbar(CCmdUI* pCmdUI)
       {
            BOOL bVisible = IsToolbarVisible();
            // Note same mnemonic (&T) for both cmds!
            pCmdUI>SetText(bVisible ? "Hide &Toolbar"         : "Show &Toolbar");
       }
       
       
僅此而已下一步是提示當你創建了一個菜單提示你給它一個ID號MFC使用這個ID來查找資源串獲取命令提示例如
       
       STRINGTABLE DISCARDABLE
       BEGIN
            ID_VIEW_TOOLBAR "Show or hide the toolbar\nToggle         ToolBar"
       END
       
           如果你的菜單命令也有工具條按鈕MFC用\n(新行標記)後的文本作為工具條提示文本因為MFC允許每個命令只能有一個串如何動態改變提示呢?最簡單的方法是編寫一個提示在兩種情況下都工作象前面討論的隱藏顯示工具條的例子但這種方法顯得很笨拙
       
           獲得動態提示的一個方法是將命令分成幾個命令例如ID_HIDE_ TOOLBAR 和ID_SHOW_TOOLBAR只是一種欺騙策略這些命令的命令處理器最終要做的事情是改變菜單項的ID為其它命令項的ID具體實現細節我就不講了自己做吧
       
           使用兩個ID可能是一種簡單的方法但它不適用於所有情況例如在MRU文件菜單中對於每個可能的文件名字你會需要不同的ID
       

From:http://tw.wingwit.com/Article/program/c/201401/30253.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.