Dela via


TN022: Implementering av standardkommandon

Anmärkning

Följande tekniska anmärkning har inte uppdaterats sedan den först inkluderades i onlinedokumentationen. Därför kan vissa procedurer och ämnen vara inaktuella eller felaktiga. För den senaste informationen rekommenderar vi att du söker efter det intressanta ämnet i onlinedokumentationsindexet.

Den här anmärkningen beskriver de standardkommandoimplementeringar som tillhandahålls av MFC 2.0. Läs Technical Note 21 först eftersom det beskriver de mekanismer som används för att implementera många av standardkommandona.

Den här beskrivningen förutsätter kunskap om MFC-arkitekturer, API:er och vanliga programmeringspraxis. Dokumenterade och odokumenterade API:er för "endast implementering" beskrivs. Det här är inte en plats där du kan börja lära dig om funktionerna i eller hur du programmerar i MFC. Mer allmän information och information om dokumenterade API:er finns i Visual C++.

Problemet

MFC definierar många standardkommando-ID:er i huvudfilen AFXRES.H. Ramverksstöd för dessa kommandon varierar. Att förstå var och hur ramverksklasserna hanterar dessa kommandon visar inte bara hur ramverket fungerar internt, utan ger användbar information om hur du anpassar standardimplementeringarna och lär dig några tekniker för att implementera dina egna kommandohanterare.

Innehållet i den här tekniska anmärkningen

Varje kommando-ID beskrivs i två avsnitt:

  • Rubriken: det symboliska namnet på kommando-ID :t (till exempel ID_FILE_SAVE) följt av kommandots syfte (till exempel "sparar det aktuella dokumentet") avgränsat med ett kolon.

  • Ett eller flera stycken som beskriver vilka klasser som implementerar kommandot och vad standardimplementeringen gör

De flesta standardkommandoimplementeringar är förkopplade i ramverkets basklassmeddelandekarta. Det finns vissa kommandoimplementeringar som kräver explicita ledningar i din härledda klass. Dessa beskrivs under "Note". Om du väljer rätt alternativ i AppWizard ansluts dessa standardhanterare åt dig i det genererade skelettprogrammet.

Namnkonvention

Standardkommandon följer en enkel namngivningskonvention som vi rekommenderar att du använder om möjligt. De flesta standardkommandon finns på standardplatser i ett programs menyrad. Det symboliska namnet på kommandot börjar med "ID_" följt av standardnamnet på popup-menyn följt av menyalternativets namn. Det symboliska namnet är i versaler och orden är åtskilda med understreck. För kommandon som inte har standardnamn för menyalternativ definieras ett logiskt kommandonamn som börjar med "ID_" (till exempel ID_NEXT_PANE).

Vi använder prefixet "ID_" för att ange kommandon som är utformade för att bindas till menyalternativ, verktygsfältsknappar eller andra kommandoobjekt i användargränssnittet. Kommandohanterare som hanterar kommandona "ID_" bör använda ON_COMMAND- och ON_UPDATE_COMMAND_UI mekanismerna i MFC-kommandoarkitekturen.

Vi rekommenderar att du använder standardprefixet "IDM_" för menyobjekt som inte följer kommandoarkitekturen och behöver menyspecifik kod för att aktivera och inaktivera dem. Naturligtvis bör antalet menyspecifika kommandon vara litet eftersom följande MFC-kommandoarkitektur inte bara gör kommandohanterare mer kraftfulla (eftersom de kommer att fungera med verktygsfält) utan gör kommandohanterarkoden återanvändbar.

ID-intervall

Mer information om användningen av ID-intervall i MFC finns i Technical Note 20 .

MFC-standardkommandon hamnar i intervallet 0xE000 till 0xEFFF. Förlita dig inte på de specifika värdena för dessa ID:er eftersom de kan komma att ändras i framtida versioner av biblioteket.

Programmet bör definiera sina kommandon i intervallet 0x8000 till 0xDFFF.

Standardkommando-ID

För varje kommando-ID finns det en standardsträng för meddelanderadsprompten som finns i filen PROMPTS. RC. Sträng-ID:t för menyprompten måste vara samma som för kommando-ID:t.

  • ID_FILE_NEW Skapar ett nytt/tomt dokument.

    Anmärkning

    Du måste ansluta detta till den CWinApphärledda klassens meddelandekarta för att aktivera den här funktionen.

    CWinApp::OnFileNew implementerar det här kommandot på olika sätt beroende på antalet dokumentmallar i programmet. Om det bara finns ett CDocTemplate, kommer CWinApp::OnFileNew att skapa ett nytt dokument av den typen, samt rätt ram och vyklass.

    Om det finns fler än en CDocTemplateCWinApp::OnFileNew uppmanas användaren att använda en dialogruta (AFX_IDD_NEWTYPEDLG) så att de kan välja vilken dokumenttyp som ska användas. Den valda CDocTemplate används för att skapa dokumentet.

    En vanlig anpassning av ID_FILE_NEW är att tillhandahålla ett annat och mer grafiskt val av dokumenttyper. I det här fallet kan du implementera din egen CMyApp::OnFileNew och placera den i din meddelandekarta i stället för CWinApp::OnFileNew. Du behöver inte anropa basklassimplementeringen.

    En annan vanlig anpassning av ID_FILE_NEW är att tillhandahålla ett separat kommando för att skapa ett dokument av varje typ. I det här fallet bör du definiera nya kommando-ID:n, till exempel ID_FILE_NEW_CHART och ID_FILE_NEW_SHEET.

  • ID_FILE_OPEN Öppnar ett befintligt dokument.

    Anmärkning

    Du måste ansluta detta till den CWinApphärledda klassens meddelandekarta för att aktivera den här funktionen.

    CWinApp::OnFileOpen har en mycket enkel implementering av anrop CWinApp::DoPromptFileName följt av CWinApp::OpenDocumentFile med filens fil- eller sökvägsnamn som ska öppnas. Implementeringsrutinen CWinAppDoPromptFileName tar upp standarddialogrutan FileOpen och fyller den med filnamnstilläggen som hämtas från de aktuella dokumentmallarna.

    En vanlig anpassning av ID_FILE_OPEN är att anpassa dialogrutan FileOpen eller lägga till ytterligare filfilter. Det rekommenderade sättet att anpassa detta är att ersätta standardimplementeringen med din egen FileOpen-dialogruta och anropa CWinApp::OpenDocumentFile med dokumentets fil- eller sökvägsnamn. Du behöver inte anropa basklassen.

  • ID_FILE_CLOSE Stänger det öppna dokumentet.

    CDocument::OnFileClose anropar CDocument::SaveModified för att uppmana användaren att spara dokumentet om det har ändrats och sedan anropar OnCloseDocument. All avslutande logik, inklusive att förstöra dokumentet, görs i rutinen OnCloseDocument .

    Anmärkning

    ID_FILE_CLOSE fungerar annorlunda än ett WM_CLOSE meddelande eller ett SC_CLOSE systemkommando som skickas till dokumentramfönstret. Om du stänger ett fönster stängs endast dokumentet om det är det sista bildrutefönstret som visar dokumentet. Om du stänger dokumentet med ID_FILE_CLOSE stängs inte bara dokumentet, utan alla ramfönster som visar dokumentet stängs.

  • ID_FILE_SAVE Sparar det aktuella dokumentet.

    Implementeringen använder en hjälprutin CDocument::DoSave som används för både OnFileSave och OnFileSaveAs. Om du sparar ett dokument som inte har sparats tidigare (dvs. det inte har något sökvägsnamn, som i fallet med FileNew) eller som lästes från ett skrivskyddat dokument, fungerar logiken OnFileSave som kommandot ID_FILE_SAVE_AS och ber användaren att ange ett nytt filnamn. Den faktiska processen för att öppna filen och spara görs via den virtuella funktionen OnSaveDocument.

    Det finns två vanliga orsaker till att anpassa ID_FILE_SAVE. För dokument som inte sparas tar du helt enkelt bort ID_FILE_SAVE menyalternativ och verktygsfältsknappar från användargränssnittet. Se också till att du aldrig smutsar ner dokumentet (det vill säga aldrig anropar CDocument::SetModifiedFlag) och att ramverket aldrig kommer att orsaka att dokumentet sparas. För dokument som sparas på någon annan plats än en diskfil definierar du ett nytt kommando för åtgärden.

    När det gäller en COleServerDocanvänds ID_FILE_SAVE både för filsparning (för normala dokument) och filuppdatering (för inbäddade dokument).

    Om dina dokumentdata lagras i enskilda diskfiler, men du inte vill använda standardimplementeringen CDocument för serialisering, bör du åsidosätta CDocument::OnSaveDocument i stället för OnFileSave.

  • ID_FILE_SAVE_AS Sparar det aktuella dokumentet under ett annat filnamn.

    Implementeringen CDocument::OnFileSaveAs använder samma CDocument::DoSave hjälprutin som OnFileSave. Kommandot OnFileSaveAs hanteras precis som ID_FILE_SAVE om dokumenten inte hade något filnamn före sparande. COleServerDoc::OnFileSaveAs implementerar logiken för att spara en normal dokumentdatafil eller för att spara ett serverdokument som representerar ett OLE-objekt som är inbäddat i något annat program som en separat fil.

    Om du anpassar logiken för ID_FILE_SAVE vill du förmodligen anpassa ID_FILE_SAVE_AS på ett liknande sätt eller så kanske inte åtgärden "Spara som" gäller för dokumentet. Du kan ta bort menyalternativet från menyraden om det inte behövs.

  • ID_FILE_SAVE_COPY_AS Sparar en kopia av det aktuella dokumentet under ett nytt namn.

    Implementeringen COleServerDoc::OnFileSaveCopyAs liknar mycket CDocument::OnFileSaveAs, förutom att dokumentobjektet inte är "kopplat" till den underliggande filen efter sparandet. Om det minnesinterna dokumentet "ändrades" före sparande är det alltså fortfarande "ändrat". Dessutom påverkar det här kommandot inte sökvägens namn eller rubrik som lagras i dokumentet.

  • ID_FILE_UPDATE Meddelar containern att spara ett inbäddat dokument.

    Implementeringen COleServerDoc::OnUpdateDocument meddelar helt enkelt containern att inbäddningen ska sparas. Containern anropar sedan lämpliga OLE-API:er för att spara det inbäddade objektet.

  • ID_FILE_PAGE_SETUP Anropar en programspecifik dialogruta för sidkonfiguration/layout.

    För närvarande finns det ingen standard för den här dialogrutan och ramverket har ingen standardimplementering av det här kommandot.

    Om du väljer att implementera det här kommandot rekommenderar vi att du använder det här kommando-ID:t.

  • ID_FILE_PRINT_SETUP Anropa dialogrutan för standardutskriftsinställningar.

    Anmärkning

    Du måste ansluta detta till den CWinApphärledda klassens meddelandekarta för att aktivera den här funktionen.

    Det här kommandot anropar standarddialogrutan för utskriftskonfiguration som gör att användaren kan anpassa skrivar- och utskriftsinställningarna för åtminstone det här dokumentet eller högst alla dokument i det här programmet. Du måste använda Kontrollpanelen för att ändra standardinställningarna för skrivaren för hela systemet.

    CWinApp::OnFilePrintSetup har en mycket enkel implementering som skapar ett CPrintDialog objekt och anropar implementeringsfunktionen CWinApp::DoPrintDialog . Detta anger programmets standardinstallation av skrivare.

    Det vanliga behovet av att anpassa det här kommandot är att tillåta skrivarinställningar per dokument, som ska lagras med dokumentet när det sparas. För att göra detta bör du lägga till en meddelandekarta-hanterare i klassen CDocument som skapar ett CPrintDialog objekt, initierar det med lämpliga skrivarattribut (vanligtvis hDevMode och hDevNames), anropar CPrintDialog::DoModaloch sparar de ändrade skrivarinställningarna. För en robust implementering bör du titta på implementeringen av CWinApp::DoPrintDialog för att identifiera fel och CWinApp::UpdatePrinterSelection för att hantera lämpliga standardvärden och spåra systemomfattande skrivarändringar.

  • ID_FILE_PRINT Standard-utskrift av det aktuella dokumentet

    Anmärkning

    Du måste ansluta detta till den CViewhärledda klassens meddelandekarta för att aktivera den här funktionen.

    Det här kommandot skriver ut det aktuella dokumentet, eller mer korrekt, startar utskriftsprocessen, vilket innebär att du anropar dialogrutan för standardutskrift och kör utskriftsmotorn.

    CView::OnFilePrint implementerar det här kommandot och huvudutskriftsloopen. Den anropar den virtuella CView::OnPreparePrinting för att visa utskriftsdialogrutan för användaren. Den förbereder sedan utdata-DC för att gå till skrivaren, öppnar dialogrutan för utskriftsförlopp (AFX_IDD_PRINTDLG) och skickar StartDoc escape till skrivaren. CView::OnFilePrint innehåller också den huvudsideorienterade utskriftsloopen. För varje sida anropas den virtuella CView::OnPrepareDC, och sedan utförs en StartPage-escape följt av ett anrop till den virtuella CView::OnPrint för den sidan. När det är klart anropas den virtuella CView::OnEndPrinting datorn och dialogrutan för utskriftsstatus stängs.

    MFC-utskriftsarkitekturen är utformad för att integreras på många olika sätt för utskrift och förhandsgranskning. Normalt är de olika CView återställbara funktionerna adekvata för alla sidorienterade utskriftsuppgifter. Endast när det gäller ett program som använder skrivaren för icke-sidorienterade utdata, bör du hitta behovet av att ersätta ID_FILE_PRINT implementeringen.

  • ID_FILE_PRINT_PREVIEW Ange förhandsgranskningsläge för det aktuella dokumentet.

    Anmärkning

    Du måste ansluta detta till den CViewhärledda klassens meddelandekarta för att aktivera den här funktionen.

    CView::OnFilePrintPreview startar förhandsgranskningsläget genom att anropa den dokumenterade hjälpfunktionen CView::DoPrintPreview. CView::DoPrintPreview är huvudmotorn för förhandsgranskningsslingan, precis som OnFilePrint huvudmotorn för utskriftsloopen.

    Förhandsgranskningsåtgärden kan anpassas på flera olika sätt genom att olika parametrar skickas till DoPrintPreview. Se Technical Note 30, som beskriver några av detaljerna i förhandsgranskningen och hur du anpassar den.

  • ID_FILE_MRU_FILE1... FILE16 Ett intervall med kommando-ID:er för listan Fil-MRU.

    CWinApp::OnUpdateRecentFileMenu är en uppdateringskommandogränssnittshanterare som är en av de mer avancerade användningsområdena för ON_UPDATE_COMMAND_UI mekanismen. I din menyresurs behöver du bara definiera ett enda menyalternativ med ID ID_FILE_MRU_FILE1. Menyalternativet förblir ursprungligen inaktiverat.

    När MRU-listan växer läggs fler menyobjekt till i listan. CWinApp Standardimplementeringen har standardgränsen som standardinställning för de fyra senast använda filerna. Du kan ändra standardvärdet genom att anropa CWinApp::LoadStdProfileSettings med ett större eller mindre värde. MRU-listan lagras i programmets . INI-fil. Listan läses in i programmets InitInstance funktion om du anropar LoadStdProfileSettingsoch sparas när programmet avslutas. Hanteraren för MRU-uppdateringskommandot konverterar även absoluta sökvägar till relativa sökvägar för att visas på fil-menyn.

    CWinApp::OnOpenRecentFile är den ON_COMMAND-hanteraren som utför det faktiska kommandot. Det hämtar helt enkelt filnamnet från MRU-listan och anropar CWinApp::OpenDocumentFile, vilket gör allt arbete med att öppna filen och uppdatera MRU-listan.

    Anpassning av den här kommandohanteraren rekommenderas inte.

  • ID_EDIT_CLEAR Rensar den aktuella markeringen

    För närvarande finns det ingen standardimplementering för det här kommandot. Du måste implementera detta för varje CView-härledd klass.

    CEditView tillhandahåller en implementering av det här kommandot med hjälp av CEdit::Clear. Kommandot är inaktiverat om det inte finns någon aktuell markering.

    Om du väljer att implementera det här kommandot rekommenderar vi att du använder det här kommando-ID:t.

  • ID_EDIT_CLEAR_ALL Rensar hela dokumentet.

    För närvarande finns det ingen standardimplementering för det här kommandot. Du måste implementera detta för varje CView-härledd klass.

    Om du väljer att implementera det här kommandot rekommenderar vi att du använder det här kommando-ID:t. Se exempel på SCRIBBLE i MFC-självstudiekursen för en exempelimplementering.

  • ID_EDIT_COPY Kopierar den aktuella markeringen till Urklipp.

    För närvarande finns det ingen standardimplementering för det här kommandot. Du måste implementera detta för varje CView-härledd klass.

    CEditView tillhandahåller en implementering av det här kommandot, som kopierar den för närvarande markerade texten till Urklipp i CF_TEXT-format, med hjälp av CEdit::Copy. Kommandot är inaktiverat om det inte finns någon aktuell markering.

    Om du väljer att implementera det här kommandot rekommenderar vi att du använder det här kommando-ID:t.

  • ID_EDIT_CUT Klipper den aktuella markeringen och lägger den i Windows Urklipp.

    För närvarande finns det ingen standardimplementering för det här kommandot. Du måste implementera detta för varje CView-härledd klass.

    CEditView tillhandahåller en implementering av det här kommandot, som klipper den markerade texten till Urklipp som CF_TEXT med hjälp av CEdit::Cut. Kommandot är inaktiverat om det inte finns någon aktuell markering.

    Om du väljer att implementera det här kommandot rekommenderar vi att du använder det här kommando-ID:t.

  • ID_EDIT_FIND Påbörjar sökoperationen, öppnar den modellösa sökdialogrutan.

    För närvarande finns det ingen standardimplementering för det här kommandot. Du måste implementera detta för varje CView-härledd klass.

    CEditView tillhandahåller en implementering av det här kommandot, som anropar implementeringshjälpfunktionen OnEditFindReplace för att använda och lagra de tidigare sök-/ersätt-inställningarna i privata implementeringsvariabler. Klassen CFindReplaceDialog används för att hantera den icke-modala dialogrutan för att uppmana användaren.

    Om du väljer att implementera det här kommandot rekommenderar vi att du använder det här kommando-ID:t.

  • ID_EDIT_PASTE Infogar det aktuella innehållet i urklipp.

    För närvarande finns det ingen standardimplementering för det här kommandot. Du måste implementera detta för varje CView-härledd klass.

    CEditView tillhandahåller en implementering av det här kommandot, som använder CEdit::Paste för att kopiera aktuella urklippsdata och ersätta den markerade texten. Kommandot är inaktiverat om det inte finns någon CF_TEXT i Urklipp.

    COleClientDoc tillhandahåller bara en uppdateringskommandogränssnittshanterare för det här kommandot. Om Urklipp inte innehåller ett inbäddningsbart OLE-objekt/objekt inaktiveras kommandot. Du är ansvarig för att skriva hanteraren för det faktiska kommandot för att utföra den faktiska inklistringen. Om ditt OLE-program också kan klistra in andra format bör du ange en egen uppdateringshanterare för kommandogränssnittet i vyn eller dokumentet (dvs. någonstans före COleClientDoc i kommandomåldirigeringen).

    Om du väljer att implementera det här kommandot rekommenderar vi att du använder det här kommando-ID:t.

    Om du vill ersätta ole-standardimplementeringen använder du COleClientItem::CanPaste.

  • ID_EDIT_PASTE_LINK Infogar en länk från det aktuella urklippet.

    För närvarande finns det ingen standardimplementering för det här kommandot. Du måste implementera detta för varje CView-härledd klass.

    COleDocument tillhandahåller bara en uppdateringskommandogränssnittshanterare för det här kommandot. Om Urklipp inte innehåller länkbara OLE-objekt/-objekt inaktiveras kommandot. Du är ansvarig för att skriva hanteraren för det faktiska kommandot för att utföra den faktiska inklistringen. Om ditt OLE-program också kan klistra in andra format bör du ange en egen uppdateringshanterare för kommandogränssnittet i vyn eller dokumentet (dvs. någonstans före COleDocument i kommandomåldirigeringen).

    Om du väljer att implementera det här kommandot rekommenderar vi att du använder det här kommando-ID:t.

    Om du vill ersätta ole-standardimplementeringen använder du COleClientItem::CanPasteLink.

  • ID_EDIT_PASTE_SPECIAL Infogar aktuellt innehåll från urklippet med alternativ.

    För närvarande finns det ingen standardimplementering för det här kommandot. Du måste implementera detta för varje CView-härledd klass. MFC tillhandahåller inte den här dialogrutan.

    Om du väljer att implementera det här kommandot rekommenderar vi att du använder det här kommando-ID:t.

  • ID_EDIT_REPEAT Upprepar den senaste åtgärden.

    För närvarande finns det ingen standardimplementering för det här kommandot. Du måste implementera detta för varje CView-härledd klass.

    CEditView tillhandahåller en implementering av det här kommandot för att upprepa den senaste sökåtgärden. De privata implementeringsvariablerna för den senaste sökningen används. Kommandot är inaktiverat om det inte går att försöka hitta.

    Om du väljer att implementera det här kommandot rekommenderar vi att du använder det här kommando-ID:t.

  • ID_EDIT_REPLACE Startar ersättningsåtgärden och öppnar den icke-modala dialogrutan för att ersätta.

    För närvarande finns det ingen standardimplementering för det här kommandot. Du måste implementera detta för varje CView-härledd klass.

    CEditView tillhandahåller en implementering av det här kommandot, som anropar implementeringshjälpfunktionen OnEditFindReplace för att använda och lagra de tidigare sök-/ersätt-inställningarna i privata implementeringsvariabler. Klassen CFindReplaceDialog används för att hantera den icke-modala dialogruta som uppmanar användaren.

    Om du väljer att implementera det här kommandot rekommenderar vi att du använder det här kommando-ID:t.

  • ID_EDIT_SELECT_ALL Väljer hela dokumentet.

    För närvarande finns det ingen standardimplementering för det här kommandot. Du måste implementera detta för varje CView-härledd klass.

    CEditView tillhandahåller en implementering av det här kommandot, som markerar all text i dokumentet. Kommandot är inaktiverat om det inte finns någon text att välja.

    Om du väljer att implementera det här kommandot rekommenderar vi att du använder det här kommando-ID:t.

  • ID_EDIT_UNDO Ångra den senaste åtgärden.

    För närvarande finns det ingen standardimplementering för det här kommandot. Du måste implementera detta för varje CView-härledd klass.

    CEditView tillhandahåller en implementering av det här kommandot med hjälp av CEdit::Undo. Kommandot är inaktiverat om CEdit::CanUndo returnerar FALSE.

    Om du väljer att implementera det här kommandot rekommenderar vi att du använder det här kommando-ID:t.

  • ID_EDIT_REDO Gör om den senaste åtgärden.

    För närvarande finns det ingen standardimplementering för det här kommandot. Du måste implementera detta för varje CView-härledd klass.

    Om du väljer att implementera det här kommandot rekommenderar vi att du använder det här kommando-ID:t.

  • ID_WINDOW_NEW Öppnar ett annat fönster i det aktiva dokumentet.

    CMDIFrameWnd::OnWindowNew implementerar den här kraftfulla funktionen med hjälp av dokumentmallen för det aktuella dokumentet för att skapa en annan ram som innehåller en annan vy av det aktuella dokumentet.

    Precis som de flesta fönsterkommandon för flera dokumentgränssnitt (MDI) inaktiveras kommandot om det inte finns något aktivt underordnat MDI-fönster.

    Anpassning av den här kommandohanteraren rekommenderas inte. Om du vill ange ett kommando som skapar ytterligare vyer eller ramfönster är det förmodligen bättre att hitta på ditt eget kommando. Du kan klona koden från CMDIFrameWnd::OnWindowNew och ändra den till den specifika ramen och visa klasser som du gillar.

  • ID_WINDOW_ARRANGE Ordnar ikoner längst ned i ett MDI-fönster.

    CMDIFrameWnd implementerar det här MDI-standardkommandot i en implementeringshjälpfunktion OnMDIWindowCmd. Den här hjälpen mappar kommando-ID:er till MDI Windows-meddelanden och kan därför dela mycket kod.

    Precis som de flesta MDI-fönstermenykommandon inaktiveras kommandot om det inte finns något aktivt underordnat MDI-fönster.

    Anpassning av den här kommandohanteraren rekommenderas inte.

  • ID_WINDOW_CASCADE Ordnar fönster så att de delvis överlappar.

    CMDIFrameWnd implementerar det här MDI-standardkommandot i en implementeringshjälpfunktion OnMDIWindowCmd. Den här hjälpen mappar kommando-ID:er till MDI Windows-meddelanden och kan därför dela mycket kod.

    Precis som de flesta MDI-fönstermenykommandon inaktiveras kommandot om det inte finns något aktivt underordnat MDI-fönster.

    Anpassning av den här kommandohanteraren rekommenderas inte.

  • ID_WINDOW_TILE_HORZ Paneler fönster vågrätt.

    Det här kommandot implementeras på CMDIFrameWnd samma sätt som ID_WINDOW_CASCADE, förutom att ett annat MDI Windows-meddelande används för åtgärden.

    Du bör välja standardpanelens orientering för ditt program. Du kan göra detta genom att ändra ID:t för menyalternativet "Fönster" till antingen ID_WINDOW_TILE_HORZ eller ID_WINDOW_TILE_VERT.

  • ID_WINDOW_TILE_VERT Arrangerar fönster lodrätt.

    Det här kommandot implementeras på CMDIFrameWnd samma sätt som ID_WINDOW_CASCADE, förutom att ett annat MDI Windows-meddelande används för åtgärden.

    Du bör välja standardpanelens orientering för ditt program. Du kan göra detta genom att ändra ID:t för menyalternativet "Fönster" till antingen ID_WINDOW_TILE_HORZ eller ID_WINDOW_TILE_VERT.

  • ID_WINDOW_SPLIT tangentbordgränssnitt till splitter.

    CView hanterar det här kommandot för implementeringen CSplitterWnd . Om vyn är en del av ett delningsfönster delegerar det här kommandot till implementeringsfunktionen CSplitterWnd::DoKeyboardSplit. Detta placerar splittern i ett läge som gör att tangentbordsanvändare kan dela upp eller ta bort ett delningsfönster.

    Det här kommandot är inaktiverat om vyn inte finns i en splitter.

    Anpassning av den här kommandohanteraren rekommenderas inte.

  • ID_APP_ABOUT öppnar dialogrutan Om.

    Det finns ingen standardimplementering för ett programs Om-ruta. Det AppWizard-skapade standardprogrammet skapar en anpassad dialogklass för ditt program och använder den som om-rutan. AppWizard skriver också den triviala kommandohanteraren som hanterar det här kommandot och anropar dialogrutan.

    Du implementerar nästan alltid det här kommandot.

  • ID_APP_EXIT Avsluta programmet.

    CWinApp::OnAppExit hanterar det här kommandot genom att skicka ett WM_CLOSE meddelande till programmets huvudfönster. Standardstängningen av programmet (fråga efter smutsiga filer och så vidare) hanteras av implementeringen CFrameWnd .

    Anpassning av den här kommandohanteraren rekommenderas inte. Du bör åsidosätta CWinApp::SaveAllModified eller stängningslogiken CFrameWnd.

    Om du väljer att implementera det här kommandot rekommenderar vi att du använder det här kommando-ID:t.

  • ID_HELP_INDEX listar hjälpämnen från .HLP-fil.

    Anmärkning

    Du måste ansluta detta till den CWinApphärledda klassens meddelandekarta för att aktivera den här funktionen.

    CWinApp::OnHelpIndex hanterar det här kommandot genom att trivialt anropa CWinApp::WinHelp.

    Anpassning av den här kommandohanteraren rekommenderas inte.

  • ID_HELP_USING Visar hjälp om hur du använder hjälpen.

    Anmärkning

    Du måste ansluta detta till den CWinApphärledda klassens meddelandekarta för att aktivera den här funktionen.

    CWinApp::OnHelpUsing hanterar det här kommandot genom att trivialt anropa CWinApp::WinHelp.

    Anpassning av den här kommandohanteraren rekommenderas inte.

  • ID_CONTEXT_HELP Anger SHIFT-F1 hjälpläge.

    Anmärkning

    Du måste ansluta detta till den CWinApphärledda klassens meddelandekarta för att aktivera den här funktionen.

    CWinApp::OnContextHelp hanterar det här kommandot genom att ange hjälplägesmarkören, ange en modal loop och vänta på att användaren ska välja ett fönster för att få hjälp. Mer information om MFC-hjälpimplementeringen finns i Technical Note 28 .

    Anpassning av den här kommandohanteraren rekommenderas inte.

  • ID_HELP Ger hjälp om den aktuella kontexten

    Anmärkning

    Du måste ansluta detta till den CWinApphärledda klassens meddelandekarta för att aktivera den här funktionen.

    CWinApp::OnHelp hanterar det här kommandot genom att hämta rätt hjälpkontext för den aktuella programkontexten. Detta hanterar enkel F1-hjälp, hjälp med meddelanderutor och så vidare. Mer information om MFC-hjälpimplementeringen finns i Technical Note 28 .

    Anpassning av den här kommandohanteraren rekommenderas inte.

  • ID_DEFAULT_HELP Visar standardhjälp för kontext

    Anmärkning

    Du måste ansluta detta till den CWinApphärledda klassens meddelandekarta för att aktivera den här funktionen.

    Det här kommandot mappas vanligtvis till CWinApp::OnHelpIndex.

    En annan kommandohanterare kan anges om en skillnad mellan standardhjälp och hjälpindex önskas.

  • ID_NEXT_PANE Går till nästa fönster

    CView hanterar det här kommandot för implementeringen CSplitterWnd . Om vyn är en del av ett delningsfönster delegerar det här kommandot till implementeringsfunktionen CSplitterWnd::OnNextPaneCmd. Då flyttas den aktiva vyn till nästa fönster i delaren.

    Det här kommandot är inaktiverat om vyn inte finns i en delning eller om det inte finns någon nästa fönsterruta att gå till.

    Anpassning av den här kommandohanteraren rekommenderas inte.

  • ID_PREV_PANE Går till föregående fönster

    CView hanterar det här kommandot för implementeringen CSplitterWnd . Om vyn är en del av ett delningsfönster delegerar det här kommandot till implementeringsfunktionen CSplitterWnd::OnNextPaneCmd. Då flyttas den aktiva vyn till föregående fönster i delningsfönstret.

    Det här kommandot är inaktiverat om vyn inte är i en delad vy eller om det inte finns något föregående fönster att gå till.

    Anpassning av den här kommandohanteraren rekommenderas inte.

  • ID_OLE_INSERT_NEW infogar ett nytt OLE-objekt

    För närvarande finns det ingen standardimplementering för det här kommandot. Du måste implementera detta för klassen CView-derived för att infoga ett nytt OLE-objekt/-objekt vid den aktuella markeringen.

    Alla OLE-klientprogram bör implementera det här kommandot. AppWizard, med OLE-alternativet, skapar en skelettimplementering av OnInsertObject i din vyklass som du måste slutföra.

    Se OCLIENT-exempelexemplet för MFC OLE för en fullständig implementering av det här kommandot.

  • ID_OLE_EDIT_LINKS redigerar OLE-länkar

    COleDocument hanterar det här kommandot med hjälp av den MFC-tillhandahållna implementeringen av dialogrutan med standard-OLE-länkar. Implementeringen av den här dialogrutan nås via COleLinksDialog klassen. Om det aktuella dokumentet inte innehåller några länkar inaktiveras kommandot.

    Anpassning av den här kommandohanteraren rekommenderas inte.

  • ID_OLE_VERB_FIRST... LAST Ett ID-intervall för OLE-verb

    COleDocument använder det här kommando-ID-intervallet för de verb som stöds av det markerade OLE-objektet/-objektet. Detta måste vara ett intervall eftersom en viss OLE-objekt/objekttyp kan ha stöd för noll eller fler anpassade verb. I programmets meny bör du ha ett menyalternativ med ID:t för ID_OLE_VERB_FIRST. När programmet körs uppdateras menyn med lämplig beskrivning av menyverb (eller popup-meny med många verb). Hanteringen av OLE-menyn sköts av AfxOleSetEditMenu och utförs i uppdateringskommandots kommandogränssnittshanterare för det här kommandot.

    Det finns inga explicita kommandohanterare för hantering av vart och ett av kommando-ID:t i det här intervallet. COleDocument::OnCmdMsg används för att fånga alla kommando-ID:n i det här intervallet, konvertera dem till nollbaserade verbnummer och starta servern för det verbet (med COleClientItem::DoVerb).

    Anpassning eller annan användning av det här kommando-ID-intervallet rekommenderas inte.

  • ID_VIEW_TOOLBAR Aktiverar och inaktiverar verktygsfältet

    CFrameWnd hanterar det här kommandot och användargränssnittshanteraren för uppdateringskommando för att växla verktygsfältets synliga tillstånd. Verktygsfältet måste vara ett underordnat fönster i ramen med underordnat fönster-ID för AFX_IDW_TOOLBAR. Kommandohanteraren växlar faktiskt synligheten för verktygsfältsfönstret. CFrameWnd::RecalcLayout används för att rita om ramfönstret med verktygsfältet i dess nya tillstånd. Användargränssnittshanteraren för uppdateringskommando kontrollerar menyalternativet när verktygsfältet är synligt.

    Anpassning av den här kommandohanteraren rekommenderas inte. Om du vill lägga till ytterligare verktygsfält vill du klona och ändra kommandohanteraren och användargränssnittshanteraren för uppdateringskommandot för det här kommandot.

  • ID_VIEW_STATUS_BAR Aktiverar och inaktiverar statusfältet

    Det här kommandot implementeras på CFrameWnd samma sätt som ID_VIEW_TOOLBAR, förutom att ett annat underordnat fönster-ID (AFX_IDW_STATUS_BAR) används.

Update-Only kommandohanterare

Flera standardkommando-ID:er används som indikatorer i statusstaplar. Dessa använder samma UI-hanteringsmekanism för uppdateringskommando för att visa sitt aktuella visuella tillstånd under programmets inaktiva tid. Eftersom de inte kan väljas av användaren (dvs. du kan inte push-överföra ett statusfältfönster) är det inte meningsfullt att ha en ON_COMMAND-hanterare för dessa kommando-ID:n.

  • ID_INDICATOR_CAPS : Caps Lock-indikator.

  • ID_INDICATOR_NUM : NUM-låsindikator.

  • ID_INDICATOR_SCRL : SCRL-låsindikator.

  • ID_INDICATOR_KANA : KANA-låsindikator (gäller endast för japanska system).

Alla tre av dessa implementeras i CFrameWnd::OnUpdateKeyIndicator, en implementeringshjälp som använder kommando-ID:t för att mappa till lämplig virtuell nyckel. En vanlig implementering aktiverar eller inaktiverar (för inaktiverade statusfönster = ingen text) CCmdUI objektet beroende på om lämplig virtuell nyckel för närvarande är låst.

Anpassning av den här kommandohanteraren rekommenderas inte.

  • ID_INDICATOR_EXT : Indikator för utökat val.

  • ID_INDICATOR_OVR : OVeRstrike-indikator.

  • ID_INDICATOR_REC : RECording-indikator.

För närvarande finns det ingen standardimplementering för dessa indikatorer.

Om du väljer att implementera dessa indikatorer rekommenderar vi att du använder dessa indikator-ID:n och underhåller ordningen på indikatorerna i statusfältet (dvs. i den här ordningen: EXT, CAP, NUM, SCRL, OVR, REC).

Se även

tekniska anteckningar efter nummer
tekniska anteckningar efter kategori