Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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šina výchozích implementací příkazů je přednastavena v základní třídě mapy zpráv rámce. Existují některé implementace příkazů, které vyžadují explicitní zapojení ve vaší odvozené třídě. Jsou popsány v části "Poznámka". Pokud jste zvolili správné možnosti v AppWizardu, tyto výchozí obslužné rutiny budou automaticky připojeny do vygenerované základní 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á s "ID_", následuje název standardní místní nabídky a poté název položky nabídky. Symbolický název je psán velkými písmeny s podtržítky mezi slovy. 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.
Doporučujeme použít standardní předponu "IDM_" pro položky nabídky, které nedodržují architekturu příkazů a vyžadují specifický kód pro jejich povolení a zakázání. Samozřejmě, že počet příkazů specifických pro nabídky by měl být malý, protože dodržování architektury příkazů MFC nejen posiluje obslužné rutiny příkazů (protože budou pracovat s panely nástrojů), ale také činí kód obslužné rutiny příkazů opakovaně použitelným.
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::OnFileNewimplementuje tento příkaz odlišně v závislosti na počtu šablon dokumentů v aplikaci. Pokud existuje pouze jedenCDocTemplate,CWinApp::OnFileNewvytvoří nový dokument tohoto typu, stejně jako správný rámec a třídu zobrazení.Pokud existuje více než jeden
CDocTemplate,CWinApp::OnFileNewzobrazí uživateli výzvu s dialogovým oknem (AFX_IDD_NEWTYPEDLG), ve kterém mu umožní vybrat typ dokumentu, který chcete použít.CDocTemplateVybraná 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::OnFileNewa umístit ho do mapy zpráv místoCWinApp::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::OnFileOpenmá velmi jednoduchou implementaci voláníCWinApp::DoPromptFileNamenásledované souboremCWinApp::OpenDocumentFilenebo názvem cesty k souboru, který se má otevřít. RutinaCWinAppimplementaceDoPromptFileNamezobrazí 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 toto přizpůsobit, je nahradit výchozí implementaci vlastním dialogem "FileOpen" a volat funkci
CWinApp::OpenDocumentFiles názvem souboru nebo cestou k dokumentu. Není nutné volat základní třídu.ID_FILE_CLOSE zavře aktuálně otevřený dokument.
CDocument::OnFileClosezavolá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ěOnFileSaveaOnFileSaveAs. 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í,OnFileSavelogika 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í funkceOnSaveDocument.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 zásadně neznečišťujete dokument (to znamená, že nikdy nevoláte
CDocument::SetModifiedFlag) a rámeček nikdy nevyvolá 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 souborech na disku, ale nechcete použít výchozí implementaci serializace
CDocument, měli byste místo ní přepsatCDocument::OnSaveDocumentmístoOnFileSave.ID_FILE_SAVE_AS uloží aktuální dokument pod jiným názvem souboru.
Implementace
CDocument::OnFileSaveAspoužívá stejnouCDocument::DoSavepomocnou rutinu jakoOnFileSave. PříkazOnFileSaveAsse zpracovává stejně jako ID_FILE_SAVE, pokud dokumenty před uložením neměly žádný název souboru.COleServerDoc::OnFileSaveAsimplementuje 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 i ID_FILE_SAVE_AS podobným způsobem, jinak se operace "Uložit jako" nemusí na váš dokument 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::OnFileSaveCopyAsje 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::OnUpdateDocumentjednoduše informuje kontejner, že ukotvení by mělo být uloženo. Kontejner pak volá příslušná rozhraní OLE API pro uložení vloženého objektu.ID_FILE_PAGE_SETUP vyvolá dialogové okno pro nastavení rozložení a vzhledu 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::OnFilePrintSetupmá velmi jednoduchou implementaci vytvoření objektuCPrintDialogCWinApp::DoPrintDialoga 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
CDocumentrutinu mapy zpráv ve vašíCPrintDialogtří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. Pro robustní implementaci byste se měli zaměřit na implementaciCWinApp::DoPrintDialogpro zjišťování chyb a na implementaciCWinApp::UpdatePrinterSelectionpro řešení rozumných výchozích hodnot a sledování systémových změn tiskáren.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::OnFilePrintimplementuje tento příkaz a hlavní tiskovou smyčku. Zavolá virtuálníCView::OnPreparePrinting, aby se uživateli zobrazila výzva k zobrazení dialogového okna pro tisk. Potom připraví výstupní DC pro tisk, zobrazí dialogové okno průběhu tisku (AFX_IDD_PRINTDLG) a pošleStartDocescape sekvenci do tiskárny.CView::OnFilePrinttaké obsahuje hlavní tiskovou smyčku orientovanou na stránku. Pro každou stránku volá virtuálníCView::OnPrepareDC, následuje únikStartPagea volá virtuálníCView::OnPrintpro tuto stránku. Po dokončení se virtuální počítačCView::OnEndPrintingzavolá a dialogové okno průběhu tisku se zavře.Architektura tisku MFC je navržená tak, aby se dala integrovat mnoha různými způsoby pro tisk a náhled při tisku. Obvykle najdete různé
CViewpřepisovatelné funkce vhodné pro všechny úlohy tisku orientované na stránky. 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::OnFilePrintPreviewspustí režim náhledu tisku voláním zdokumentované pomocné funkceCView::DoPrintPreview.CView::DoPrintPreviewje hlavní modul smyčky náhledu tisku, stejně jakoOnFilePrinthlavní 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ů .
DoPrintPreviewPř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 MRU souborů.
CWinApp::OnUpdateRecentFileMenuje 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 stačí definovat jedinou položku nabídky s ID ID_FILE_MRU_FILE1. Tato položka nabídky zůstane zpočátku zakázaná.Jak seznam MRU roste, do něj se přidávají další položky nabídky.
CWinAppStandardní 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ímCWinApp::LoadStdProfileSettingss větší nebo menší hodnotou. Seznam MRU je uložen v aplikačním .INI souboru. Seznam se načte do funkce vaší aplikaceInitInstance, pokud zavoláteLoadStdProfileSettings, a uloží se při ukončení aplikace. Obslužná rutina uživatelského rozhraní příkazu pro aktualizaci MRU také převede absolutní cesty na relativní pro zobrazení v nabídce souborů.CWinApp::OnOpenRecentFileje obslužná rutina ON_COMMAND, která provádí skutečný příkaz. Jednoduše získá název souboru ze seznamu MRU a zavoláCWinApp::OpenDocumentFile, což vykoná úkol otevřít soubor a aktualizovat seznam 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 to implementovat pro každou
CViewodvozenou třídu.CEditViewposkytuje 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 to 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 to implementovat pro každou
CViewodvozenou třídu.CEditViewposkytuje 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 Vyřízne aktuální výběr do schránky.
V současné době pro tento příkaz neexistuje žádná standardní implementace. Musíte to implementovat pro každou
CViewodvozenou třídu.CEditViewposkytuje implementaci tohoto příkazu, který vyjme aktuálně vybraný text do schránky jako CF_TEXT s využitímCEdit::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 Zahájí operaci hledání a zobrazí nemodální dialogové okno hledání.
V současné době pro tento příkaz neexistuje žádná standardní implementace. Musíte to implementovat pro každou
CViewodvozenou třídu.CEditViewposkytuje implementaci tohoto příkazu, která volá pomocnou funkciOnEditFindReplaceimplementace, která použije a uloží předchozí nastavení find/replace v privátních implementačních proměnných. TřídaCFindReplaceDialogslouží ke správě modeless dialogového okna pro vyzvání uživatele.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 to implementovat pro každou
CViewodvozenou třídu.CEditViewposkytuje 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í CF_TEXT.COleClientDocpouze poskytuje obslužnou rutinu uživatelského rozhraní pro aktualizaci tohoto příkazu. Pokud schránka neobsahuje položku nebo objekt OLE, který lze vložit, příkaz bude zakázán. Zodpovídáte za napsání obslužné funkce pro příkaz, který provede vlastní vložení. Pokud vaše aplikace OLE může vkládat i další formáty, měli byste ve svém zobrazení nebo dokumentu poskytnout vlastní obslužnou rutinu uživatelského rozhraní pro aktualizaci příkazů, to znamená, že ji umístíte někde předCOleClientDocv příkazovém směrování.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 to implementovat pro každou
CViewodvozenou třídu.COleDocumentpouze 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é funkce pro příkaz, který provede vlastní vložení. Pokud vaše aplikace OLE může vkládat i další formáty, měli byste ve svém zobrazení nebo dokumentu poskytnout vlastní obslužnou rutinu uživatelského rozhraní pro aktualizaci příkazů, to znamená, že ji umístíte někde předCOleDocumentv příkazovém směrování.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 to 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 to implementovat pro každou
CViewodvozenou třídu.CEditViewposkytuje implementaci tohoto příkazu pro opakování poslední operace hledání. Použijí se implementační privátní proměnné pro poslední 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í nemodální dialogové okno nahrazení.
V současné době pro tento příkaz neexistuje žádná standardní implementace. Musíte to implementovat pro každou
CViewodvozenou třídu.CEditViewposkytuje implementaci tohoto příkazu, která volá pomocnou funkciOnEditFindReplaceimplementace, která použije a uloží předchozí nastavení find/replace v privátních implementačních proměnných. TřídaCFindReplaceDialogslouží ke správě nemodálního dialogového okna, který uživatele vyzývá.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 to implementovat pro každou
CViewodvozenou třídu.CEditViewposkytuje 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 to implementovat pro každou
CViewodvozenou třídu.CEditViewposkytuje implementaci tohoto příkazu pomocíCEdit::Undo. Příkaz je zakázán, pokudCEdit::CanUndovrátí hodnotu NEPRAVDA.Pokud se rozhodnete tento příkaz implementovat, doporučujeme použít toto ID příkazu.
ID_EDIT_REDO opakuje poslední operaci.
V současné době pro tento příkaz neexistuje žádná standardní implementace. Musíte to 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::OnWindowNewimplementuje 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::OnWindowNewmůžete naklonovat a upravit do konkrétních rámců a zobrazení tříd dle vašeho přání.ID_WINDOW_ARRANGE Uspořádá ikony v dolní části okna MDI.
CMDIFrameWndimplementuje tento standardní příkaz MDI v pomocné funkci pro implementaciOnMDIWindowCmd. 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áduje okna tak, aby se překrývaly.
CMDIFrameWndimplementuje tento standardní příkaz MDI v pomocné funkci pro implementaciOnMDIWindowCmd. 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 uspořádá okna vodorovně.
Tento příkaz je implementován v
CMDIFrameWndstejně jako ID_WINDOW_CASCADE, ale pro operaci se používá jiná zpráva MDI Windows.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 skládá okna svisle.
Tento příkaz je implementován v
CMDIFrameWndstejně jako ID_WINDOW_CASCADE, ale pro operaci se používá jiná zpráva MDI Windows.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č.
CViewzpracovává tento příkaz pro implementaciCSplitterWnd. Pokud je zobrazení součástí okna s děleným zobrazením, tento příkaz deleguje na implementační funkciCSplitterWnd::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::OnAppExittento příkaz zpracuje odesláním WM_CLOSE zprávy do hlavního okna aplikace. ImplementaceCFrameWndzpracovává standardní vypnutí aplikace (výzvu k uložení změněných souborů a tak dál).Vlastní nastavení této obslužné rutiny příkazu se nedoporučuje. Doporučuje se přepsat
CWinApp::SaveAllModifiednebo přepsat uzavírací logikuCFrameWnd.Pokud se rozhodnete tento příkaz implementovat, doporučujeme použít toto ID příkazu.
ID_HELP_INDEX Listuje témata nápovědy z .HLP souboru.
Poznámka:
Chcete-li tuto funkci povolit, musíte ji připojit k
CWinAppmapě zpráv odvozené třídy.CWinApp::OnHelpIndexzpracovává tento příkaz triviálně volánímCWinApp::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::OnHelpUsingzpracovává tento příkaz triviálně volánímCWinApp::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::OnContextHelptento 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::OnHelptento 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 pro dialogová okna a podobně. 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
CViewzpracovává tento příkaz pro implementaciCSplitterWnd. Pokud je zobrazení součástí okna s děleným zobrazením, tento příkaz deleguje na implementační funkciCSplitterWnd::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
CViewzpracovává tento příkaz pro implementaciCSplitterWnd. Pokud je zobrazení součástí okna s děleným zobrazením, tento příkaz deleguje na implementační funkciCSplitterWnd::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 provést tuto funkci ve třídě odvozené z
CViewpro vložení nového OLE 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
OnInsertObjectve 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 Upravuje propojení OLE
COleDocumentzpracovává tento příkaz pomocí implementace standardního dialogového okna pro propojení OLE poskytované knihovnou MFC. Implementace tohoto dialogového okna je přístupná prostřednictvímCOleLinksDialogtří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 Rozsah ID pro OLE slovesa
COleDocumentpoužívá tento rozsah ID příkazu pro příkazy podporované aktuálně vybranou položkou nebo objektem OLE. To musí být rozsah, protože daný typ položky nebo objektu OLE může podporovat nula nebo více vlastních sloves. 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 sloves (nebo místní nabídkou s mnoha slovesy). Správa nabídky OLE je zpracovánaAfxOleSetEditMenuv 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::OnCmdMsgje přepsán tak, aby zachytil všechna ID příkazů v tomto rozsahu, převedl je na slovesná čísla začínající nulou a spustil server pro toto sloveso (použitímCOleClientItem::DoVerb).Vlastní nastavení nebo jiné použití tohoto rozsahu ID příkazu se nedoporučuje.
ID_VIEW_TOOLBAR Zapne a vypne panel nástrojů.
CFrameWndzpracová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. Obsluha příkazu přepíná viditelnost okna panelu nástrojů.CFrameWnd::RecalcLayoutslouží k překreslení okna rámce s panelem nástrojů do nového stavu. Obsluhovač uživatelského rozhraní příkazu k aktualizaci označí 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 ve
CFrameWndimplementuje stejně jako ID_VIEW_TOOLBAR, pouze se použije jiné ID podřízeného okna (AFX_IDW_STATUS_BAR).
Obslužné rutiny příkazů Update-Only
Jako indikátory ve stavových řádcí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 podokno stavového řádku (to znamená, že nelze aktivovat podokno stavového řádku), pak nedává smysl mít pro tato ID příkazů obslužnou rutinu ON_COMMAND.
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 rozšířeného výběru.
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 čísla
Technické poznámky podle kategorie