分享方式:


更新狀態列窗格的文字

本文說明如何變更出現在 MFC 狀態列窗格中的文字。 狀態列 — CStatusBar 類別 的視窗物件 — 包含數個「窗格」。每個窗格都是狀態列的矩形區域,可用來顯示資訊。 例如,許多應用程式會顯示最右邊窗格中 CAPS LOCK、NUM LOCK 和其他索引鍵的狀態。 應用程式通常也會在最左邊的窗格中顯示資訊性文字(窗格 0),有時稱為「訊息窗格」。例如,預設 MFC 狀態列會使用訊息窗格來顯示說明目前選取功能表項目或工具列按鈕的字串。 [狀態列 ] 中的 圖表會顯示來自應用程式精靈所建立 MFC 應用程式的狀態列。

根據預設,MFC 不會在建立窗格時啟用 CStatusBar 窗格。 若要啟動窗格,您必須針對狀態列上的每個窗格使用ON_UPDATE_COMMAND_UI宏,並更新窗格。 因為窗格不會傳送WM_COMMAND訊息(它們不像工具列按鈕),所以您必須手動輸入程式碼。

例如,假設一個窗格具有 ID_INDICATOR_PAGE 作為其命令識別碼,而且它包含檔中目前的頁碼。 下列程式說明如何在狀態列中建立新的窗格。

若要建立新的窗格

  1. 定義窗格的命令識別碼。

    在 [ 檢視] 功能表上,按一下 [ 資源檢視 ]。 以滑鼠右鍵按一下專案資源,然後按一下 [ 資源符號 ]。 在 [資源符號] 對話方塊中,按一下 New 。 輸入命令識別碼名稱:例如 ID_INDICATOR_PAGE 。 指定識別碼的值,或接受 [資源符號] 對話方塊所建議的值。 例如,針對 ID_INDICATOR_PAGE ,接受預設值。 關閉 [資源符號] 對話方塊。

  2. 定義要顯示在窗格中的預設字串。

    開啟 [資源檢視] 時,在列出應用程式資源類型的視窗中按兩下 [字串資料表 ]。 在 [字串資料表 編輯器] 開啟時 ,從 [插入 ] 功能表選擇 [ 新增字串 ]。 選取窗格的命令識別碼(例如 ID_INDICATOR_PAGE ),然後輸入預設字串值,例如 「Page」。 關閉字串編輯器。 (您需要預設字串以避免編譯器錯誤。)

  3. 將窗格新增至 指標 陣列。

    在檔案 MAINFRM 中。CPP,找出 指標 陣列。 此陣列會列出所有狀態列指標的命令識別碼,依左至右的順序。 在陣列中適當的位置,輸入窗格的命令識別碼,如下所示 ID_INDICATOR_PAGE

    static UINT indicators[] =
    {
       ID_SEPARATOR,           // status line indicator
       ID_INDICATOR_CAPS,
       ID_INDICATOR_NUM,
       ID_INDICATOR_SCRL,
       ID_INDICATOR_PAGE,
    };
    

在窗格中顯示文字的建議方式,是在窗格的更新處理常式函式中呼叫 SetText 類別 CCmdUI 的成員函式。 例如,您可能想要設定包含目前頁碼的 整數變數 m_nPage,並使用 SetText 將窗格的文字設定為該數位的字串版本。

注意

SetText建議使用此方法。 藉由呼叫 CStatusBar 成員函 SetPaneText 式 ,就可以在稍微較低的層級執行這項工作。 即便如此,您仍然需要更新處理常式。 如果沒有窗格的這類處理常式,MFC 會自動停用窗格,清除其內容。

下列程式示範如何使用更新處理常式函式在窗格中顯示文字。

若要讓窗格顯示文字

  1. 新增命令的命令更新處理常式。

    手動新增處理常式的原型,如下所示 ID_INDICATOR_PAGE (在 MAINFRM 中。H):

    afx_msg void OnUpdatePage(CCmdUI* pCmdUI);
    
  2. 在適當的 中。CPP 檔案,新增處理常式的定義,如下所示 ID_INDICATOR_PAGE (在 MAINFRM 中。CPP):

    void CMainFrame::OnUpdatePage(CCmdUI* pCmdUI)
    {
       pCmdUI->Enable();
       CString strPage;
       strPage.Format(_T("Page %d"), m_nPage);
       pCmdUI->SetText(strPage);
    }
    

    此處理程式的最後三行是顯示文字的程式碼。

  3. 在適當的訊息對應中,新增 ON_UPDATE_COMMAND_UI 宏,如下所示 ID_INDICATOR_PAGE (在 MAINFRM 中。CPP):

    ON_UPDATE_COMMAND_UI(ID_INDICATOR_PAGE, &CMainFrame::OnUpdatePage)
    

一旦您定義 m_nPage 成員變數的值(類別), CMainFrame 這項技術會使頁碼在閒置處理期間出現在窗格中,方式與應用程式更新其他指標相同。 如果 m_nPage 變更,則顯示會在下一個閒置迴圈期間變更。

您想要深入瞭解什麼

另請參閱

MFC 中的狀態列實作
CStatusBar 類別