TN022:標準命令實作
注意
下列技術提示自其納入線上文件以來,未曾更新。 因此,有些程序和主題可能已過期或不正確。 如需最新資訊,建議您在線上文件索引中搜尋相關的主題。
本附注描述 MFC 2.0 所提供的標準命令實作。 請先閱讀 Technical Note 21 ,因為它描述用來實作許多標準命令的機制。
此描述假設瞭解 MFC 架構、API 和常見的程式設計實務。 說明記載和未記載的「僅限實作」API。 這不是開始瞭解 MFC 功能或如何進行程式設計的地方。 如需更多一般資訊,以及記載 API 的詳細資料,請參閱 Visual C++。
問題
MFC 會在標頭檔 AFXRES.H 中定義許多標準命令識別碼。 這些命令的架構支援會有所不同。 瞭解架構類別處理這些命令的位置和方式,不僅會說明架構在內部的運作方式,也會提供如何自訂標準實作的實用資訊,並教導您一些實作自己的命令處理常式的技術。
此技術注意事項的內容
每個命令識別碼都會在兩節中說明:
標題:命令識別碼的符號名稱(例如,ID_FILE_SAVE),後面接著命令的用途(例如,以冒號分隔的「儲存目前檔」。
一或多個段落,描述哪些類別會實作命令,以及預設實作的用途
大部分的預設命令實作都會在架構的基類訊息對應中預先連接。 有些命令實作需要衍生類別中的明確線路。 這些描述在「附注」底下。 如果您在 AppWizard 中選擇正確的選項,這些預設處理常式將會在產生的基本架構應用程式中為您連線。
命名規範
標準命令會遵循簡單的命名慣例,建議您盡可能使用。 大部分的標準命令都位於應用程式功能表列中的標準位置。 命令的符號名稱會以 「ID_」 開頭,後面接著標準快顯功能表名稱,後面接著功能表項目名稱。 符號名稱以大寫表示,具有底線斷詞符號。 對於沒有標準功能表項目名稱的命令,會從 「ID_」 開始定義邏輯命令名稱(例如,ID_NEXT_PANE)。
我們使用前置詞 「ID_」 來指出設計成系結至功能表項目、工具列按鈕或其他命令使用者介面物件的命令。 處理 「ID_」 命令的命令處理常式應該使用 MFC 命令架構的ON_COMMAND和ON_UPDATE_COMMAND_UI機制。
建議您針對未遵循命令架構的功能表項目使用標準 「IDM_」 前置詞,並需要功能表特定的程式碼來啟用和停用它們。 當然,功能表特定命令的數目應該很小,因為遵循 MFC 命令架構不僅讓命令處理常式功能更強大(因為它們會使用工具列),而且讓命令處理常式程式碼可重複使用。
識別碼範圍
如需 MFC 中使用識別碼範圍的詳細資訊,請參閱 Technical Note 20 。
MFC 標準命令落在0xE000範圍中,以0xEFFF。 請勿依賴這些識別碼的特定值,因為它們在未來版本的程式庫中可能會變更。
您的應用程式應該在0x8000範圍中定義其命令,以0xDFFF。
標準命令識別碼
針對每個命令識別碼,可以在檔案 PROMPTS 中找到標準消息行提示字串。鋼筋混凝土。 該功能表提示字元的字串識別碼必須與命令識別碼相同。
ID_FILE_NEW建立新的/空白檔。
注意
您必須將此連線到
CWinApp
衍生類別的訊息對應,才能啟用此功能。CWinApp::OnFileNew
會根據應用程式中的檔範本數目,以不同的方式實作此命令。 如果只有一個CDocTemplate
,CWinApp::OnFileNew
將會建立該類型的新檔,以及適當的框架和檢視類別。如果有一個
CDocTemplate
以上的 ,CWinApp::OnFileNew
將會提示使用者輸入對話方塊(AFX_IDD_NEWTYPEDLG),讓他們選取要使用的檔案類型。 選取CDocTemplate
的 會用來建立檔。ID_FILE_NEW的一個常見自訂是提供不同且更圖形化的檔案類型選擇。 在此情況下,您可以實作自己的
CMyApp::OnFileNew
,並將它放在訊息對應中,而不是CWinApp::OnFileNew
。 不需要呼叫基類實作。另一個常見的ID_FILE_NEW自訂是提供個別的命令來建立每種類型的檔。 在此情況下,您應該定義新的命令識別碼,例如ID_FILE_NEW_CHART和ID_FILE_NEW_SHEET。
ID_FILE_OPEN開啟現有的檔。
注意
您必須將此連線到
CWinApp
衍生類別的訊息對應,才能啟用此功能。CWinApp::OnFileOpen
具有非常簡單的呼叫CWinApp::DoPromptFileName
實作,CWinApp::OpenDocumentFile
後面接著要開啟之檔案的檔案或路徑名稱。 實作CWinApp
常式DoPromptFileName
會顯示標準 FileOpen 對話方塊,並填入從目前檔範本取得的副檔名。ID_FILE_OPEN的一個常見自訂是自訂 [檔案][開啟] 對話方塊或新增其他檔案篩選。 建議的自訂方式是將預設實作取代為您自己的 FileOpen 對話方塊,並以檔的檔案或路徑名稱呼叫
CWinApp::OpenDocumentFile
。 不需要呼叫基類。ID_FILE_CLOSE關閉目前開啟的檔。
CDocument::OnFileClose
如果檔已修改,則呼叫CDocument::SaveModified
以提示使用者儲存檔,然後呼叫OnCloseDocument
。 所有結尾邏輯,包括終結檔,都是在OnCloseDocument
常式中完成。注意
ID_FILE_CLOSE與傳送至檔框架視窗的WM_CLOSE訊息或SC_CLOSE系統命令不同。 只有當這是顯示檔的最後一個框架視窗時,關閉視窗才會關閉檔。 關閉具有ID_FILE_CLOSE的檔不僅會關閉檔,也會關閉顯示檔的所有框架視窗。
ID_FILE_SAVE儲存目前的檔。
實作會使用同時用於
OnFileSave
和OnFileSaveAs
的協助程式常式CDocument::DoSave
。 如果您儲存之前尚未儲存的檔(也就是,它沒有路徑名稱,如 FileNew 的情況),或從唯讀檔案讀取,OnFileSave
邏輯會像ID_FILE_SAVE_AS命令一樣運作,並要求使用者提供新的檔案名。 開啟檔案並執行儲存的實際程式是透過虛擬函式OnSaveDocument
來完成。自訂ID_FILE_SAVE有兩個常見原因。 對於未儲存的檔,只需從使用者介面移除ID_FILE_SAVE功能表項目和工具列按鈕即可。 也請確定您永遠不會弄髒您的檔(也就是永遠不要呼叫
CDocument::SetModifiedFlag
),而且架構永遠不會造成檔儲存。 對於儲存到磁片檔案以外的某個位置的檔,請定義該作業的新命令。在 的案例
COleServerDoc
中,ID_FILE_SAVE用於檔案儲存(適用于一般檔)和檔案更新(適用于內嵌檔)。如果您的檔資料儲存在個別磁片檔案中,但您不想使用預設
CDocument
序列化實作,您應該覆寫CDocument::OnSaveDocument
而不是OnFileSave
。ID_FILE_SAVE_AS將目前檔儲存在不同的檔案名下。
實作
CDocument::OnFileSaveAs
會使用與OnFileSave
相同的CDocument::DoSave
協助程式常式。 如果檔在儲存之前沒有檔案名,命令OnFileSaveAs
會像ID_FILE_SAVE一樣處理。COleServerDoc::OnFileSaveAs
會實作邏輯來儲存一般檔資料檔案,或儲存伺服器檔,代表一些其他應用程式中內嵌的 OLE 物件做為個別檔案。如果您自訂ID_FILE_SAVE的邏輯,您可能想要以類似的方式自訂ID_FILE_SAVE_AS,或「另存新檔」作業可能不適用於您的檔。 如果不需要,您可以從功能表列移除功能表項目。
ID_FILE_SAVE_COPY_AS以新名稱儲存目前複本檔。
實作
COleServerDoc::OnFileSaveCopyAs
與 非常類似CDocument::OnFileSaveAs
,不同之處在于檔物件在儲存之後不會「附加」至基礎檔案。 也就是說,如果在儲存之前已「修改」記憶體內部檔,它仍會「已修改」。 此外,此命令不會影響儲存在檔中的路徑名稱或標題。ID_FILE_UPDATE通知容器儲存內嵌檔。
實作
COleServerDoc::OnUpdateDocument
只會通知應該儲存內嵌的容器。 然後容器會呼叫適當的 OLE API,以儲存內嵌的物件。ID_FILE_PAGE_SETUP叫用應用程式特定的頁面設定/版面配置對話方塊。
目前沒有此對話方塊的標準,而且架構沒有此命令的預設實作。
如果您選擇實作此命令,建議您使用此命令識別碼。
ID_FILE_PRINT_SETUP叫用標準列印安裝對話方塊。
注意
您必須將此連線到
CWinApp
衍生類別的訊息對應,才能啟用此功能。此命令會叫用標準列印安裝對話方塊,讓使用者至少可自訂此檔的印表機和列印設定,或此應用程式中的所有檔。 您必須使用主控台來變更整個系統的預設印表機設定。
CWinApp::OnFilePrintSetup
具有建立 物件並呼叫CWinApp::DoPrintDialog
實作函式的簡單實CPrintDialog
作。 這會設定應用程式預設印表機設定。自訂此命令的常見需求是允許個別檔印表機設定,該設定應該儲存時與檔一起儲存。 若要這樣做,您應該在類別中
CDocument
新增訊息對應處理常式,以建立CPrintDialog
物件、使用適當的印表機屬性初始化它(通常是 hDevMode 和 hDevNames ),呼叫CPrintDialog::DoModal
,然後儲存變更的印表機設定。 針對強固的實作,您應該查看 的實CWinApp::DoPrintDialog
作來偵測錯誤,以及CWinApp::UpdatePrinterSelection
處理合理的預設值,以及追蹤全系統的印表機變更。ID_FILE_PRINT目前檔的標準列印
注意
您必須將此連線到
CView
衍生類別的訊息對應,才能啟用此功能。此命令會正確列印目前的檔,或更正確地啟動列印程式,這牽涉到叫用標準列印對話方塊和執行列印引擎。
CView::OnFilePrint
會實作此命令和主要列印迴圈。 它會呼叫虛擬CView::OnPreparePrinting
,以提示使用者顯示列印對話方塊。 然後,它會準備輸出 DC 以移至印表機、啟動列印進度對話方塊(AFX_IDD_PRINTDLG),並將逸出傳送StartDoc
至印表機。CView::OnFilePrint
也包含主頁面導向的列印迴圈。 針對每個頁面,它會呼叫虛擬CView::OnPrepareDC
,StartPage
後面接著逸出,並呼叫該頁面的虛擬CView::OnPrint
。 完成時,會呼叫虛擬CView::OnEndPrinting
,並關閉列印進度對話方塊。MFC 列印架構的設計目的是以許多不同的方式進行列印和預覽列印。 您通常會找到適合任何頁面導向列印工作的各種
CView
可覆寫函式。 只有在使用印表機進行非頁面導向輸出的應用程式的情況下,才需要取代ID_FILE_PRINT實作。ID_FILE_PRINT_PREVIEW輸入目前檔的預覽列印模式。
注意
您必須將此連線到
CView
衍生類別的訊息對應,才能啟用此功能。CView::OnFilePrintPreview
呼叫記載的協助程式函式CView::DoPrintPreview
,以啟動預覽列印模式。CView::DoPrintPreview
是預覽列印迴圈的主要引擎,就像列印迴圈的主要引擎一樣OnFilePrint
。將不同的參數傳遞至
DoPrintPreview
,即可以各種方式自訂預覽列印作業。 請參閱 Technical Note 30 ,其中討論預覽列印的一些詳細資料,以及如何自訂。ID_FILE_MRU_FILE1...FILE16 檔案 MRU 清單 的命令識別碼範圍。
CWinApp::OnUpdateRecentFileMenu
是更新命令 UI 處理常式,這是ON_UPDATE_COMMAND_UI機制的進階用法之一。 在您的功能表資源中,您只需要定義具有識別碼ID_FILE_MRU_FILE1的單一功能表項目。 該功能表項目一開始會保持停用狀態。隨著 MRU 清單的成長,會將更多功能表項目新增至清單。 標準
CWinApp
實作預設為四個最近使用檔案的標準限制。 您可以使用較大的或較小的值來呼叫CWinApp::LoadStdProfileSettings
,以變更預設值。 MRU 清單會儲存在應用程式的 中。INI 檔案。 如果您呼叫LoadStdProfileSettings
,則會在應用程式的InitInstance
函式中載入清單,並在應用程式結束時儲存。 MRU 更新命令 UI 處理常式也會將絕對路徑轉換成相對路徑,以便顯示在檔案功能表上。CWinApp::OnOpenRecentFile
是執行實際命令的ON_COMMAND處理常式。 它只會從 MRU 清單取得檔案名並呼叫CWinApp::OpenDocumentFile
,這會執行開啟檔案並更新 MRU 清單的所有工作。不建議自訂此命令處理常式。
ID_EDIT_CLEAR清除目前的選取範圍
目前沒有此命令的標準實作。 您必須針對每個
CView
衍生類別實作此專案。CEditView
使用CEdit::Clear
提供此命令的實作。 如果沒有目前的選取範圍,命令就會停用。如果您選擇實作此命令,建議您使用此命令識別碼。
ID_EDIT_CLEAR_ALL清除整份檔。
目前沒有此命令的標準實作。 您必須針對每個
CView
衍生類別實作此專案。如果您選擇實作此命令,建議您使用此命令識別碼。 如需範例實作,請參閱 MFC 教學課程範例 SCRIBBLE 。
ID_EDIT_COPY將目前的選取範圍複製到剪貼簿。
目前沒有此命令的標準實作。 您必須針對每個
CView
衍生類別實作此專案。CEditView
提供此命令的實作,這個命令會使用CEdit::Copy
將目前選取的文字複製到剪貼簿做為CF_TEXT。 如果沒有目前的選取範圍,命令就會停用。如果您選擇實作此命令,建議您使用此命令識別碼。
ID_EDIT_CUT剪下目前選取範圍至剪貼簿。
目前沒有此命令的標準實作。 您必須針對每個
CView
衍生類別實作此專案。CEditView
提供此命令的實作,這個命令會使用CEdit::Cut
將目前選取的文字剪下為剪貼簿CF_TEXT。 如果沒有目前的選取範圍,命令就會停用。如果您選擇實作此命令,建議您使用此命令識別碼。
ID_EDIT_FIND開始尋找作業,會顯示無模式尋找對話方塊。
目前沒有此命令的標準實作。 您必須針對每個
CView
衍生類別實作此專案。CEditView
提供此命令的實作,它會呼叫實作協助程式函OnEditFindReplace
式,以在私用實作變數中儲存先前的尋找/取代設定。 類別CFindReplaceDialog
可用來管理無強制回應對話方塊,以提示使用者。如果您選擇實作此命令,建議您使用此命令識別碼。
ID_EDIT_PASTE插入目前的剪貼簿內容。
目前沒有此命令的標準實作。 您必須針對每個
CView
衍生類別實作此專案。CEditView
提供此命令的實作,這個命令會複製目前剪貼簿資料,以使用CEdit::Paste
取代選取的文字。 如果剪貼簿中沒有 CF_TEXT ,命令就會停用。COleClientDoc
只提供此命令的更新命令 UI 處理常式。 如果剪貼簿不包含可內嵌的 OLE 專案/物件,命令將會停用。 您必須負責撰寫實際命令的處理常式,以執行實際貼上。 如果您的 OLE 應用程式也可以貼上其他格式,您應該在檢視或檔中提供自己的更新命令 UI 處理常式(也就是命令目標路由中的某COleClientDoc
處)。如果您選擇實作此命令,建議您使用此命令識別碼。
若要取代標準 OLE 實作,請使用
COleClientItem::CanPaste
。ID_EDIT_PASTE_LINK從目前的剪貼簿內容插入連結。
目前沒有此命令的標準實作。 您必須針對每個
CView
衍生類別實作此專案。COleDocument
只提供此命令的更新命令 UI 處理常式。 如果剪貼簿未包含可連結的 OLE 專案/物件,命令將會停用。 您必須負責撰寫實際命令的處理常式,以執行實際貼上。 如果您的 OLE 應用程式也可以貼上其他格式,您應該在檢視或檔中提供自己的更新命令 UI 處理常式(也就是命令目標路由中的某COleDocument
處)。如果您選擇實作此命令,建議您使用此命令識別碼。
若要取代標準 OLE 實作,請使用
COleClientItem::CanPasteLink
。ID_EDIT_PASTE_SPECIAL使用選項插入目前的剪貼簿內容。
目前沒有此命令的標準實作。 您必須針對每個
CView
衍生類別實作此專案。 MFC 未提供此對話方塊。如果您選擇實作此命令,建議您使用此命令識別碼。
ID_EDIT_REPEAT重複最後一個作業。
目前沒有此命令的標準實作。 您必須針對每個
CView
衍生類別實作此專案。CEditView
提供此命令的實作,以重複最後一個尋找作業。 會使用最後一個尋找的私人實作變數。 如果無法嘗試尋找,命令就會停用。如果您選擇實作此命令,建議您使用此命令識別碼。
ID_EDIT_REPLACE開始取代作業,會顯示無模式取代對話方塊。
目前沒有此命令的標準實作。 您必須針對每個
CView
衍生類別實作此專案。CEditView
提供此命令的實作,它會呼叫實作協助程式函OnEditFindReplace
式,以在私用實作變數中儲存先前的尋找/取代設定。 類別CFindReplaceDialog
可用來管理提示使用者的無強制回應對話方塊。如果您選擇實作此命令,建議您使用此命令識別碼。
ID_EDIT_SELECT_ALL選取整個檔。
目前沒有此命令的標準實作。 您必須針對每個
CView
衍生類別實作此專案。CEditView
提供此命令的實作,這個命令會選取檔中的所有文字。 如果沒有要選取的文字,命令就會停用。如果您選擇實作此命令,建議您使用此命令識別碼。
ID_EDIT_UNDO復原最後一個作業。
目前沒有此命令的標準實作。 您必須針對每個
CView
衍生類別實作此專案。CEditView
使用CEdit::Undo
提供此命令的實作。 如果CEdit::CanUndo
傳回 FALSE,則會停用命令。如果您選擇實作此命令,建議您使用此命令識別碼。
ID_EDIT_REDO重做最後一個作業。
目前沒有此命令的標準實作。 您必須針對每個
CView
衍生類別實作此專案。如果您選擇實作此命令,建議您使用此命令識別碼。
ID_WINDOW_NEW開啟使用中檔的另一個視窗。
CMDIFrameWnd::OnWindowNew
使用目前檔的檔範本來建立另一個框架,其中包含目前檔的另一個檢視,以實作這項強大的功能。就像大部分的多個文檔介面 (MDI) 視窗功能表命令一樣,如果沒有使用中的 MDI 子視窗,命令就會停用。
不建議自訂此命令處理常式。 如果您想要提供建立其他檢視或框架視窗的命令,您最好能發明自己的命令。 您可以從 複製程式碼
CMDIFrameWnd::OnWindowNew
,並將其修改為您喜好的特定框架和檢視類別。ID_WINDOW_ARRANGE排列 MDI 視窗底部的圖示。
CMDIFrameWnd
在實作協助程式函式OnMDIWindowCmd
中實作此標準 MDI 命令。 此協助程式會將命令識別碼對應至 MDI Windows 訊息,因此可以共用許多程式碼。如同大部分的 MDI 視窗功能表命令,如果沒有作用中的 MDI 子視窗,命令就會停用。
不建議自訂此命令處理常式。
ID_WINDOW_CASCADE Cascades 視窗,使其重迭。
CMDIFrameWnd
在實作協助程式函式OnMDIWindowCmd
中實作此標準 MDI 命令。 此協助程式會將命令識別碼對應至 MDI Windows 訊息,因此可以共用許多程式碼。如同大部分的 MDI 視窗功能表命令,如果沒有作用中的 MDI 子視窗,命令就會停用。
不建議自訂此命令處理常式。
ID_WINDOW_TILE_HORZ水準磚視窗。
此命令實作
CMDIFrameWnd
的方式就像ID_WINDOW_CASCADE一樣,不同 MDI Windows 訊息會用於作業。您應該為應用程式挑選預設磚方向。 您可以將視窗 「Tile」 功能表項目的識別碼變更為 [ID_WINDOW_TILE_HORZ] 或 [ID_WINDOW_TILE_VERT]。
ID_WINDOW_TILE_VERT垂直磚視窗。
此命令實作
CMDIFrameWnd
的方式就像ID_WINDOW_CASCADE一樣,不同 MDI Windows 訊息會用於作業。您應該為應用程式挑選預設磚方向。 您可以將視窗 「Tile」 功能表項目的識別碼變更為 [ID_WINDOW_TILE_HORZ] 或 [ID_WINDOW_TILE_VERT]。
ID_WINDOW_SPLIT要分割的鍵盤介面。
CView
會處理實作的CSplitterWnd
此命令。 如果檢視是分割器視窗的一部分,此命令會委派給實作函式CSplitterWnd::DoKeyboardSplit
。 這會將分隔器放在允許鍵盤使用者分割或取消分割視窗的模式中。如果檢視不在分割器中,則會停用此命令。
不建議自訂此命令處理常式。
ID_APP_ABOUT叫用 [關於] 對話方塊。
應用程式 [關於] 方塊沒有標準實作。 預設的 AppWizard 建立應用程式會為您的應用程式建立自訂對話方塊類別,並將其作為 [關於] 方塊使用。 AppWizard 也會撰寫可處理此命令並叫用對話方塊的簡單命令處理常式。
您幾乎一律會實作此命令。
ID_APP_EXIT結束應用程式。
CWinApp::OnAppExit
將WM_CLOSE訊息傳送至應用程式主視窗,以處理此命令。 實作會CFrameWnd
處理應用程式的標準關機(提示檔案等等)。不建議自訂此命令處理常式。 建議覆寫
CWinApp::SaveAllModified
或CFrameWnd
關閉邏輯。如果您選擇實作此命令,建議您使用此命令識別碼。
ID_HELP_INDEX列出 的 [說明] 主題。HLP 檔案。
注意
您必須將此連線到
CWinApp
衍生類別的訊息對應,才能啟用此功能。CWinApp::OnHelpIndex
藉由簡單呼叫CWinApp::WinHelp
來處理此命令。不建議自訂此命令處理常式。
ID_HELP_USING顯示如何使用說明的說明。
注意
您必須將此連線到
CWinApp
衍生類別的訊息對應,才能啟用此功能。CWinApp::OnHelpUsing
藉由簡單呼叫CWinApp::WinHelp
來處理此命令。不建議自訂此命令處理常式。
ID_CONTEXT_HELP輸入 SHIFT-F1 說明模式。
注意
您必須將此連線到
CWinApp
衍生類別的訊息對應,才能啟用此功能。CWinApp::OnContextHelp
藉由設定說明模式資料指標、輸入強制回應迴圈,並等候使用者選取視窗以取得說明,以處理此命令。 如需 MFC 說明實作的詳細資訊,請參閱 技術附注 28 。不建議自訂此命令處理常式。
ID_HELP提供目前內容的說明
注意
您必須將此連線到
CWinApp
衍生類別的訊息對應,才能啟用此功能。CWinApp::OnHelp
取得目前應用程式內容的正確說明內容,以處理此命令。 這會處理簡單的 F1 說明、訊息方塊的說明等等。 如需 MFC 說明實作的詳細資訊,請參閱 技術附注 28 。不建議自訂此命令處理常式。
ID_DEFAULT_HELP 顯示內容的預設說明
注意
您必須將此連線到
CWinApp
衍生類別的訊息對應,才能啟用此功能。此命令通常對應至
CWinApp::OnHelpIndex
。如果需要預設說明與說明索引之間的差異,則可以提供不同的命令處理常式。
ID_NEXT_PANE移至下一個窗格
CView
會處理實作的CSplitterWnd
此命令。 如果檢視是分割器視窗的一部分,此命令會委派給實作函式CSplitterWnd::OnNextPaneCmd
。 這會將作用中檢視移至分隔器中的下一個窗格。如果檢視不在分割器中,或沒有下一個窗格可移至,則會停用此命令。
不建議自訂此命令處理常式。
ID_PREV_PANE移至上一個窗格
CView
會處理實作的CSplitterWnd
此命令。 如果檢視是分割器視窗的一部分,此命令會委派給實作函式CSplitterWnd::OnNextPaneCmd
。 這會將作用中檢視移至分割器中的上一個窗格。如果檢視不在分割器中,或沒有上一個窗格可移至,則會停用此命令。
不建議自訂此命令處理常式。
ID_OLE_INSERT_NEW插入新的 OLE 物件
目前沒有此命令的標準實作。 您必須為衍生類別實作
CView
這個 ,才能在目前選取範圍中插入新的 OLE 專案/物件。所有 OLE 用戶端應用程式都應該實作此命令。 AppWizard,使用 OLE 選項,會在檢視類別中建立 的基本架構實
OnInsertObject
作,您必須完成。如需此命令的完整實作,請參閱 MFC OLE 範例 OCLIENT 範例。
ID_OLE_EDIT_LINKS編輯 OLE 連結
COleDocument
使用標準 OLE 連結對話方塊的 MFC 提供的實作來處理此命令。 這個對話方塊的實作是透過COleLinksDialog
類別存取。 如果目前的檔未包含任何連結,則會停用命令。不建議自訂此命令處理常式。
ID_OLE_VERB_FIRST...LAST OLE 動詞的識別碼範圍
COleDocument
會針對目前選取的 OLE 專案/物件所支援的動詞,使用此命令識別碼範圍。 這必須是範圍,因為指定的 OLE 專案/物件類型可以支援零個或多個自訂動詞。 在應用程式的功能表中,您應該有一個具有ID_OLE_VERB_FIRST識別碼的功能表項目。 執行程式時,功能表會以適當的功能表動詞描述來更新(或具有許多動詞的快顯功能表)。 OLE 功能表的管理是由 處理AfxOleSetEditMenu
,在此命令的更新命令 UI 處理常式中完成。沒有明確的命令處理常式可處理此範圍中的每個命令識別碼。
COleDocument::OnCmdMsg
會覆寫以捕捉此範圍中的所有命令識別碼、將其轉換成以零為起始的動詞編號,然後啟動該動詞的伺服器(使用COleClientItem::DoVerb
)。不建議自訂或使用此命令識別碼範圍。
ID_VIEW_TOOLBAR切換工具列開啟和關閉
CFrameWnd
會處理此命令和 update-command UI 處理常式,以切換工具列的可見狀態。 工具列必須是框架的子視窗,且子視窗識別碼為 AFX_IDW_TOOLBAR。 命令處理常式實際上會切換工具列視窗的可見度。CFrameWnd::RecalcLayout
是用來重新繪製框架視窗及其新狀態的工具列。 當工具列可見時,update-command UI 處理常式會檢查功能表項目。不建議自訂此命令處理常式。 如果您想要新增其他工具列,您會想要複製和修改此命令的命令處理常式和 update-command UI 處理常式。
ID_VIEW_STATUS_BAR切換狀態列開啟和關閉
此命令實作
CFrameWnd
的方式就像ID_VIEW_TOOLBAR一樣,但使用不同的子視窗識別碼(AFX_IDW_STATUS_BAR)。
僅限更新的命令處理常式
數個標準命令識別碼會當做狀態列的指標使用。 這些程式會使用相同的更新命令 UI 處理機制,在應用程式閒置期間顯示其目前視覺狀態。 由於使用者無法選取它們(也就是您無法推送狀態列窗格),因此對於這些命令識別碼具有ON_COMMAND處理常式並無意義。
ID_INDICATOR_CAPS:CAP 鎖定指標。
ID_INDICATOR_NUM:NUM 鎖定指標。
ID_INDICATOR_SCRL:SCRL 鎖定指標。
ID_INDICATOR_KANA:KANA 鎖定指示器(僅適用于日本系統)。
這三者都是在 中 CFrameWnd::OnUpdateKeyIndicator
實作的,實作協助程式會使用命令識別碼對應至適當的虛擬金鑰。 一般實作會啟用或停用物件,視目前是否鎖定適當的虛擬金鑰而定,啟用或停用物件(針對已停用的狀態窗格 = 沒有文字 CCmdUI
)。
不建議自訂此命令處理常式。
ID_INDICATOR_EXT:EXTended 選取指標。
ID_INDICATOR_OVR :OVeRstrike 指標。
ID_INDICATOR_REC :RECording 指標。
目前沒有這些指標的標準實作。
如果您選擇實作這些指標,建議您使用這些指標識別碼,並維護狀態列中指標的順序(也就是,依下列順序:EXT、CAP、NUM、SCRL、OVR、REC)。