TN024: komunikaty i zasoby zdefiniowane przez MFC
[!UWAGA]
Następująca uwaga techniczna nie został zaktualizowana od pierwszego uwzględnienia jej w dokumentacji online.W rezultacie niektóre procedury i tematy może być nieaktualne lub nieprawidłowe.Aby uzyskać najnowsze informacje, zaleca się wyszukać temat w indeksie dokumentacji online.
Uwaga ta opisuje wewnętrzne wiadomości systemu Windows i zasobów formaty używane przez usługi MFC.Informacje te omówiono wykonania RAM i pomoże Ci w debugowanie aplikacji.Dla ryzykowny mimo, że wszystkie te informacje są oficjalnie nieobsługiwanych można użyć niektórych z tych informacji dla zaawansowanych implementacji.
Ta notatka zawiera szczegóły dotyczące implementacji prywatnej MFC; Cała zawartość mogą ulec zmianie w przyszłości.MFC prywatnych wiadomości systemu Windows mają znaczenie w zakresie tylko jeden wniosek, ale zmieni się w przyszłości ma zawierać komunikaty systemowe.
Zakres MFC prywatnych wiadomości systemu Windows i typy zasobów są w zakresie zastrzeżone "system" wydzielone Microsoft Windows.Obecnie nie wszystkie numery z zakresów są używane i w przyszłości, w zakresie nowych numerów można wykorzystać.Aktualnie używane numery mogą zostać zmienione.
MFC prywatnych wiadomości systemu Windows znajdują się w zakresie 0x360 ->0x37F.
Typy zasobów prywatnych MFC są w zakresie 0xF0 ->0xFF.
Wiadomości Windows prywatne MFC
Tych komunikatów systemu Windows są używane zamiast funkcji wirtualnych C++, gdzie stosunkowo luźne sprzęgło jest wymagane między obiektami okna i gdzie C++ funkcji wirtualnych nie byłoby właściwe.
Te wiadomości prywatnych systemu Windows i struktur skojarzony parametr są zadeklarowane w nagłówku prywatnych MFC ' AFXPRIV.H ".Pamiętaj, że dowolne swój kod, który zawiera ten nagłówek może być opierając się na zachowanie nieudokumentowanych i podział prawdopodobnie będzie w przyszłości wersje biblioteki MFC.
W rzadkich przypadkach konieczności obsługi jednego z tych komunikatów, należy użyć ON_MESSAGE wiadomość makro mapę i obsługi wiadomości w formacie LRESULT/WPARAM/FIKCYJNYMI rodzajowy.
WM_QUERYAFXWNDPROC
Ta wiadomość jest wysyłana do okna, który jest tworzony.To jest przesyłane bardzo wczesnym etapie procesu tworzenia jako metoda ustalania, czy jest WndProc AfxWndProc.AfxWndProc zwraca wartość 1.
wParam |
Nie używane |
fikcyjnymi |
Nie używane |
zwraca |
1, jeśli przetwarzane przez AfxWndProc |
WM_SIZEPARENT
Ta wiadomość jest wysyłana przez okno ramek do jego bezpośrednie elementy podrzędne podczas skalowania (CFrameWnd::OnSize wywołania CFrameWnd::RecalcLayout który wzywa CWnd::RepositionBars) do zmiany położenia pasków kontroli wokół stronie ramki.AFX_SIZEPARENTPARAMS struktura zawiera bieżącym prostokącie klienta dostępne jednostki dominującej oraz HDWP, (który może być NULL) umożliwiające wywołanie DeferWindowPos aby zminimalizować malowania.
wParam |
Nie używane |
fikcyjnymi |
Adres AFX_SIZEPARENTPARAMS struktury |
zwraca |
Nieużywany (0) |
Ignorowanie wiadomości wskazuje, że okna nie bierze udziału w układzie.
WM_SETMESSAGESTRING
Ta wiadomość jest wysyłana do okna ramki można zażądać, aby zaktualizować wiersz wiadomości na pasku stanu.Identyfikator ciągu lub LPCSTR może być określony (ale nie obu).
wParam |
Ciąg Identyfikatora (lub zero) |
fikcyjnymi |
LPCSTR ciąg znaków (lub NULL) |
zwraca |
Nieużywany (0) |
WM_IDLEUPDATECMDUI
Ta wiadomość jest wysyłana w czasie bezczynności w zaktualizowania czas bezczynności systemu obsługi interfejsu użytkownika polecenie aktualizacji.Jeśli okno (zwykle pasek sterowania) obsługuje wiadomość, tworzy CCmdUI (lub obiektu klasy pochodnej) i wywołać CCmdUI::DoUpdate dla każdego z "elementów" w oknie.To z kolei sprawdzi ON_UPDATE_COMMAND_UI obsługi dla obiektów w łańcuchu program obsługi poleceń.
wParam |
Wartość logiczna bDisableIfNoHandler |
fikcyjnymi |
Nieużywany (0) |
zwraca |
Nieużywany (0) |
bDisableIfNoHandler jest różna od zera, aby wyłączyć obiekt interfejsu użytkownika, jeśli nie ma ani ON_UPDATE_COMMAND_UI ani ON_COMMAND obsługi.
WM_EXITHELPMODE
Ta wiadomość jest wysłana do CFrameWnd aby zakończyć kontekstowa, pomagającym tryb.Potwierdzenia odebrania tej wiadomości kończy Pętla modalna, których autorem jest CFrameWnd::OnContextHelp.
wParam |
Nieużywany (0) |
fikcyjnymi |
Nieużywany (0) |
zwraca |
Nie używane |
WM_INITIALUPDATE
Ta wiadomość jest wysyłana w szablonie dokumentu wszystkie elementy podrzędne ramki okna, gdy jest to bezpieczne dla nich zrobić ich początkowa aktualizacja.Mapuje wezwanie do CView::OnInitialUpdate , ale mogą być używane w innych CWnd-klasy do innych aktualizacji jednorazowe pochodne.
wParam |
Nieużywany (0) |
fikcyjnymi |
Nieużywany (0) |
zwraca |
Nieużywany (0) |
WM_RECALCPARENT
Ta wiadomość jest wysyłana przez widok do okna nadrzędnego (uzyskanych za pośrednictwem GetParent) aby wymusić ponowne obliczanie układu (zazwyczaj będzie wywoływać nadrzędny RecalcLayout).Jest to wykorzystywane w aplikacji serwera OLE gdzie jest to konieczne dla ramki wzrastać w wielkości jak rośnie całkowity rozmiar widoku.
Jeśli okno nadrzędne przetwarza ten komunikat powinien zwróci wartość TRUE i wypełnić RECT przekazany fikcyjnymi z nowy rozmiar obszaru klienckiego.Jest on używany w CScrollView kiedy właściwie obsługiwało paski przewijania (miejsce, a następnie na zewnątrz okna, gdy są one dodawane) obiekt serwera jest aktywowana w miejscu.
wParam |
Nieużywany (0) |
fikcyjnymi |
Może być NULL, LPRECT rectClient, |
zwraca |
Wartość TRUE, jeśli nowy klient prostokąt zwrócone, FALSE w przeciwnym razie |
WM_SIZECHILD
Ta wiadomość jest wysyłana przez COleResizeBar do okna jego właściciel (via GetOwner) kiedy użytkownik zmienia rozmiar pasek zmiany rozmiaru z uchwytami zmiany rozmiaru.COleIPFrameWndodpowiada na tę wiadomość przez próbę zmiany położenia ramki okna, jak użytkownik zażądał.
Nowy prostokąt, biorąc pod uwagę w klienta współrzędnych względem okna ramki, która zawiera pasek zmiany rozmiaru jest wskazywanej przez fikcyjnymi.
wParam |
Nieużywany (0) |
fikcyjnymi |
LPRECT rectNew |
zwraca |
Nieużywany (0) |
WM_DISABLEMODAL
Ta wiadomość jest wysyłana do wszystkich wyskakujących okienek posiadanych przez okno ramki, w którym jest dezaktywowany.Okno ramek używa tego wyniku, aby ustalić, czy należy wyłączyć wyskakujące okna.
Służy to do wykonywać specjalnych przetwarzania w oknie podręcznym, gdy ramki wchodzi modal Państwa lub do niektórych okien wyskakujących uniemożliwiają uzyskanie wyłączone.Etykietki narzędzi umożliwia niszczenie siebie podczas okno ramek przechodzi w stan modalny, na przykład tej wiadomości.
wParam |
Nieużywany (0) |
fikcyjnymi |
Nieużywany (0) |
zwraca |
Niezerowa, aby nie wyłącza okno, 0 oznacza okna zostanie wyłączony |
WM_FLOATSTATUS
Ta wiadomość jest wysyłana do wszystkich wyskakujących okienek posiadanych przez okno ramek, gdy ramka jest aktywowany lub zdezaktywowany przez inne okno najwyższego poziomu ramki.Służy to przez wprowadzenie w życie MFS_SYNCACTIVE w CMiniFrameWnd, a do synchronizowania aktywacji te wyskakujące okienka z aktywacją okno najwyższego poziomu ramek.
wParam |
Jest jednym z następujących wartości: FS_SHOW FS_HIDE FS_ACTIVATE FS_DEACTIVATE FS_ENABLEFS_DISABLE FS_SYNCACTIVE |
fikcyjnymi |
Nieużywany (0) |
Wartość zwracana powinna być różna od zera jeśli FS_SYNCACTIVE jest ustawiona i synchronizuje okno aktywacji z ramki macierzystej.CMiniFrameWndZwraca wartość różna od zera, gdy styl jest ustawiona na MFS_SYNCACTIVE.
Aby uzyskać więcej informacji, zobacz temat wykonania CMiniFrameWnd.
WM_ACTIVATETOPLEVEL
Ta wiadomość jest wysyłana do okna najwyższego poziomu, gdy okno w "grupie najwyższego poziomu" jest aktywowana lub dezaktywowana.Okno jest częścią grupy najwyższego poziomu, jeśli to okno najwyższego poziomu (nie nadrzędnego lub właściciela) lub jest w posiadaniu takie okno.Ten komunikat działa podobnie do WM_ACTIVATEAPP, , ale działa w sytuacji, gdy należących do różnych procesów systemu windows są mieszane w jednym oknie hierarchii (często w aplikacji OLE).
WM_COMMANDHELP, WM_HELPHITTEST, WM_EXITHELPMODE
Te komunikaty są używane w realizacji pomocy kontekstowej.Można znaleźć w techniczne Uwaga 28 uzyskać więcej informacji.
Formaty zasobów prywatnych MFC
Obecnie MFC definiuje dwa formaty prywatnych zasobów: RT_TOOLBAR i RT_DLGINIT.
Format zasobu RT_TOOLBAR
Podstawą jest domyślnym pasku narzędzi dostarczonych przez AppWizard RT_TOOLBAR niestandardowe zasobu, który został wprowadzony w wersji 4.0 MFC.Można edytować tego zasobu za pomocą narzędzi edytora.
Format zasobu RT_DLGINIT
Jeden format prywatnych zasobów MFC jest używany do przechowywania informacji na temat inicjalizacji dodatkowe okno dialogowe.Obejmuje to początkowy ciągi przechowywane w polu kombi.Format ten zasób nie jest przeznaczony do ręcznie edytowane, ale jest obsługiwany przez program Visual C++.
Visual C++ i to RT_DLGINIT zasobów nie są wymagane do korzystania pokrewne funkcje biblioteki MFC, ponieważ istnieją API alternatywą dla korzystając z informacji zawartych w zasobie.Przy użyciu języka Visual C++ sprawia, że znacznie łatwiej pisać, obsługa i przetłumaczyć aplikacji w dłuższej perspektywie.
Podstawowa struktura RT_DLGINIT zasób jest w następujący sposób:
+---------------+ \
| Control ID | UINT |
+---------------+ |
| Message # | UINT |
+---------------+ |
|length of data | DWORD |
+---------------+ | Repeated
| Data | Variable Length | for each control
| ... | and Format | and message
+---------------+ /
| 0 | BYTE
+---------------+
Powtarzające się sekcja zawiera identyfikator formantu, aby wysłać wiadomość, wiadomość # Wyślij (normalny komunikat systemu Windows) i danych o zmiennej długości.System Windows zostanie wysłana w postaci:
SendDlgItemMessage(<Control ID>, <Message #>, 0, &<Data>);
Jest to bardzo ogólny format, pozwalających na wiadomości systemu Windows i zawartości danych.Edytor zasobów Visual C++ i MFC obsługują tylko ograniczony podzbiór wiadomości systemu Windows: CB_ADDSTRING dla początkowych opcji lista dla pola kombi (danych to ciąg tekstowy).