TN024: Wiadomości zdefiniowane MFC i zasobów
[!UWAGA]
Następujące Uwaga techniczna została zaktualizowana, ponieważ najpierw została uwzględniona w dokumentacji online.W rezultacie niektóre procedur i tematów może być nieaktualne lub nieprawidłowe.Najnowsze informacje zaleca się wyszukać temat zainteresowanie Indeks dokumentacji online.
Uwaga ta opisuje formatów zasobów przez MFC i wiadomości wewnętrznego systemu Windows.Informacje te wyjaśnia wprowadzenie w życie ram i pomoże Ci debugowanie aplikacji.Dla przygód nawet jeśli te informacje nie jest oficjalnie obsługiwane, można użyć niektóre z tych informacji dla zaawansowanych implementacji.
Uwaga ta zawiera szczegóły dotyczące implementacji prywatnych MFC; Cała zawartość mogą ulec zmianie w przyszłości.Wiadomości prywatnych Windows MFC mają znaczenie w zakresie jednej aplikacji, ale zmieni się w przyszłości zawierają komunikaty systemowe.
Wiadomości prywatnych Windows zakres MFC i typów zasobów w zakresie zastrzeżone "system" wydzielone są przez system Microsoft Windows.Obecnie nie wszystkie numery z zakresów są używane i w przyszłości może używane nowe numery w zakresie.Obecnie używane numery mogą ulec zmianie.
Wiadomości prywatnych Windows MFC znajdują się w zakresie 0x360 - > 0x37F.
Typy zasobów prywatnych MFC znajdują się w zakresie 0xF0 - > 0xFF.
Komunikaty Windows prywatnego MFC
Tych komunikatów systemu Windows są używane zamiast funkcji wirtualnych C++ gdzie stosunkowo luzem sprzężenie jest wymagane, pomiędzy obiektami okna i gdzie funkcję wirtualną C++ nie byłoby właściwe.
W nagłówku prywatnych MFC zgłaszane są te wiadomości prywatnych systemu Windows i struktur skojarzony parametr ' AFXPRIV.H ".Być ostrzegany, że żadnego kodu, który zawiera nagłówek może zależało zachowanie nieudokumentowane i podział prawdopodobnie będzie w przyszłości wersji MFC.
W przypadku rzadkich wymagające obsługi jeden z tych komunikatów, należy użyć ON_MESSAGE wiadomości makra mapę i obsługi wiadomości w formacie Ogólne WPARAM/LRESULT/LPARAM.
WM_QUERYAFXWNDPROC
To wiadomość jest wysyłana do okna, który jest tworzony.To jest wysyłany bardzo wczesnym etapie procesu tworzenia jako metodę określania, jeśli jest WndProc AfxWndProc.AfxWndProc zwraca wartość 1.
wParam |
Nie używane |
lParam |
Nie używane |
Zwraca |
1 Jeśli przetwarzane przez AfxWndProc |
WM_SIZEPARENT
Wiadomość ta jest wysyłana przez okno ramek do jego bezpośrednie elementy podrzędne podczas zmiany rozmiaru (CFrameWnd::OnSize wywołania CFrameWnd::RecalcLayout który wzywa CWnd::RepositionBars) do zmiany położenia pasków wokół krawędzi ramki.AFX_SIZEPARENTPARAMS struktura zawiera bieżącym prostokącie dostępne Klient nadrzędny i HDWP, (który może być NULL), z którą chcesz wywołać DeferWindowPos do minimum ponownego rysowania.
wParam |
Nie używane |
lParam |
Adres AFX_SIZEPARENTPARAMS struktury |
Zwraca |
Nie używany (0) |
Ignorowanie wiadomości wskazuje, że okna nie uczestniczy w układzie.
WM_SETMESSAGESTRING
Ten komunikat jest wysyłanego do okna ramki można zażądać aktualizacji wiersza wiadomości na pasku stanu.Identyfikator ciągu lub LPCSTR może być określony (ale nie obu).
wParam |
Ciąg Identyfikatora (lub zero) |
lParam |
LPCSTR ciąg znaków (lub NULL) |
Zwraca |
Nie używany (0) |
WM_IDLEUPDATECMDUI
Ten komunikat jest wysyłane w czasie bezczynności zaktualizowania czas bezczynności obsługi interfejsu użytkownika polecenie aktualizacji.Jeśli okno (zazwyczaj pasek sterowania) obsługuje wiadomość, tworzy CCmdUI (lub obiektu klasy) i wywołać CCmdUI::DoUpdate dla każdego "pozycje" w oknie.To z kolei będzie sprawdzał ON_UPDATE_COMMAND_UI obsługi obiektów w łańcuchu polecenia obsługi.
wParam |
BOOL bDisableIfNoHandler |
lParam |
Nie używany (0) |
Zwraca |
Nie używany (0) |
bDisableIfNoHandler jest niezerowy wyłączenie obiektu interfejsu użytkownika, jeśli nie ON_UPDATE_COMMAND_UI ani ON_COMMAND obsługi.
WM_EXITHELPMODE
Ten komunikat jest przesyłany do CFrameWnd , aby zakończyć kontekstowa tryb pomocy.Otrzymanie tego komunikatu kończy pętli modalnej, przez CFrameWnd::OnContextHelp.
wParam |
Nie używany (0) |
lParam |
Nie używany (0) |
Zwraca |
Nie używane |
WM_INITIALUPDATE
Ten komunikat jest wysyłane przez szablon dokumentu wszystkie elementy podrzędne w oknie ramki jest bezpieczne ich do ich aktualizacji początkowej.Mapuje wywołanie CView::OnInitialUpdate , ale mogą być używane w innych CWnd-klasy innych aktualizacji jednorazowy pochodne.
wParam |
Nie używany (0) |
lParam |
Nie używany (0) |
Zwraca |
Nie używany (0) |
WM_RECALCPARENT
Wysyła komunikat ten widok do jego okna nadrzędnego (uzyskanych za pośrednictwem GetParent) aby wymusić ponowne obliczanie układu (zwykle będzie wywoływać nadrzędnej RecalcLayout).To jest używany w aplikacji serwera OLE gdzie jest to konieczne dla ramki rośnie pofragmentowaniu, całkowity rozmiar widoku.
Jeśli okno nadrzędne przetwarza ten komunikat powinien wartość TRUE i wypełnić RECT, przekazany lParam z nowy rozmiar obszaru klienta.Jest on używany w CScrollView gdy prawidłową obsługę paski przewijania (miejsce, a następnie na zewnątrz okna, gdy są one dodawane) obiekt serwera jest aktywowana w miejscu.
wParam |
Nie używany (0) |
lParam |
LPRECT rectClient może być NULL |
Zwraca |
Prostokąt wartość TRUE, jeśli nowy klient zwrócone, FALSE w przeciwnym |
WM_SIZECHILD
Ten komunikat jest wysyłany przez COleResizeBar do jego okna właściciela (via GetOwner) gdy użytkownik zmienia rozmiar pasek z uchwytów zmiany rozmiaru.COleIPFrameWndodpowiada na tę wiadomość, próbując zmienić położenie ramki okna, jak użytkownik zażądał.
Nowy prostokąt, podane w klienta współrzędnych względem okna ramki, która zawiera pasek zmiany rozmiaru jest wskazywanej przez lParam.
wParam |
Nie używany (0) |
lParam |
LPRECT rectNew |
Zwraca |
Nie używany (0) |
WM_DISABLEMODAL
Wiadomość ta jest wysyłana do wszystkich wyskakujących okienek, własność w oknie ramki, która jest dezaktywowany.Okno ramek używa wynik do ustalenia, czy wyłączyć w oknie podręcznym.
Można to wykonać specjalnego przetwarzania w wyskakującym oknie, gdy ramki przejdzie w stan modalny lub uniemożliwić pobieranie wyłączone niektórych okien wyskakujących.Etykietki narzędzi same zniszczyć, gdy okno ramek przechodzi w modalne Państwa, na przykład za pomocą tej wiadomości.
wParam |
Nie używany (0) |
lParam |
Nie używany (0) |
Zwraca |
Niezerowa, aby nie wyłącza okno, 0 wskazuje, okno zostanie wyłączony. |
WM_FLOATSTATUS
Wiadomość ta jest wysyłana do wszystkich wyskakujących okienek własnością okno ramek, gdy ramki jest aktywowany lub zdezaktywowany przez inne okno najwyższego poziomu ramki.Jest używana przez wykonania MFS_SYNCACTIVE w CMiniFrameWnd, aby zachować synchronizację z aktywacją okna najwyższego poziomu ramki aktywację tych okien wyskakujących.
wParam |
Jest jedną z następujących wartości: FS_SHOW FS_HIDE FS_ACTIVATE FS_DEACTIVATE FS_ENABLEFS_DISABLE FS_SYNCACTIVE |
lParam |
Nie używany (0) |
Wartość zwracana powinna być równa zero jeśli FS_SYNCACTIVE jest zestaw i synchronizuje okna aktywacji ramki nadrzędnej.CMiniFrameWndZwraca wartość niezerową, gdy styl jest ustawiony na MFS_SYNCACTIVE.
Aby uzyskać więcej informacji, zobacz temat wykonania CMiniFrameWnd.
WM_ACTIVATETOPLEVEL
To wiadomość jest wysyłana do okna najwyższego poziomu, gdy okno w "grupie najwyższego poziomu" jest aktywowany lub zdezaktywowany.Okno jest częścią grupy najwyższego poziomu, jeśli jest okno najwyższego poziomu (nie nadrzędnej lub właściciela) lub jest własnością takie okno.Ten komunikat jest podobnie do WM_ACTIVATEAPP, , ale działa w sytuacjach, gdy należących do różnych procesów systemu windows są mieszane w hierarchii pojedyncze okno (wspólnych w aplikacji OLE).
WM_COMMANDHELP, WM_HELPHITTEST, WM_EXITHELPMODE
Komunikaty te są używane w realizacji pomocy kontekstowej.Można znaleźć w technicznej Uwaga 28 Aby uzyskać więcej informacji.
Formaty zasobów prywatnych MFC
Obecnie MFC definiuje dwa formaty prywatnych zasobu: RT_TOOLBAR i RT_DLGINIT.
Format zasobów RT_TOOLBAR
Domyślny pasek narzędziowy, dostarczonych przez AppWizard jest oparta na RT_TOOLBAR niestandardowe zasób, który został wprowadzony w wersji 4.0 MFC.Można edytować tego zasobu za pomocą narzędzi edytora.
Format zasobów RT_DLGINIT
Jeden format prywatnych zasobu MFC jest używany do przechowywania informacji o dodatkowe okno dialogowe Inicjowanie.Obejmuje to początkowy ciągi przechowywane w polu kombi.Format ten zasób nie jest zaprojektowane do ręcznie edytowane, ale jest obsługiwany przez program Visual C++.
Visual C++ i to RT_DLGINIT zasobów nie są zobowiązane do stosowania pokrewne funkcje MFC, ponieważ interfejs API alternatywę dla informacji w zasobie.Przy użyciu języka Visual C++ sprawia, że łatwiej napisać, utrzymania 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ści # Wyślij (normalna komunikat systemu Windows) i o zmiennej długości danych.Komunikat systemu Windows jest wysyłane w postaci:
SendDlgItemMessage(<Control ID>, <Message #>, 0, &<Data>);
Jest to bardzo ogólny format, umożliwiając wszelkich komunikatów systemu Windows i zawartości danych.Edytor zasobu Visual C++ i MFC obsługują jedynie ograniczony podzbiór komunikatów systemu Windows: CB_ADDSTRING dla początkowych opcji listy pola kombi (danych to ciąg tekstowy).