Sdílet prostřednictvím


TN022: Implementace standardních příkazů

Poznámka

Následující technická poznámka se od prvního zahrnutí do online dokumentace neaktualizovala. V důsledku toho můžou být některé postupy a témata zastaralé nebo nesprávné. Nejnovější informace doporučujeme vyhledat v online indexu dokumentace, které vás zajímá.

Tato poznámka popisuje standardní implementace příkazů poskytované mfc 2.0. Nejprve si přečtěte technickou poznámku 21 , protože popisuje mechanismy používané k implementaci mnoha standardních příkazů.

Tento popis předpokládá znalost architektur MFC, rozhraní API a běžné programovací praxe. Zdokumentovaná i nezdokumentovaná rozhraní API "pouze implementace" jsou popsaná. Není to místo, kde se můžete začít učit o funkcích prostředí MFC nebo o tom, jak programovat. Další obecné informace a podrobnosti o dokumentovaných rozhraních API najdete v jazyce Visual C++.

Problém

MFC definuje mnoho standardních ID příkazů v souboru hlaviček AFXRES.H. Podpora rozhraní pro tyto příkazy se liší. Pochopení, kde a jak třídy architektury zpracovávají tyto příkazy, vám nejen ukážou, jak architektura funguje interně, ale poskytne užitečné informace o tom, jak přizpůsobit standardní implementace a naučit vás několik technik pro implementaci vlastních obslužných rutin příkazů.

Obsah této technické poznámky

Každé ID příkazu je popsáno ve dvou částech:

  • Název: symbolický název ID příkazu (například ID_FILE_SAVE) následovaný účelem příkazu (například "uloží aktuální dokument") oddělený dvojtečku.

  • Jeden nebo více odstavců popisujících, které třídy implementují příkaz a co výchozí implementace dělá

Většinavýchozích Existují některé implementace příkazů, které vyžadují explicitní zapojení v odvozené třídě. Jsou popsány v části "Poznámka". Pokud jste zvolili správné možnosti v AppWizard, budou tyto výchozí obslužné rutiny připojeny k vám ve vygenerované kostru aplikace.

Konvence vytváření názvů

Standardní příkazy se řídí jednoduchými zásadami vytváření názvů, které doporučujeme použít, pokud je to možné. Většina standardních příkazů se nachází na standardních místech na řádku nabídek aplikace. Symbolický název příkazu začíná na "ID_" a za ním název standardní místní nabídky následovaný názvem položky nabídky. Symbolický název je velkými písmeny s podtržítkem konců slov. Pro příkazy, které nemají standardní názvy položek nabídky, je definován název logického příkazu začínající na "ID_" (například ID_NEXT_PANE).

Předponu "ID_" používáme k označení příkazů, které jsou určené k vázání na položky nabídky, tlačítka panelu nástrojů nebo jiné objekty uživatelského rozhraní příkazu. Obslužné rutiny příkazů, které zpracovávají příkazy ID_, by měly používat mechanismy ON_COMMAND a ON_UPDATE_COMMAND_UI architektury příkazů MFC.

Pro položky nabídky, které nedodržují architekturu příkazů, doporučujeme použít standardní předponu "IDM_" a pro povolení a zakázání kódu specifického pro nabídku. Samozřejmě, že počet příkazů specifických pro nabídku by měl být malý, protože následující architektura příkazů MFC nejen zvýrazňuje obslužné rutiny příkazů (protože budou pracovat s panely nástrojů), ale kód obslužné rutiny příkazů bude opakovaně použitelný.

Rozsahy ID

Další podrobnosti o použití rozsahů ID v prostředí MFC najdete v technické poznámce 20.

Standardní příkazy MFC spadají do rozsahu 0xE000 0xEFFF. Nespoléhejte na konkrétní hodnoty těchto ID, protože se můžou změnit v budoucích verzích knihovny.

Aplikace by měla definovat své příkazy v rozsahu 0x8000 0xDFFF.

ID standardních příkazů

Pro každé ID příkazu existuje standardní řetězec příkazového řádku zprávy, který lze najít v souboru PROMPTS. RC. ID řetězce pro tento řádek nabídky musí být stejné jako pro ID příkazu.

  • ID_FILE_NEW Vytvoří nový nebo prázdný dokument.

    Poznámka

    Chcete-li tuto funkci povolit, musíte ji připojit k CWinAppmapě zpráv odvozené třídy.

    CWinApp::OnFileNew implementuje tento příkaz odlišně v závislosti na počtu šablon dokumentů v aplikaci. Pokud existuje pouze jeden CDocTemplate, CWinApp::OnFileNew vytvoří nový dokument tohoto typu, stejně jako správný rámec a třídu zobrazení.

    Pokud existuje více než jeden CDocTemplate, CWinApp::OnFileNew zobrazí uživateli výzvu s dialogovým oknem (AFX_IDD_NEWTYPEDLG), ve kterém mu umožní vybrat typ dokumentu, který chcete použít. CDocTemplate Vybraná položka slouží k vytvoření dokumentu.

    Jedním z běžných přizpůsobení ID_FILE_NEW je poskytnutí jiného a více grafického výběru typů dokumentů. V takovém případě můžete implementovat vlastní CMyApp::OnFileNew a umístit ho do mapy zpráv místo CWinApp::OnFileNew. Není nutné volat implementaci základní třídy.

    Dalším běžným přizpůsobením ID_FILE_NEW je poskytnout samostatný příkaz pro vytvoření dokumentu každého typu. V tomto případě byste měli definovat nová ID příkazů, například ID_FILE_NEW_CHART a ID_FILE_NEW_SHEET.

  • ID_FILE_OPEN Otevře existující dokument.

    Poznámka

    Chcete-li tuto funkci povolit, musíte ji připojit k CWinAppmapě zpráv odvozené třídy.

    CWinApp::OnFileOpen má velmi jednoduchou implementaci volání CWinApp::DoPromptFileName následované souborem CWinApp::OpenDocumentFile nebo názvem cesty k souboru, který se má otevřít. Rutina CWinApp implementace DoPromptFileName zobrazí standardní dialogové okno FileOpen a vyplní ho příponami souborů získanými z aktuálních šablon dokumentů.

    Jedním z běžných přizpůsobení ID_FILE_OPEN je přizpůsobení dialogového okna FileOpen nebo přidání dalších filtrů souborů. Doporučeným způsobem, jak tuto možnost přizpůsobit, je nahradit výchozí implementaci vlastním dialogem FileOpen a volat CWinApp::OpenDocumentFile název souboru nebo cesty dokumentu. Není nutné volat základní třídu.

  • ID_FILE_CLOSE zavře aktuálně otevřený dokument.

    CDocument::OnFileClose zavolá CDocument::SaveModified , aby uživatel zobrazil výzvu k uložení dokumentu, pokud byl změněn, a pak zavolá OnCloseDocument. Veškerá závěrová logika, včetně zničení dokumentu, se provádí v rutině OnCloseDocument .

    Poznámka

    ID_FILE_CLOSE funguje jinak než WM_CLOSE zpráva nebo systémový příkaz SC_CLOSE odeslaný do okna rámečku dokumentů. Zavření okna zavře dokument jenom v případě, že se jedná o poslední okno rámečku s dokumentem. Zavření dokumentu pomocí ID_FILE_CLOSE dokument nejen zavře, ale zavře všechna okna s rámečkem, která dokument zobrazují.

  • ID_FILE_SAVE Uloží aktuální dokument.

    Implementace používá pomocnou rutinu CDocument::DoSave , která se používá pro obě OnFileSave a OnFileSaveAs. Pokud uložíte dokument, který nebyl uložen dříve (to znamená, že nemá název cesty, jako v případě FileNew) nebo který byl načten z dokumentu jen pro čtení, OnFileSave logika bude fungovat jako příkaz ID_FILE_SAVE_AS a požádá uživatele, aby zadal nový název souboru. Skutečný proces otevření souboru a provedení ukládání se provádí prostřednictvím virtuální funkce OnSaveDocument.

    Existují dva běžné důvody přizpůsobení ID_FILE_SAVE. U dokumentů, které se neuloží, jednoduše odeberte položky nabídky ID_FILE_SAVE a tlačítka panelu nástrojů z uživatelského rozhraní. Také se ujistěte, že jste nikdy nezašpinili dokument (to znamená nikdy volat CDocument::SetModifiedFlag) a architektura nikdy nezpůsobí uložení dokumentu. Pro dokumenty, které se ukládají na jiné místo než diskový soubor, definujte nový příkaz pro danou operaci.

    V případě COleServerDoc, ID_FILE_SAVE se používá pro ukládání souborů (pro normální dokumenty) i pro aktualizaci souborů (pro vložené dokumenty).

    Pokud jsou data dokumentu uložena v jednotlivých diskových souborech, ale nechcete použít výchozí CDocument serializaci implementace, měli byste místo CDocument::OnSaveDocument OnFileSave.

  • ID_FILE_SAVE_AS uloží aktuální dokument pod jiným názvem souboru.

    Implementace CDocument::OnFileSaveAs používá stejnou CDocument::DoSave pomocnou rutinu jako OnFileSave. Příkaz OnFileSaveAs se zpracovává stejně jako ID_FILE_SAVE, pokud dokumenty před uložením neměly žádný název souboru. COleServerDoc::OnFileSaveAs implementuje logiku pro uložení normálního datového souboru dokumentu nebo uložení serverového dokumentu představujícího objekt OLE vložený v některé jiné aplikaci jako samostatný soubor.

    Pokud přizpůsobíte logiku ID_FILE_SAVE, pravděpodobně budete chtít přizpůsobit ID_FILE_SAVE_AS podobným způsobem nebo se operace Uložit jako nemusí v dokumentu vztahovat. Položku nabídky můžete odebrat z řádku nabídek, pokud ji nepotřebujete.

  • ID_FILE_SAVE_COPY_AS Uloží kopii aktuálního dokumentu pod novým názvem.

    Implementace COleServerDoc::OnFileSaveCopyAs je velmi podobná CDocument::OnFileSaveAs, s výjimkou, že objekt dokumentu není "připojen" k podkladovému souboru po uložení. To znamená, že pokud byl dokument v paměti před uložením "změněn", je stále "změněn". Tento příkaz navíc nemá žádný vliv na název cesty nebo název uložený v dokumentu.

  • ID_FILE_UPDATE upozorní kontejner, aby uložil vložený dokument.

    Implementace COleServerDoc::OnUpdateDocument jednoduše neofiguruje kontejner, který se má vložit. Kontejner pak volá příslušná rozhraní OLE API pro uložení vloženého objektu.

  • ID_FILE_PAGE_SETUP vyvolá dialogové okno vzhled a rozložení stránky specifické pro aplikaci.

    V současné době pro tento dialog neexistuje žádný standard a architektura nemá výchozí implementaci tohoto příkazu.

    Pokud se rozhodnete tento příkaz implementovat, doporučujeme použít toto ID příkazu.

  • ID_FILE_PRINT_SETUP Vyvolání standardního dialogového okna Nastavení tisku.

    Poznámka

    Chcete-li tuto funkci povolit, musíte ji připojit k CWinAppmapě zpráv odvozené třídy.

    Tento příkaz vyvolá standardní dialogové okno nastavení tisku, které umožňuje uživateli přizpůsobit nastavení tiskárny a tisku alespoň pro tento dokument nebo většinu dokumentů v této aplikaci. Chcete-li změnit výchozí nastavení tiskárny pro celý systém, musíte použít Ovládací panely.

    CWinApp::OnFilePrintSetup má velmi jednoduchou implementaci vytvoření objektu CPrintDialog CWinApp::DoPrintDialog a volání implementační funkce. Tím se nastaví výchozí nastavení tiskárny aplikace.

    Běžnou potřebou přizpůsobení tohoto příkazu je povolit nastavení tiskárny pro jednotlivé dokumenty, která by se měla uložit s dokumentem při uložení. K tomu byste měli přidat obslužnou CPrintDialog rutinu mapy zpráv ve vaší CDocument třídě, která vytvoří objekt, inicializuje ho příslušnými atributy tiskárny (obvykle hDevMode a hDevNames), zavolá CPrintDialog::DoModala uloží změněné nastavení tiskárny. V případě robustní implementace byste se měli podívat na implementaci CWinApp::DoPrintDialog zjišťování chyb a CWinApp::UpdatePrinterSelection na řešení rozumných výchozích hodnot a sledování změn tiskáren v celém systému.

  • ID_FILE_PRINT Standardní tisk aktuálního dokumentu

    Poznámka

    Chcete-li tuto funkci povolit, musíte ji připojit k CViewmapě zpráv odvozené třídy.

    Tento příkaz vytiskne aktuální dokument nebo správně spustí proces tisku, který zahrnuje vyvolání standardního dialogového okna tisku a spuštění tiskového stroje.

    CView::OnFilePrint implementuje tento příkaz a hlavní smyčku print. Zavolá virtuální CView::OnPreparePrinting , aby se uživateli zobrazila výzva s dialogovým oknem tisk. Potom připraví výstupní řadič domény pro přechod na tiskárnu, zobrazí dialogové okno průběhu tisku (AFX_IDD_PRINTDLG) a odešle StartDoc řídicí znak do tiskárny. CView::OnFilePrint obsahuje také hlavní smyčku tisku orientované na stránku. Pro každou stránku volá virtuální CView::OnPrepareDC následovaný řídicím StartPage znakem a volá virtuální CView::OnPrint stránku. Po dokončení se virtuální počítač CView::OnEndPrinting zavolá a dialogové okno průběhu tisku se zavře.

    Architektura tisku MFC je navržená tak, aby se připojovat mnoha různými způsoby pro tisk a náhled tisku. Obvykle najdete různé CView přepisovatelné funkce odpovídající všem stránkovým úlohám tisku. Pouze v případě aplikace, která používá tiskárnu pro nestráně orientovaný výstup, byste měli najít potřebu nahradit ID_FILE_PRINT implementaci.

  • ID_FILE_PRINT_PREVIEW Pro aktuální dokument zadejte režim náhledu tisku.

    Poznámka

    Chcete-li tuto funkci povolit, musíte ji připojit k CViewmapě zpráv odvozené třídy.

    CView::OnFilePrintPreview spustí režim náhledu tisku voláním zdokumentované pomocné funkce CView::DoPrintPreview. CView::DoPrintPreview je hlavní modul smyčky náhledu tisku, stejně jako OnFilePrint hlavní modul tiskové smyčky.

    Operace náhledu tisku lze přizpůsobit různými způsoby předáním různých parametrů .DoPrintPreview Přečtěte si technickou poznámku 30, která popisuje některé podrobnosti náhledu tisku a postup jeho přizpůsobení.

  • ID_FILE_MRU_FILE1... FILE16 Rozsah ID příkazů pro seznam SOUBOR MRU.

    CWinApp::OnUpdateRecentFileMenu je obslužná rutina uživatelského rozhraní aktualizačního příkazu, která je jedním z pokročilejších použití ON_UPDATE_COMMAND_UI mechanismu. V prostředku nabídky potřebujete definovat pouze jednu položku nabídky s ID ID_FILE_MRU_FILE1. Tato položka nabídky zůstane zpočátku zakázaná.

    S rostoucím seznamem MRU se do seznamu přidají další položky nabídky. CWinApp Standardní implementace ve výchozím nastavení používá standardní limit čtyř naposledy použitých souborů. Výchozí nastavení můžete změnit voláním CWinApp::LoadStdProfileSettings s větší nebo menší hodnotou. Seznam MRU je uložen v aplikaci . SOUBOR INI. Seznam se načte do funkce vaší aplikace InitInstance , pokud zavoláte LoadStdProfileSettings, a uloží se při ukončení aplikace. Obslužná rutina uživatelského rozhraní pro aktualizaci MRU také převede absolutní cesty k relativním cestám pro zobrazení v nabídce souboru.

    CWinApp::OnOpenRecentFile je obslužná rutina ON_COMMAND, která provádí skutečný příkaz. Jednoduše získá název souboru ze seznamu MRU a volání CWinApp::OpenDocumentFile, což dělá veškerou práci otevření souboru a aktualizaci seznamu MRU.

    Vlastní nastavení této obslužné rutiny příkazu se nedoporučuje.

  • ID_EDIT_CLEAR vymaže aktuální výběr.

    V současné době pro tento příkaz neexistuje žádná standardní implementace. Musíte ho implementovat pro každou CViewodvozenou třídu.

    CEditView poskytuje implementaci tohoto příkazu pomocí CEdit::Clear. Příkaz je zakázán, pokud neexistuje aktuální výběr.

    Pokud se rozhodnete tento příkaz implementovat, doporučujeme použít toto ID příkazu.

  • ID_EDIT_CLEAR_ALL vymaže celý dokument.

    V současné době pro tento příkaz neexistuje žádná standardní implementace. Musíte ho implementovat pro každou CViewodvozenou třídu.

    Pokud se rozhodnete tento příkaz implementovat, doporučujeme použít toto ID příkazu. Příklad implementace najdete v ukázce kurzu MFC SCRIBBLE .

  • ID_EDIT_COPY Zkopíruje aktuální výběr do schránky.

    V současné době pro tento příkaz neexistuje žádná standardní implementace. Musíte ho implementovat pro každou CViewodvozenou třídu.

    CEditView poskytuje implementaci tohoto příkazu, který zkopíruje aktuálně vybraný text do schránky jako CF_TEXT pomocí CEdit::Copy. Příkaz je zakázán, pokud neexistuje aktuální výběr.

    Pokud se rozhodnete tento příkaz implementovat, doporučujeme použít toto ID příkazu.

  • ID_EDIT_CUT Vyjme aktuální výběr do schránky.

    V současné době pro tento příkaz neexistuje žádná standardní implementace. Musíte ho implementovat pro každou CViewodvozenou třídu.

    CEditView poskytuje implementaci tohoto příkazu, který vyjme aktuálně vybraný text do schránky jako CF_TEXT pomocí CEdit::Cut. Příkaz je zakázán, pokud neexistuje aktuální výběr.

    Pokud se rozhodnete tento příkaz implementovat, doporučujeme použít toto ID příkazu.

  • ID_EDIT_FIND Spustí operaci hledání, zobrazí dialogové okno bez režimu hledání.

    V současné době pro tento příkaz neexistuje žádná standardní implementace. Musíte ho implementovat pro každou CViewodvozenou třídu.

    CEditView poskytuje implementaci tohoto příkazu, která volá pomocnou funkci OnEditFindReplace implementace, která použije a uloží předchozí nastavení find/replace v privátních implementačních proměnných. Třída CFindReplaceDialog slouží ke správě dialogového okna bez režimu pro zobrazení výzvy uživateli.

    Pokud se rozhodnete tento příkaz implementovat, doporučujeme použít toto ID příkazu.

  • ID_EDIT_PASTE Vloží aktuální obsah schránky.

    V současné době pro tento příkaz neexistuje žádná standardní implementace. Musíte ho implementovat pro každou CViewodvozenou třídu.

    CEditView poskytuje implementaci tohoto příkazu, který zkopíruje aktuální data schránky nahrazující vybraný text pomocí CEdit::Paste. Příkaz je zakázán, pokud ve schránce není žádná CF_TEXT .

    COleClientDoc pouze poskytuje obslužnou rutinu uživatelského rozhraní pro aktualizaci tohoto příkazu. Pokud schránka neobsahuje vloženou položku nebo objekt OLE, příkaz bude zakázán. Zodpovídáte za napsání obslužné rutiny pro skutečný příkaz, který provede skutečné vložení. Pokud vaše aplikace OLE může také vložit jiné formáty, měli byste do zobrazení nebo dokumentu zadat vlastní obslužnou rutinu uživatelského rozhraní pro aktualizaci (to znamená někde před COleClientDoc směrováním cíle příkazu).

    Pokud se rozhodnete tento příkaz implementovat, doporučujeme použít toto ID příkazu.

    Pro nahrazení standardní implementace OLE použijte COleClientItem::CanPaste.

  • ID_EDIT_PASTE_LINK Vloží odkaz z aktuálního obsahu schránky.

    V současné době pro tento příkaz neexistuje žádná standardní implementace. Musíte ho implementovat pro každou CViewodvozenou třídu.

    COleDocument pouze poskytuje obslužnou rutinu uživatelského rozhraní pro aktualizaci tohoto příkazu. Pokud schránka neobsahuje propojitelnou položku nebo objekt OLE, příkaz bude zakázán. Zodpovídáte za napsání obslužné rutiny pro skutečný příkaz, který provede skutečné vložení. Pokud vaše aplikace OLE může také vložit jiné formáty, měli byste do zobrazení nebo dokumentu zadat vlastní obslužnou rutinu uživatelského rozhraní pro aktualizaci (to znamená někde před COleDocument směrováním cíle příkazu).

    Pokud se rozhodnete tento příkaz implementovat, doporučujeme použít toto ID příkazu.

    Pro nahrazení standardní implementace OLE použijte COleClientItem::CanPasteLink.

  • ID_EDIT_PASTE_SPECIAL Vloží aktuální obsah schránky s možnostmi.

    V současné době pro tento příkaz neexistuje žádná standardní implementace. Musíte ho implementovat pro každou CViewodvozenou třídu. MFC toto dialogové okno neposkytuje.

    Pokud se rozhodnete tento příkaz implementovat, doporučujeme použít toto ID příkazu.

  • ID_EDIT_REPEAT zopakuje poslední operaci.

    V současné době pro tento příkaz neexistuje žádná standardní implementace. Musíte ho implementovat pro každou CViewodvozenou třídu.

    CEditView poskytuje implementaci tohoto příkazu pro opakování poslední operace hledání. Použijí se privátní proměnné implementace posledního hledání. Příkaz je zakázán, pokud se nelze pokusit najít.

    Pokud se rozhodnete tento příkaz implementovat, doporučujeme použít toto ID příkazu.

  • ID_EDIT_REPLACE Spustí operaci nahrazení, zobrazí dialogové okno bez režimu nahrazení.

    V současné době pro tento příkaz neexistuje žádná standardní implementace. Musíte ho implementovat pro každou CViewodvozenou třídu.

    CEditView poskytuje implementaci tohoto příkazu, která volá pomocnou funkci OnEditFindReplace implementace, která použije a uloží předchozí nastavení find/replace v privátních implementačních proměnných. Třída CFindReplaceDialog slouží ke správě bezmodového dialogového okna, které uživatele vyzve.

    Pokud se rozhodnete tento příkaz implementovat, doporučujeme použít toto ID příkazu.

  • ID_EDIT_SELECT_ALL Vybere celý dokument.

    V současné době pro tento příkaz neexistuje žádná standardní implementace. Musíte ho implementovat pro každou CViewodvozenou třídu.

    CEditView poskytuje implementaci tohoto příkazu, který vybere veškerý text v dokumentu. Příkaz je zakázaný, pokud není k dispozici žádný text, který chcete vybrat.

    Pokud se rozhodnete tento příkaz implementovat, doporučujeme použít toto ID příkazu.

  • ID_EDIT_UNDO Vrátí zpět poslední operaci.

    V současné době pro tento příkaz neexistuje žádná standardní implementace. Musíte ho implementovat pro každou CViewodvozenou třídu.

    CEditView poskytuje implementaci tohoto příkazu pomocí CEdit::Undo. Příkaz je zakázán, pokud CEdit::CanUndo vrátí hodnotu NEPRAVDA.

    Pokud se rozhodnete tento příkaz implementovat, doporučujeme použít toto ID příkazu.

  • ID_EDIT_REDO znovu provede poslední operaci.

    V současné době pro tento příkaz neexistuje žádná standardní implementace. Musíte ho implementovat pro každou CViewodvozenou třídu.

    Pokud se rozhodnete tento příkaz implementovat, doporučujeme použít toto ID příkazu.

  • ID_WINDOW_NEW Otevře další okno v aktivním dokumentu.

    CMDIFrameWnd::OnWindowNew implementuje tuto výkonnou funkci pomocí šablony dokumentu aktuálního dokumentu k vytvoření dalšího rámce obsahujícího další zobrazení aktuálního dokumentu.

    Stejně jako u většiny příkazů nabídky okna s více rozhraními dokumentu (MDI) je příkaz zakázán, pokud neexistuje aktivní podřízené okno MDI.

    Vlastní nastavení této obslužné rutiny příkazu se nedoporučuje. Pokud chcete zadat příkaz, který vytvoří další zobrazení nebo okna s rámečkem, bude pravděpodobně lepší vymyslet vlastní příkaz. Kód CMDIFrameWnd::OnWindowNew můžete naklonovat a upravit do konkrétního rámce a zobrazit třídy vašich představ.

  • ID_WINDOW_ARRANGE Uspořádá ikony v dolní části okna MDI.

    CMDIFrameWnd implementuje tento standardní příkaz MDI do pomocné funkce OnMDIWindowCmdimplementace . Tato pomocná rutina mapuje ID příkazů na zprávy MDI systému Windows, a proto může sdílet mnoho kódu.

    Stejně jako většina příkazů nabídky okna MDI je příkaz zakázán, pokud neexistuje aktivní podřízené okno MDI.

    Vlastní nastavení této obslužné rutiny příkazu se nedoporučuje.

  • ID_WINDOW_CASCADE kaskádových oken, aby se překrývaly.

    CMDIFrameWnd implementuje tento standardní příkaz MDI do pomocné funkce OnMDIWindowCmdimplementace . Tato pomocná rutina mapuje ID příkazů na zprávy MDI systému Windows, a proto může sdílet mnoho kódu.

    Stejně jako většina příkazů nabídky okna MDI je příkaz zakázán, pokud neexistuje aktivní podřízené okno MDI.

    Vlastní nastavení této obslužné rutiny příkazu se nedoporučuje.

  • ID_WINDOW_TILE_HORZ oken dlaždic vodorovně.

    Tento příkaz se implementuje CMDIFrameWnd stejně jako ID_WINDOW_CASCADE, s výjimkou jiné zprávy MDI systému Windows se pro operaci používá.

    Měli byste vybrat výchozí orientaci dlaždic pro vaši aplikaci. Můžete to udělat tak, že změníte ID položky nabídky Dlaždice okna na ID_WINDOW_TILE_HORZ nebo ID_WINDOW_TILE_VERT.

  • ID_WINDOW_TILE_VERT oken dlaždic svisle.

    Tento příkaz se implementuje CMDIFrameWnd stejně jako ID_WINDOW_CASCADE, s výjimkou jiné zprávy MDI systému Windows se pro operaci používá.

    Měli byste vybrat výchozí orientaci dlaždic pro vaši aplikaci. Můžete to udělat tak, že změníte ID položky nabídky Dlaždice okna na ID_WINDOW_TILE_HORZ nebo ID_WINDOW_TILE_VERT.

  • ID_WINDOW_SPLIT Rozhraní klávesnice pro rozdělovač.

    CView zpracovává tento příkaz pro implementaci CSplitterWnd . Pokud je zobrazení součástí rozdělovače okna, tento příkaz deleguje na funkci implementace CSplitterWnd::DoKeyboardSplit. Rozdělovač se umístí do režimu, který umožní uživatelům klávesnice rozdělit nebo zrušit rozdělení okna.

    Tento příkaz je zakázán, pokud zobrazení není v rozdělovači.

    Vlastní nastavení této obslužné rutiny příkazu se nedoporučuje.

  • ID_APP_ABOUT vyvolá dialogové okno O aplikaci.

    Neexistuje žádná standardní implementace pole O aplikaci. Výchozí aplikace vytvořená aplikací AppWizard vytvoří vlastní třídu dialogového okna pro vaši aplikaci a použije ji jako pole O aplikaci. AppWizard také napíše triviální obslužnou rutinu příkazu, která zpracovává tento příkaz a vyvolá dialogové okno.

    Tento příkaz budete téměř vždy implementovat.

  • ID_APP_EXIT Ukončete aplikaci.

    CWinApp::OnAppExit tento příkaz zpracuje odesláním WM_CLOSE zprávy do hlavního okna aplikace. Implementace zpracovává CFrameWnd standardní vypnutí aplikace (výzva k zadání nezašpiněných souborů atd.).

    Vlastní nastavení této obslužné rutiny příkazu se nedoporučuje. Doporučuje se přepsání CWinApp::SaveAllModified nebo závěrečnou logiku CFrameWnd .

    Pokud se rozhodnete tento příkaz implementovat, doporučujeme použít toto ID příkazu.

  • ID_HELP_INDEX Seznamy témat nápovědy z . HLP soubor.

    Poznámka

    Chcete-li tuto funkci povolit, musíte ji připojit k CWinAppmapě zpráv odvozené třídy.

    CWinApp::OnHelpIndex zpracovává tento příkaz triviálně voláním CWinApp::WinHelp.

    Vlastní nastavení této obslužné rutiny příkazu se nedoporučuje.

  • ID_HELP_USING Zobrazí nápovědu k používání nápovědy.

    Poznámka

    Chcete-li tuto funkci povolit, musíte ji připojit k CWinAppmapě zpráv odvozené třídy.

    CWinApp::OnHelpUsing zpracovává tento příkaz triviálně voláním CWinApp::WinHelp.

    Vlastní nastavení této obslužné rutiny příkazu se nedoporučuje.

  • ID_CONTEXT_HELP Přejde do režimu nápovědy SHIFT-F1.

    Poznámka

    Chcete-li tuto funkci povolit, musíte ji připojit k CWinAppmapě zpráv odvozené třídy.

    CWinApp::OnContextHelp tento příkaz zpracuje nastavením kurzoru v režimu nápovědy, zadáním modální smyčky a čekáním, až uživatel vybere okno, aby získal nápovědu. Další podrobnosti o implementaci nápovědy MFC najdete v technické poznámce 28.

    Vlastní nastavení této obslužné rutiny příkazu se nedoporučuje.

  • ID_HELP poskytuje nápovědu k aktuálnímu kontextu

    Poznámka

    Chcete-li tuto funkci povolit, musíte ji připojit k CWinAppmapě zpráv odvozené třídy.

    CWinApp::OnHelp tento příkaz zpracuje získáním správného kontextu nápovědy pro aktuální kontext aplikace. To zpracovává jednoduchou nápovědu F1, nápovědu k polím zpráv atd. Další podrobnosti o implementaci nápovědy mfc najdete v technické poznámce 28.

    Vlastní nastavení této obslužné rutiny příkazu se nedoporučuje.

  • ID_DEFAULT_HELP Zobrazí výchozí nápovědu pro kontext

    Poznámka

    Chcete-li tuto funkci povolit, musíte ji připojit k CWinAppmapě zpráv odvozené třídy.

    Tento příkaz je obvykle mapován na CWinApp::OnHelpIndex.

    Pokud chcete rozlišovat mezi výchozí nápovědou a indexem nápovědy, můžete zadat jinou obslužnou rutinu příkazu.

  • ID_NEXT_PANE Přejde do dalšího podokna

    CView zpracovává tento příkaz pro implementaci CSplitterWnd . Pokud je zobrazení součástí rozdělovače okna, tento příkaz deleguje na funkci implementace CSplitterWnd::OnNextPaneCmd. Tím přesunete aktivní zobrazení do dalšího podokna v rozdělovači.

    Tento příkaz je zakázán, pokud zobrazení není v rozdělovači nebo neexistuje žádné další podokno, na které se má přejít.

    Vlastní nastavení této obslužné rutiny příkazu se nedoporučuje.

  • ID_PREV_PANE Přejde do předchozího podokna

    CView zpracovává tento příkaz pro implementaci CSplitterWnd . Pokud je zobrazení součástí rozdělovače okna, tento příkaz deleguje na funkci implementace CSplitterWnd::OnNextPaneCmd. Tím přesunete aktivní zobrazení do předchozího podokna v rozdělovači.

    Tento příkaz je zakázán, pokud zobrazení není v rozdělovači nebo neexistuje žádné předchozí podokno, na které chcete přejít.

    Vlastní nastavení této obslužné rutiny příkazu se nedoporučuje.

  • ID_OLE_INSERT_NEW Vloží nový objekt OLE.

    V současné době pro tento příkaz neexistuje žádná standardní implementace. Musíte implementovat tuto pro CView-odvozenou třídu pro vložení nové OLE položky nebo objektu do aktuálního výběru.

    Všechny klientské aplikace OLE by měly implementovat tento příkaz. AppWizard s možností OLE vytvoří kostru implementace OnInsertObject ve vaší třídě zobrazení, kterou budete muset dokončit.

    Kompletní implementaci tohoto příkazu najdete v ukázkovém příkladu OCLIENT v prostředí MFC OLE.

  • ID_OLE_EDIT_LINKS Úpravy propojení OLE

    COleDocument tento příkaz zpracuje pomocí implementace mfc poskytnuté standardního dialogového okna propojení OLE. Implementace tohoto dialogového okna je přístupná prostřednictvím COleLinksDialog třídy. Pokud aktuální dokument neobsahuje žádné odkazy, příkaz je zakázaný.

    Vlastní nastavení této obslužné rutiny příkazu se nedoporučuje.

  • ID_OLE_VERB_FIRST... LAST An ID range for OLE verbs

    COleDocument používá tento rozsah ID příkazu pro příkazy podporované aktuálně vybranou položkou nebo objektem OLE. To musí být oblast, protože daný typ položky nebo objektu OLE může podporovat nula nebo více vlastních příkazů. V nabídce aplikace byste měli mít jednu položku nabídky s ID ID_OLE_VERB_FIRST. Po spuštění programu se nabídka aktualizuje popisem příslušné nabídky (nebo místní nabídkou s mnoha příkazy). Správa nabídky OLE je zpracována AfxOleSetEditMenuv obslužné rutině aktualizačního příkazu uživatelského rozhraní pro tento příkaz.

    Neexistují žádné explicitní obslužné rutiny příkazů pro zpracování každého ID příkazu v tomto rozsahu. COleDocument::OnCmdMsg je přepsán tak, aby stiskl všechna ID příkazů v tomto rozsahu, převést je na čísla slovesa založená na nule a spustil server pro dané sloveso (pomocí COleClientItem::DoVerb).

    Vlastní nastavení nebo jiné použití tohoto rozsahu ID příkazu se nedoporučuje.

  • ID_VIEW_TOOLBAR Zapne a vypne panel nástrojů.

    CFrameWnd zpracovává tento příkaz a obslužnou rutinu uživatelského rozhraní update-command k přepnutí viditelného stavu panelu nástrojů. Panel nástrojů musí být podřízeným oknem rámce s ID podřízeného okna AFX_IDW_TOOLBAR. Obslužná rutina příkazu ve skutečnosti přepíná viditelnost okna panelu nástrojů. CFrameWnd::RecalcLayout slouží k překreslení okna rámečku s panelem nástrojů v novém stavu. Obslužná rutina uživatelského rozhraní aktualizačního příkazu zkontroluje položku nabídky, když je panel nástrojů viditelný.

    Vlastní nastavení této obslužné rutiny příkazu se nedoporučuje. Pokud chcete přidat další panely nástrojů, budete chtít naklonovat a upravit obslužnou rutinu příkazu a obslužnou rutinu uživatelského rozhraní update-command pro tento příkaz.

  • ID_VIEW_STATUS_BAR Zapne a vypne stavový řádek.

    Tento příkaz se implementuje stejně jako ID_VIEW_TOOLBAR CFrameWnd s výjimkou jiného ID podřízeného okna (AFX_IDW_STATUS_BAR).

Obslužné rutiny příkazů pouze pro aktualizaci

Jako indikátory ve stavových úsecích se používá několik standardních ID příkazů. Tyto funkce používají stejný mechanismus zpracování uživatelského rozhraní příkazu update k zobrazení aktuálního vizuálního stavu během doby nečinnosti aplikace. Vzhledem k tomu, že uživatel nemůže vybrat (to znamená, že nejde odeslat podokno stavového řádku), pak nemá smysl mít pro tato ID příkazů ON_COMMAND obslužnou rutinu.

  • ID_INDICATOR_CAPS: indikátor CAP Lock.

  • ID_INDICATOR_NUM: indikátor zámku NUM.

  • ID_INDICATOR_SCRL: ukazatel zámku SCRL.

  • ID_INDICATOR_KANA: Ukazatel zámku KANA (platí pouze pro japonské systémy).

Všechny tři jsou implementovány v CFrameWnd::OnUpdateKeyIndicator, implementační pomocník, který používá ID příkazu k mapování na příslušný virtuální klíč. Běžná implementace povolí nebo zakáže (u stavových podoken zakázáno = žádný text) CCmdUI objekt v závislosti na tom, jestli je příslušný virtuální klíč aktuálně uzamčený.

Vlastní nastavení této obslužné rutiny příkazu se nedoporučuje.

  • ID_INDICATOR_EXT: Indikátor výběru EXTended.

  • ID_INDICATOR_OVR : ukazatel OVeRstrike.

  • ID_INDICATOR_REC: ukazatel recordingu.

V současné době pro tyto ukazatele neexistuje žádná standardní implementace.

Pokud se rozhodnete tyto indikátory implementovat, doporučujeme použít tato ID indikátorů a zachovat pořadí indikátorů na stavovém řádku (to znamená v tomto pořadí: EXT, CAP, NUM, SCRL, OVR, REC).

Viz také

Technické poznámky podle čísel
Technické poznámky podle kategorií