TN022: implementacja poleceń standardowych
Uwaga
Następująca uwaga techniczna nie została zaktualizowana, ponieważ została po raz pierwszy uwzględniona w dokumentacji online. W związku z tym niektóre procedury i tematy mogą być nieaktualne lub nieprawidłowe. Aby uzyskać najnowsze informacje, zaleca się wyszukanie interesującego tematu w indeksie dokumentacji online.
W tej notatce opisano standardowe implementacje poleceń udostępniane przez MFC 2.0. Zapoznaj się z uwagami technicznymi 21 , ponieważ opisuje ona mechanizmy używane do implementowania wielu standardowych poleceń.
W tym opisie przyjęto założenie, że wiedza na temat architektur, interfejsów API i typowej praktyki programistycznej obejmuje MFC. Opisano również nieudokumentowane interfejsy API "tylko implementacja". Nie jest to miejsce do rozpoczęcia nauki o funkcjach lub sposobie programowania w MFC. Aby uzyskać więcej ogólnych informacji, zobacz Visual C++, aby uzyskać szczegółowe informacje na temat udokumentowanych interfejsów API.
The Problem
MFC definiuje wiele standardowych identyfikatorów poleceń w pliku nagłówka AFXRES.H. Obsługa platformy dla tych poleceń różni się. Zrozumienie, gdzie i w jaki sposób klasy platformy obsługują te polecenia, nie tylko pokażą, jak działa wewnętrznie platforma, ale będą dostarczać przydatne informacje na temat dostosowywania standardowych implementacji i uczenia kilku technik implementowania własnych procedur obsługi poleceń.
Zawartość tej noty technicznej
Każdy identyfikator polecenia jest opisany w dwóch sekcjach:
Tytuł: symboliczna nazwa identyfikatora polecenia (na przykład ID_FILE_SAVE), a następnie cel polecenia (na przykład "zapisuje bieżący dokument") oddzielony dwukropkiem.
Co najmniej jeden akapit opisujący, które klasy implementują polecenie i co robi domyślna implementacja
Większość domyślnych implementacji poleceń jest wstępnie wirowana na mapie komunikatów klasy podstawowej platformy. Istnieją pewne implementacje poleceń, które wymagają jawnego okablowania w klasie pochodnej. Są one opisane w obszarze "Uwaga". Jeśli wybrano odpowiednie opcje w aplikacji AppWizard, te domyślne programy obsługi będą połączone dla Ciebie w wygenerowanej aplikacji szkieletowej.
Konwencje nazewnictwa
Polecenia standardowe są zgodne z prostą konwencją nazewnictwa, której zalecamy, jeśli jest to możliwe. Większość standardowych poleceń znajduje się w standardowych miejscach na pasku menu aplikacji. Symboliczna nazwa polecenia zaczyna się od "ID_", a następnie standardowej nazwy menu podręcznego, a następnie nazwy elementu menu. Nazwa symboliczna ma wielkie litery z podkreśleniami podziałami wyrazów. W przypadku poleceń, które nie mają standardowych nazw elementów menu, nazwa polecenia logicznego jest definiowana począwszy od "ID_" (na przykład ID_NEXT_PANE).
Używamy prefiksu "ID_", aby wskazać polecenia, które mają być powiązane z elementami menu, przyciskami paska narzędzi lub innymi obiektami interfejsu użytkownika poleceń. Programy obsługi poleceń obsługujące polecenia "ID_" powinny używać ON_COMMAND i ON_UPDATE_COMMAND_UI mechanizmów architektury poleceń MFC.
Zalecamy użycie standardowego prefiksu "IDM_" dla elementów menu, które nie są zgodne z architekturą poleceń i wymagają kodu specyficznego dla menu, aby je włączyć i wyłączyć. Oczywiście liczba poleceń specyficznych dla menu powinna być niewielka, ponieważ zgodnie z architekturą poleceń MFC nie tylko sprawia, że programy obsługi poleceń są bardziej wydajne (ponieważ będą działać z paskami narzędzi), ale sprawia, że kod obsługi poleceń jest wielokrotnego użytku.
Zakresy identyfikatorów
Aby uzyskać więcej informacji na temat używania zakresów identyfikatorów w MFC, zapoznaj się z uwagami technicznymi 20 .
Standardowe polecenia MFC mieszczą się w zakresie 0xE000 do 0xEFFF. Nie należy polegać na określonych wartościach tych identyfikatorów, ponieważ mogą ulec zmianie w przyszłych wersjach biblioteki.
Aplikacja powinna zdefiniować jego polecenia w zakresie 0x8000, aby 0xDFFF.
Identyfikatory poleceń w warstwie Standardowa
Dla każdego identyfikatora polecenia istnieje standardowy ciąg wiersza komunikatu, który można znaleźć w pliku PROMPTS. RC. Identyfikator ciągu dla tego wiersza polecenia musi być taki sam jak w przypadku identyfikatora polecenia.
ID_FILE_NEW Tworzy nowy/pusty dokument.
Uwaga
Aby włączyć tę funkcję, należy połączyć to
CWinApp
z mapą komunikatów klasy pochodnej.CWinApp::OnFileNew
Implementuje to polecenie inaczej w zależności od liczby szablonów dokumentów w aplikacji. Jeśli istnieje tylko jedenCDocTemplate
element ,CWinApp::OnFileNew
utworzy nowy dokument tego typu, a także odpowiednią ramkę i klasę widoku.Jeśli istnieje więcej niż jeden
CDocTemplate
element ,CWinApp::OnFileNew
monituje użytkownika o wyświetlenie okna dialogowego (AFX_IDD_NEWTYPEDLG) umożliwiającego wybranie typu dokumentu do użycia. WybranyCDocTemplate
element służy do tworzenia dokumentu.Jednym z typowych dostosowań ID_FILE_NEW jest zapewnienie innego i bardziej graficznego wyboru typów dokumentów. W takim przypadku możesz zaimplementować własną
CMyApp::OnFileNew
mapę komunikatów i umieścić ją na mapie komunikatówCWinApp::OnFileNew
zamiast . Nie ma potrzeby wywoływania implementacji klasy bazowej.Innym typowym dostosowaniem ID_FILE_NEW jest udostępnienie oddzielnego polecenia do tworzenia dokumentu każdego typu. W takim przypadku należy zdefiniować nowe identyfikatory poleceń, na przykład ID_FILE_NEW_CHART i ID_FILE_NEW_SHEET.
ID_FILE_OPEN Otwiera istniejący dokument.
Uwaga
Aby włączyć tę funkcję, należy połączyć to
CWinApp
z mapą komunikatów klasy pochodnej.CWinApp::OnFileOpen
ma bardzo prostą implementację wywoływaniaCWinApp::DoPromptFileName
, po którejCWinApp::OpenDocumentFile
następuje nazwa pliku lub ścieżki pliku do otwarcia. WCWinApp
procedurzeDoPromptFileName
implementacji jest otwierane standardowe okno dialogowe PlikOtwórz i wypełnia je rozszerzeniami plików uzyskanymi z bieżących szablonów dokumentów.Jednym z typowych dostosowań ID_FILE_OPEN jest dostosowanie okna dialogowego FileOpen lub dodanie dodatkowych filtrów plików. Zalecanym sposobem dostosowania tej metody jest zastąpienie domyślnej implementacji własnym oknom dialogowym FileOpen i wywołanie przy
CWinApp::OpenDocumentFile
użyciu nazwy pliku lub ścieżki dokumentu. Nie ma potrzeby wywoływania klasy bazowej.ID_FILE_CLOSE Zamyka aktualnie otwarty dokument.
CDocument::OnFileClose
wywołujeCDocument::SaveModified
polecenie , aby monitować użytkownika o zapisanie dokumentu, jeśli został on zmodyfikowany, a następnie wywołuje metodęOnCloseDocument
. Cała logika zamykania, w tym zniszczenie dokumentu, jest wykonywana w rutynowej procedurzeOnCloseDocument
.Uwaga
ID_FILE_CLOSE działa inaczej niż komunikat WM_CLOSE lub polecenie systemu SC_CLOSE wysyłane do okna ramek dokumentów. Zamknięcie okna spowoduje zamknięcie dokumentu tylko wtedy, gdy jest to ostatnie okno ramki z dokumentem. Zamknięcie dokumentu za pomocą ID_FILE_CLOSE spowoduje nie tylko zamknięcie dokumentu, ale zamknie wszystkie okna ramek pokazujące dokument.
ID_FILE_SAVE Zapisuje bieżący dokument.
Implementacja używa procedury
CDocument::DoSave
pomocniczej, która jest używana zarówno dla metody , jakOnFileSave
iOnFileSaveAs
. Jeśli zapiszesz dokument, który nie został zapisany wcześniej (tj. nie ma nazwy ścieżki, tak jak w przypadku plikuNowy) lub odczytany z dokumentu tylko do odczytu,OnFileSave
logika będzie działać jak ID_FILE_SAVE_AS polecenie i poprosi użytkownika o podanie nowej nazwy pliku. Rzeczywisty proces otwierania pliku i zapisywania odbywa się za pośrednictwem funkcjiOnSaveDocument
wirtualnej .Istnieją dwa typowe przyczyny dostosowywania ID_FILE_SAVE. W przypadku dokumentów, które nie są zapisywane, po prostu usuń elementy menu ID_FILE_SAVE i przyciski paska narzędzi z interfejsu użytkownika. Upewnij się również, że nigdy nie zanieczyszczono dokumentu (czyli nigdy nie wywołujesz
CDocument::SetModifiedFlag
metody ), a struktura nigdy nie spowoduje zapisania dokumentu. W przypadku dokumentów, które zapisują się w innym miejscu niż plik dysku, zdefiniuj nowe polecenie dla tej operacji.W przypadku
COleServerDoc
elementu ID_FILE_SAVE jest używany zarówno do zapisywania plików (w przypadku normalnych dokumentów) jak i aktualizacji plików (w przypadku dokumentów osadzonych).Jeśli dane dokumentu są przechowywane w pojedynczych plikach dysków, ale nie chcesz używać domyślnej
CDocument
implementacji serializacji, należy zastąpićCDocument::OnSaveDocument
zamiastOnFileSave
.ID_FILE_SAVE_AS Zapisuje bieżący dokument pod inną nazwą pliku.
Implementacja
CDocument::OnFileSaveAs
używa tej samejCDocument::DoSave
procedury pomocniczej coOnFileSave
. PolecenieOnFileSaveAs
jest obsługiwane tak samo jak ID_FILE_SAVE, jeśli dokumenty nie miały nazwy pliku przed zapisaniem.COleServerDoc::OnFileSaveAs
Implementuje logikę w celu zapisania normalnego pliku danych dokumentu lub zapisania dokumentu serwera reprezentującego obiekt OLE osadzony w innej aplikacji jako oddzielny plik.Jeśli dostosujesz logikę ID_FILE_SAVE, prawdopodobnie chcesz dostosować ID_FILE_SAVE_AS w podobny sposób lub operacja "Zapisz jako" może nie mieć zastosowania do dokumentu. Jeśli nie jest potrzebny, możesz usunąć element menu z paska menu.
ID_FILE_SAVE_COPY_AS Zapisuje bieżący dokument pod nową nazwą.
Implementacja jest bardzo podobna
COleServerDoc::OnFileSaveCopyAs
doCDocument::OnFileSaveAs
metody , z tą różnicą, że obiekt dokumentu nie jest "dołączony" do pliku bazowego po zapisie. Oznacza to, że jeśli dokument w pamięci został "zmodyfikowany" przed zapisaniem, nadal jest "zmodyfikowany". Ponadto to polecenie nie ma wpływu na nazwę ścieżki ani tytuł przechowywany w dokumencie.ID_FILE_UPDATE Powiadamia kontener o zapisaniu osadzonego dokumentu.
Implementacja
COleServerDoc::OnUpdateDocument
po prostu powiadamia kontener, że osadzanie powinno zostać zapisane. Następnie kontener wywołuje odpowiednie interfejsy API OLE w celu zapisania obiektu osadzonego.ID_FILE_PAGE_SETUP Wywołuje okno dialogowe konfiguracji/układu strony specyficznej dla aplikacji.
Obecnie nie ma standardu dla tego okna dialogowego, a platforma nie ma domyślnej implementacji tego polecenia.
Jeśli zdecydujesz się zaimplementować to polecenie, zalecamy użycie tego identyfikatora polecenia.
ID_FILE_PRINT_SETUP Wywołaj standardowe okno dialogowe Konfiguracja wydruku.
Uwaga
Aby włączyć tę funkcję, należy połączyć to
CWinApp
z mapą komunikatów klasy pochodnej.To polecenie wywołuje standardowe okno dialogowe konfiguracji wydruku, które umożliwia użytkownikowi dostosowanie drukarki i ustawień drukowania dla co najmniej tego dokumentu lub w większości wszystkich dokumentów w tej aplikacji. Aby zmienić domyślne ustawienia drukarki dla całego systemu, należy użyć Panel sterowania.
CWinApp::OnFilePrintSetup
ma bardzo prostą implementację tworzącąCPrintDialog
obiekt i wywołując funkcję implementacjiCWinApp::DoPrintDialog
. Spowoduje to ustawienie domyślnej konfiguracji drukarki aplikacji.Typowym zapotrzebowaniem na dostosowanie tego polecenia jest umożliwienie ustawień drukarki dla poszczególnych dokumentów, które powinny być przechowywane w dokumencie po zapisaniu. W tym celu należy dodać program obsługi mapy komunikatów w
CDocument
klasie, który tworzyCPrintDialog
obiekt, inicjuje go przy użyciu odpowiednich atrybutów drukarki (zazwyczaj hDevMode i hDevNames), wywołajCPrintDialog::DoModal
metodę i zapisz zmienione ustawienia drukarki. W celu uzyskania niezawodnej implementacji należy przyjrzeć się implementacjiCWinApp::DoPrintDialog
wykrywania błędów orazCWinApp::UpdatePrinterSelection
do obsługi rozsądnych ustawień domyślnych i śledzenia zmian drukarki w całym systemie.ID_FILE_PRINT standardowe drukowanie bieżącego dokumentu
Uwaga
Aby włączyć tę funkcję, należy połączyć to
CView
z mapą komunikatów klasy pochodnej.To polecenie wyświetla bieżący dokument lub bardziej poprawnie uruchamia proces drukowania, który polega na wywołaniu standardowego okna dialogowego drukowania i uruchomieniu aparatu wydruku.
CView::OnFilePrint
implementuje to polecenie i główną pętlę drukowania. Wywołuje wirtualną nazwęCView::OnPreparePrinting
, aby wyświetlić monit o użytkownika za pomocą okna dialogowego drukowania. Następnie przygotowuje wyjściowy kontroler domeny, aby przejść do drukarki, wyświetli okno dialogowe postępu drukowania (AFX_IDD_PRINTDLG) i wysyłaStartDoc
ucieczkę do drukarki.CView::OnFilePrint
zawiera również pętlę drukowania zorientowaną na stronę główną. Dla każdej strony wywołuje wirtualnąCView::OnPrepareDC
, po której następuje ucieczkaStartPage
i wywołuje wirtualnąCView::OnPrint
dla tej strony. Po zakończeniu wywoływana jest maszyna wirtualnaCView::OnEndPrinting
, a okno dialogowe postępu drukowania jest zamykane.Architektura drukowania MFC jest przeznaczona do podłączania na wiele różnych sposobów drukowania i podglądu wydruku. Zwykle można znaleźć różne
CView
funkcje zastępowalne odpowiednie dla każdego zadania drukowania zorientowanego na strony. Tylko w przypadku aplikacji, która używa drukarki dla danych wyjściowych nie zorientowanych na strony, należy znaleźć konieczność zastąpienia implementacji ID_FILE_PRINT.ID_FILE_PRINT_PREVIEW wprowadź tryb podglądu wydruku dla bieżącego dokumentu.
Uwaga
Aby włączyć tę funkcję, należy połączyć to
CView
z mapą komunikatów klasy pochodnej.CView::OnFilePrintPreview
Uruchamia tryb podglądu wydruku, wywołując udokumentowaną funkcjęCView::DoPrintPreview
pomocnika .CView::DoPrintPreview
jest głównym aparatem pętli podglądu wydruku, podobnie jakOnFilePrint
aparat główny pętli drukowania.Operację podglądu wydruku można dostosować na różne sposoby, przekazując różne parametry do
DoPrintPreview
elementu . Zapoznaj się z uwagami technicznymi 30, w której omówiono niektóre szczegóły podglądu wydruku i sposób jego dostosowywania.ID_FILE_MRU_FILE1... FILE16 Zakres identyfikatorów poleceń dla listy PLIKÓW MRU.
CWinApp::OnUpdateRecentFileMenu
to procedura obsługi interfejsu użytkownika poleceń aktualizacji, która jest jednym z bardziej zaawansowanych zastosowań mechanizmu ON_UPDATE_COMMAND_UI. W zasobie menu musisz zdefiniować tylko jeden element menu z identyfikatorem ID_FILE_MRU_FILE1. Ten element menu pozostaje początkowo wyłączony.Wraz ze wzrostem listy narzędzi MRU do listy jest dodawanych więcej elementów menu. Domyślna standardowa
CWinApp
implementacja to standardowy limit czterech ostatnio używanych plików. Domyślnie można zmienić wywołanieCWinApp::LoadStdProfileSettings
za pomocą większej lub mniejszej wartości. Lista mrU jest przechowywana w aplikacji . Plik INI. Lista jest ładowana do funkcji aplikacjiInitInstance
, jeśli wywołaszLoadStdProfileSettings
metodę i zostanie zapisana podczas zamykania aplikacji. Procedura obsługi interfejsu użytkownika polecenia aktualizacji mrU będzie również konwertować ścieżki bezwzględne na ścieżki względne do wyświetlania w menu pliku.CWinApp::OnOpenRecentFile
to program obsługi ON_COMMAND, który wykonuje rzeczywiste polecenie. Po prostu pobiera nazwę pliku z listy MRU i wywołujeCWinApp::OpenDocumentFile
metodę , która wykonuje całą pracę podczas otwierania pliku i aktualizowania listy MRU.Nie zaleca się dostosowywania tego programu obsługi poleceń.
ID_EDIT_CLEAR Czyści bieżące zaznaczenie
Obecnie nie ma standardowej implementacji tego polecenia. Należy to zaimplementować dla każdej
CView
klasy pochodnej.CEditView
Udostępnia implementację tego polecenia przy użyciu poleceniaCEdit::Clear
. Polecenie jest wyłączone, jeśli nie ma bieżącego zaznaczenia.Jeśli zdecydujesz się zaimplementować to polecenie, zalecamy użycie tego identyfikatora polecenia.
ID_EDIT_CLEAR_ALL czyści cały dokument.
Obecnie nie ma standardowej implementacji tego polecenia. Należy to zaimplementować dla każdej
CView
klasy pochodnej.Jeśli zdecydujesz się zaimplementować to polecenie, zalecamy użycie tego identyfikatora polecenia. Zobacz przykładową implementację SCRIBBLE z samouczka MFC.
ID_EDIT_COPY Kopiuje bieżące zaznaczenie do Schowka.
Obecnie nie ma standardowej implementacji tego polecenia. Należy to zaimplementować dla każdej
CView
klasy pochodnej.CEditView
Udostępnia implementację tego polecenia, która kopiuje aktualnie zaznaczony tekst do Schowka jako CF_TEXT przy użyciu poleceniaCEdit::Copy
. Polecenie jest wyłączone, jeśli nie ma bieżącego zaznaczenia.Jeśli zdecydujesz się zaimplementować to polecenie, zalecamy użycie tego identyfikatora polecenia.
ID_EDIT_CUT Wycina bieżące zaznaczenie do Schowka.
Obecnie nie ma standardowej implementacji tego polecenia. Należy to zaimplementować dla każdej
CView
klasy pochodnej.CEditView
Program udostępnia implementację tego polecenia, która wycina aktualnie zaznaczony tekst do Schowka jako CF_TEXT przy użyciu poleceniaCEdit::Cut
. Polecenie jest wyłączone, jeśli nie ma bieżącego zaznaczenia.Jeśli zdecydujesz się zaimplementować to polecenie, zalecamy użycie tego identyfikatora polecenia.
ID_EDIT_FIND Rozpoczyna operację znajdowania, powoduje wyświetlenie bez moderowego okna dialogowego znajdowania.
Obecnie nie ma standardowej implementacji tego polecenia. Należy to zaimplementować dla każdej
CView
klasy pochodnej.CEditView
Udostępnia implementację tego polecenia, które wywołuje funkcjęOnEditFindReplace
pomocnika implementacji do użycia i przechowywania poprzednich ustawień znajdowania/zastępowania w prywatnych zmiennych implementacji. KlasaCFindReplaceDialog
służy do zarządzania bez moderowaniem okna dialogowego monitowania użytkownika.Jeśli zdecydujesz się zaimplementować to polecenie, zalecamy użycie tego identyfikatora polecenia.
ID_EDIT_PASTE Wstawia bieżącą zawartość Schowka.
Obecnie nie ma standardowej implementacji tego polecenia. Należy to zaimplementować dla każdej
CView
klasy pochodnej.CEditView
Udostępnia implementację tego polecenia, która kopiuje bieżące dane Schowka zastępując zaznaczony tekst przy użyciu poleceniaCEdit::Paste
. Polecenie jest wyłączone, jeśli w Schowku nie ma CF_TEXT .COleClientDoc
program obsługi interfejsu użytkownika polecenia aktualizacji dla tego polecenia. Jeśli Schowek nie zawiera osadzonego elementu/obiektu OLE, polecenie zostanie wyłączone. Odpowiadasz za napisanie programu obsługi dla rzeczywistego polecenia w celu wykonania rzeczywistego wklejania. Jeśli aplikacja OLE może również wkleić inne formaty, należy podać własną procedurę obsługi interfejsu użytkownika poleceń aktualizacji w widoku lub dokumencie (czyli gdzieś wcześniejCOleClientDoc
w routingu docelowym polecenia).Jeśli zdecydujesz się zaimplementować to polecenie, zalecamy użycie tego identyfikatora polecenia.
Aby zastąpić standardową implementację OLE, użyj polecenia
COleClientItem::CanPaste
.ID_EDIT_PASTE_LINK Wstawia link z bieżącej zawartości Schowka.
Obecnie nie ma standardowej implementacji tego polecenia. Należy to zaimplementować dla każdej
CView
klasy pochodnej.COleDocument
program obsługi interfejsu użytkownika polecenia aktualizacji dla tego polecenia. Jeśli Schowek nie zawiera połączonego elementu/obiektu OLE, polecenie zostanie wyłączone. Odpowiadasz za napisanie programu obsługi dla rzeczywistego polecenia w celu wykonania rzeczywistego wklejania. Jeśli aplikacja OLE może również wkleić inne formaty, należy podać własną procedurę obsługi interfejsu użytkownika poleceń aktualizacji w widoku lub dokumencie (czyli gdzieś wcześniejCOleDocument
w routingu docelowym polecenia).Jeśli zdecydujesz się zaimplementować to polecenie, zalecamy użycie tego identyfikatora polecenia.
Aby zastąpić standardową implementację OLE, użyj polecenia
COleClientItem::CanPasteLink
.ID_EDIT_PASTE_SPECIAL Wstawia bieżącą zawartość Schowka z opcjami.
Obecnie nie ma standardowej implementacji tego polecenia. Należy to zaimplementować dla każdej
CView
klasy pochodnej. MFC nie udostępnia tego okna dialogowego.Jeśli zdecydujesz się zaimplementować to polecenie, zalecamy użycie tego identyfikatora polecenia.
ID_EDIT_REPEAT Powtarza ostatnią operację.
Obecnie nie ma standardowej implementacji tego polecenia. Należy to zaimplementować dla każdej
CView
klasy pochodnej.CEditView
Udostępnia implementację tego polecenia, aby powtórzyć ostatnią operację znajdowania. Używane są prywatne zmienne implementacji ostatniego znajdowania. Polecenie jest wyłączone, jeśli nie można podjąć próby znalezienia.Jeśli zdecydujesz się zaimplementować to polecenie, zalecamy użycie tego identyfikatora polecenia.
ID_EDIT_REPLACE Rozpoczyna operację zamieniania, powoduje wyświetlenie bez moderowego okna dialogowego zastępowania.
Obecnie nie ma standardowej implementacji tego polecenia. Należy to zaimplementować dla każdej
CView
klasy pochodnej.CEditView
Udostępnia implementację tego polecenia, które wywołuje funkcjęOnEditFindReplace
pomocnika implementacji do użycia i przechowywania poprzednich ustawień znajdowania/zastępowania w prywatnych zmiennych implementacji. KlasaCFindReplaceDialog
służy do zarządzania moderowym oknom dialogowym z monitem użytkownika.Jeśli zdecydujesz się zaimplementować to polecenie, zalecamy użycie tego identyfikatora polecenia.
ID_EDIT_SELECT_ALL Wybiera cały dokument.
Obecnie nie ma standardowej implementacji tego polecenia. Należy to zaimplementować dla każdej
CView
klasy pochodnej.CEditView
Udostępnia implementację tego polecenia, które wybiera cały tekst w dokumencie. Polecenie jest wyłączone, jeśli nie ma tekstu do wybrania.Jeśli zdecydujesz się zaimplementować to polecenie, zalecamy użycie tego identyfikatora polecenia.
ID_EDIT_UNDO cofa ostatnią operację.
Obecnie nie ma standardowej implementacji tego polecenia. Należy to zaimplementować dla każdej
CView
klasy pochodnej.CEditView
Udostępnia implementację tego polecenia przy użyciu poleceniaCEdit::Undo
. Polecenie jest wyłączone, jeśliCEdit::CanUndo
zwraca wartość FALSE.Jeśli zdecydujesz się zaimplementować to polecenie, zalecamy użycie tego identyfikatora polecenia.
ID_EDIT_REDO ponownie wykonuje ostatnią operację.
Obecnie nie ma standardowej implementacji tego polecenia. Należy to zaimplementować dla każdej
CView
klasy pochodnej.Jeśli zdecydujesz się zaimplementować to polecenie, zalecamy użycie tego identyfikatora polecenia.
ID_WINDOW_NEW Otwiera kolejne okno w aktywnym dokumencie.
CMDIFrameWnd::OnWindowNew
implementuje tę zaawansowaną funkcję przy użyciu szablonu dokumentu bieżącego dokumentu w celu utworzenia innej ramki zawierającej inny widok bieżącego dokumentu.Podobnie jak w przypadku większości poleceń menu okna interfejsu dokumentu (MDI), polecenie jest wyłączone, jeśli nie ma aktywnego okna podrzędnego MDI.
Nie zaleca się dostosowywania tego programu obsługi poleceń. Jeśli chcesz podać polecenie, które tworzy dodatkowe widoki lub okna ramowe, prawdopodobnie lepiej będzie wymyślić własne polecenie. Możesz sklonować kod i
CMDIFrameWnd::OnWindowNew
zmodyfikować go do określonej ramki i klas wyświetlania swoich potrzeb.ID_WINDOW_ARRANGE Rozmieszcza ikony w dolnej części okna MDI.
CMDIFrameWnd
implementuje to standardowe polecenie MDI w funkcjiOnMDIWindowCmd
pomocnika implementacji . Ten pomocnik mapuje identyfikatory poleceń na komunikaty MDI systemu Windows i w związku z tym może udostępniać dużo kodu.Podobnie jak w przypadku większości poleceń menu okna MDI polecenie jest wyłączone, jeśli nie ma aktywnego okna podrzędnego MDI.
Nie zaleca się dostosowywania tego programu obsługi poleceń.
ID_WINDOW_CASCADE okna kaskadowe, aby nakładały się na siebie.
CMDIFrameWnd
implementuje to standardowe polecenie MDI w funkcjiOnMDIWindowCmd
pomocnika implementacji . Ten pomocnik mapuje identyfikatory poleceń na komunikaty MDI systemu Windows i w związku z tym może udostępniać dużo kodu.Podobnie jak w przypadku większości poleceń menu okna MDI polecenie jest wyłączone, jeśli nie ma aktywnego okna podrzędnego MDI.
Nie zaleca się dostosowywania tego programu obsługi poleceń.
ID_WINDOW_TILE_HORZ okna Kafelki poziomo.
To polecenie jest implementowane w
CMDIFrameWnd
taki sam sposób jak ID_WINDOW_CASCADE, z wyjątkiem innego komunikatu MDI systemu Windows jest używany do operacji.Należy wybrać domyślną orientację kafelka dla aplikacji. Można to zrobić, zmieniając identyfikator elementu menu "Kafelek" okna na ID_WINDOW_TILE_HORZ lub ID_WINDOW_TILE_VERT.
ID_WINDOW_TILE_VERT okna Kafelki w pionie.
To polecenie jest implementowane w
CMDIFrameWnd
taki sam sposób jak ID_WINDOW_CASCADE, z wyjątkiem innego komunikatu MDI systemu Windows jest używany do operacji.Należy wybrać domyślną orientację kafelka dla aplikacji. Można to zrobić, zmieniając identyfikator elementu menu "Kafelek" okna na ID_WINDOW_TILE_HORZ lub ID_WINDOW_TILE_VERT.
ID_WINDOW_SPLIT interfejs klawiatury do dzielenia.
CView
obsługuje to polecenie dla implementacjiCSplitterWnd
. Jeśli widok jest częścią okna podziału, to polecenie deleguje do funkcjiCSplitterWnd::DoKeyboardSplit
implementacji . Spowoduje to umieszczenie podziału w trybie, który umożliwi użytkownikom klawiatury podzielenie lub anulowanie okna podziału.To polecenie jest wyłączone, jeśli widok nie znajduje się w rozdzielaniu.
Nie zaleca się dostosowywania tego programu obsługi poleceń.
ID_APP_ABOUT Wywołuje okno dialogowe Informacje.
Nie ma standardowej implementacji pola Informacje o aplikacji. Domyślna aplikacja utworzona przez aplikację AppWizard utworzy niestandardową klasę okna dialogowego dla aplikacji i użyje jej jako pola Informacje. Aplikacja AppWizard napisze również trywialną procedurę obsługi poleceń, która obsługuje to polecenie i wywołuje okno dialogowe.
Prawie zawsze wdrożysz to polecenie.
ID_APP_EXIT Zamknij aplikację.
CWinApp::OnAppExit
obsługuje to polecenie, wysyłając komunikat WM_CLOSE do głównego okna aplikacji. Standardowe zamykanie aplikacji (monitowanie o zanieczyszczone pliki itd.) jest obsługiwane przez implementacjęCFrameWnd
.Nie zaleca się dostosowywania tego programu obsługi poleceń. Zalecane jest zastąpienie
CWinApp::SaveAllModified
lub logika zamykaniaCFrameWnd
.Jeśli zdecydujesz się zaimplementować to polecenie, zalecamy użycie tego identyfikatora polecenia.
ID_HELP_INDEX Wyświetla tematy Pomocy z witryny . Plik HLP.
Uwaga
Aby włączyć tę funkcję, należy połączyć to
CWinApp
z mapą komunikatów klasy pochodnej.CWinApp::OnHelpIndex
obsługuje to polecenie przez trywialnie wywołując polecenieCWinApp::WinHelp
.Nie zaleca się dostosowywania tego programu obsługi poleceń.
ID_HELP_USING Wyświetla pomoc dotyczącą korzystania z Pomocy.
Uwaga
Aby włączyć tę funkcję, należy połączyć to
CWinApp
z mapą komunikatów klasy pochodnej.CWinApp::OnHelpUsing
obsługuje to polecenie przez trywialnie wywołując polecenieCWinApp::WinHelp
.Nie zaleca się dostosowywania tego programu obsługi poleceń.
ID_CONTEXT_HELP wprowadza tryb pomocy SHIFT-F1.
Uwaga
Aby włączyć tę funkcję, należy połączyć to
CWinApp
z mapą komunikatów klasy pochodnej.CWinApp::OnContextHelp
obsługuje to polecenie, ustawiając kursor trybu pomocy, wprowadzając pętlę modalną i czekając, aż użytkownik wybierze okno, aby uzyskać pomoc. Aby uzyskać więcej informacji na temat implementacji pomocy MFC, zapoznaj się z uwagami technicznymi 28 .Nie zaleca się dostosowywania tego programu obsługi poleceń.
ID_HELP daje pomoc dotyczącą bieżącego kontekstu
Uwaga
Aby włączyć tę funkcję, należy połączyć to
CWinApp
z mapą komunikatów klasy pochodnej.CWinApp::OnHelp
obsługuje to polecenie, uzyskując odpowiedni kontekst pomocy dla bieżącego kontekstu aplikacji. Obsługuje to prostą pomoc F1, pomoc dotyczącą pól komunikatów itd. Aby uzyskać więcej informacji na temat implementacji pomocy MFC, zapoznaj się z dokumentacją techniczną 28 .Nie zaleca się dostosowywania tego programu obsługi poleceń.
ID_DEFAULT_HELP Wyświetla domyślną pomoc dla kontekstu
Uwaga
Aby włączyć tę funkcję, należy połączyć to
CWinApp
z mapą komunikatów klasy pochodnej.To polecenie jest zwykle mapowane na
CWinApp::OnHelpIndex
.Można podać inny program obsługi poleceń, jeśli jest wymagane rozróżnienie między domyślną Pomocą a indeksem Pomocy.
ID_NEXT_PANE Przechodzi do następnego okienka
CView
obsługuje to polecenie dla implementacjiCSplitterWnd
. Jeśli widok jest częścią okna podziału, to polecenie deleguje do funkcjiCSplitterWnd::OnNextPaneCmd
implementacji . Spowoduje to przeniesienie aktywnego widoku do następnego okienka w rozdzielaniu.To polecenie jest wyłączone, jeśli widok nie znajduje się w rozdzielaniu lub nie ma następnego okienka, do których należy przejść.
Nie zaleca się dostosowywania tego programu obsługi poleceń.
ID_PREV_PANE przechodzi do poprzedniego okienka
CView
obsługuje to polecenie dla implementacjiCSplitterWnd
. Jeśli widok jest częścią okna podziału, to polecenie deleguje do funkcjiCSplitterWnd::OnNextPaneCmd
implementacji . Spowoduje to przeniesienie aktywnego widoku do poprzedniego okienka w rozdzielaniu.To polecenie jest wyłączone, jeśli widok nie znajduje się w rozdzielaniu lub nie ma poprzedniego okienka do przejścia.
Nie zaleca się dostosowywania tego programu obsługi poleceń.
ID_OLE_INSERT_NEW wstawia nowy obiekt OLE
Obecnie nie ma standardowej implementacji tego polecenia. Należy to zaimplementować dla
CView
klasy -pochodnej, aby wstawić nowy element/obiekt OLE w bieżącym zaznaczeniu.Wszystkie aplikacje klienckie OLE powinny zaimplementować to polecenie. Aplikacja AppWizard z opcją OLE utworzy szkieletową implementację klasy widoków
OnInsertObject
, która będzie musiała zostać ukończona.Zapoznaj się z przykładowym przykładem OCLIENT MFC OLE, aby uzyskać pełną implementację tego polecenia.
ID_OLE_EDIT_LINKS edytuje łącza OLE
COleDocument
obsługuje to polecenie przy użyciu implementacji udostępnionej przez MFC standardowego okna dialogowego linków OLE. Dostęp do implementacji tego okna dialogowego jest uzyskiwany za pośrednictwemCOleLinksDialog
klasy . Jeśli bieżący dokument nie zawiera żadnych linków, polecenie jest wyłączone.Nie zaleca się dostosowywania tego programu obsługi poleceń.
ID_OLE_VERB_FIRST... LAST Zakres identyfikatorów dla czasowników OLE
COleDocument
używa tego zakresu identyfikatorów poleceń dla czasowników obsługiwanych przez aktualnie wybrany element/obiekt OLE. Musi to być zakres, ponieważ dany typ elementu/obiektu OLE może obsługiwać zero lub więcej niestandardowych zleceń. W menu aplikacji powinien znajdować się jeden element menu z identyfikatorem ID_OLE_VERB_FIRST. Po uruchomieniu programu menu zostanie zaktualizowane przy użyciu odpowiedniego opisu czasownika menu (lub menu podręczne z wieloma zleceniami). Zarządzanie menu OLE jest obsługiwane przezAfxOleSetEditMenu
program , wykonywane w procedurze obsługi interfejsu użytkownika polecenia aktualizacji dla tego polecenia.Nie ma jawnych procedur obsługi poleceń do obsługi każdego identyfikatora polecenia w tym zakresie.
COleDocument::OnCmdMsg
jest zastępowany, aby wychwycić wszystkie identyfikatory poleceń w tym zakresie, przekształcić je w liczby czasowników zero i uruchomić serwer dla tego czasownika (przy użyciu poleceniaCOleClientItem::DoVerb
).Dostosowywanie lub inne użycie tego zakresu identyfikatorów poleceń nie jest zalecane.
ID_VIEW_TOOLBAR włącza i wyłącza pasek narzędzi
CFrameWnd
obsługuje to polecenie i program obsługi interfejsu użytkownika update-command w celu przełączenia widocznego stanu paska narzędzi. Pasek narzędzi musi być oknem podrzędnym ramki o identyfikatorze okna podrzędnego AFX_IDW_TOOLBAR. Procedura obsługi poleceń rzeczywiście przełącza widoczność okna paska narzędzi.CFrameWnd::RecalcLayout
służy do ponownego rysowania okna ramki z paskiem narzędzi w nowym stanie. Procedura obsługi interfejsu użytkownika update-command sprawdza element menu, gdy pasek narzędzi jest widoczny.Nie zaleca się dostosowywania tego programu obsługi poleceń. Jeśli chcesz dodać dodatkowe paski narzędzi, należy sklonować i zmodyfikować program obsługi poleceń oraz program obsługi interfejsu użytkownika update-command dla tego polecenia.
ID_VIEW_STATUS_BAR włącza i wyłącza pasek stanu
To polecenie jest implementowane w
CFrameWnd
taki sam sposób jak ID_VIEW_TOOLBAR, z wyjątkiem innego identyfikatora okna podrzędnego (AFX_IDW_STATUS_BAR) jest używany.
Programy obsługi poleceń tylko do aktualizacji
Kilka standardowych identyfikatorów poleceń jest używanych jako wskaźniki na paskach stanu. Korzystają one z tego samego mechanizmu obsługi interfejsu użytkownika polecenia update-command, aby wyświetlić bieżący stan wizualizacji w czasie bezczynności aplikacji. Ponieważ nie można ich wybrać przez użytkownika (czyli nie można wypchnąć okienka paska stanu), nie ma sensu mieć ON_COMMAND obsługi dla tych identyfikatorów poleceń.
ID_INDICATOR_CAPS: wskaźnik blokady CAP.
ID_INDICATOR_NUM: wskaźnik blokady NUM.
ID_INDICATOR_SCRL: wskaźnik blokady SCRL.
ID_INDICATOR_KANA: wskaźnik blokady KANA (dotyczy tylko japońskich systemów).
Wszystkie trzy z nich są implementowane w CFrameWnd::OnUpdateKeyIndicator
programie , pomocnik implementacji, który używa identyfikatora polecenia do mapowania na odpowiedni klucz wirtualny. Wspólna implementacja włącza lub wyłącza (w przypadku okienk stanu wyłączone = brak tekstu) CCmdUI
obiekt w zależności od tego, czy odpowiedni klucz wirtualny jest obecnie zablokowany.
Nie zaleca się dostosowywania tego programu obsługi poleceń.
ID_INDICATOR_EXT: wskaźnik wyboru EXTended.
ID_INDICATOR_OVR: wskaźnik OVeRstrike.
ID_INDICATOR_REC: wskaźnik RECording.
Obecnie nie ma standardowej implementacji tych wskaźników.
Jeśli zdecydujesz się zaimplementować te wskaźniki, zalecamy użycie tych identyfikatorów wskaźników i utrzymanie kolejności wskaźników na pasku stanu (czyli w tej kolejności: EXT, CAP, NUM, SCRL, OVR, REC).
Zobacz też
Uwagi techniczne według numerów
Uwagi techniczne według kategorii