Udostępnij za pośrednictwem


TN024: komunikaty i zasoby zdefiniowane przez MFC

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 wewnętrzne komunikaty systemu Windows i formaty zasobów używane przez MFC. Te informacje wyjaśniają implementację struktury i ułatwiają debugowanie aplikacji. W przypadku przygód, mimo że wszystkie te informacje są oficjalnie nieobsługiwane, możesz użyć niektórych z tych informacji do zaawansowanych implementacji.

Ta uwaga zawiera szczegóły implementacji prywatnej MFC; cała zawartość może ulec zmianie w przyszłości. Prywatne komunikaty MFC systemu Windows mają znaczenie tylko w zakresie jednej aplikacji, ale zmienią się w przyszłości tak, aby zawierały komunikaty dla całego systemu.

Zakres prywatnych komunikatów i typów zasobów systemu Windows MFC znajduje się w zarezerwowanym zakresie "system" odłożonym przez system Microsoft Windows. Obecnie nie wszystkie liczby w zakresach są używane i w przyszłości mogą być używane nowe liczby w zakresie. Obecnie używane liczby mogą zostać zmienione.

Prywatne komunikaty systemu Windows MFC znajdują się w zakresie 0x360-0x37F>.

Typy zasobów prywatnych MFC znajdują się w zakresie 0xF0-0xFF>.

Prywatne komunikaty systemu Windows MFC

Te komunikaty systemu Windows są używane zamiast funkcji wirtualnych języka C++, w których stosunkowo luźne sprzęganie jest wymagane między obiektami okna i gdzie funkcja wirtualna języka C++ nie byłaby odpowiednia.

Te prywatne komunikaty systemu Windows i skojarzone struktury parametrów są deklarowane w nagłówku prywatnym MFC "AFXPRIV. H'. Ostrzegaj, że dowolny kod, który zawiera ten nagłówek, może polegać na nieudokumentowanym zachowaniu i prawdopodobnie zostanie przerwany w przyszłych wersjach MFC.

W rzadkim przypadku konieczności obsługi jednego z tych komunikatów należy użyć makra mapy komunikatów ON_MESSAGE i obsłużyć komunikat w ogólnym formacie LRESULT/WPARAM/LPARAM.

WM_QUERYAFXWNDPROC

Ta wiadomość jest wysyłana do tworzonego okna. Jest to wysyłane bardzo wcześnie w procesie tworzenia jako metoda określania, czy WndProc jest AfxWndProc. Funkcja AfxWndProc zwraca wartość 1.

Parametry i wartość zwracana opis
Wparam Nieużywane
Lparam Nieużywane
zwraca 1, jeśli przetwarzane przez AfxWndProc

WM_SIZEPARENT

Ten komunikat jest wysyłany przez okno ramowe do jego bezpośrednich elementów podrzędnych podczas zmiany rozmiaru (CFrameWnd::OnSize wywołań CFrameWnd::RecalcLayout , które wywołuje CWnd::RepositionBars) w celu zmiany położenia pasków sterujących wokół boku ramki. Struktura AFX_SIZEPARENTPARAMS zawiera bieżący dostępny prostokąt klienta elementu nadrzędnego i HDWP (który może mieć wartość NULL), za pomocą którego należy wywołać DeferWindowPos funkcję w celu zminimalizowania przemalowania.

Parametry i wartość zwracana opis
Wparam Nieużywane
Lparam Adres struktury AFX_SIZEPARENTPARAMS
zwraca Nieużytne (0)

Ignorowanie komunikatu oznacza, że okno nie bierze udziału w układzie.

WM_SETMESSAGESTRING

Ten komunikat jest wysyłany do okna ramki, aby poprosić go o zaktualizowanie wiersza komunikatu na pasku stanu. Można określić identyfikator ciągu lub LPCSTR (ale nie oba).

Parametry i wartość zwracana opis
Wparam Identyfikator ciągu (lub zero)
Lparam LPCSTR dla ciągu (lub NULL)
zwraca Nieużytne (0)

WM_IDLEUPDATECMDUI

Ten komunikat jest wysyłany w czasie bezczynności w celu zaimplementowania bezczynności aktualizacji programów obsługi interfejsu użytkownika polecenia update-command. Jeśli okno (zazwyczaj pasek sterowania) obsługuje komunikat, tworzy CCmdUI obiekt (lub obiekt klasy pochodnej) i wywołuje CCmdUI::DoUpdate każde z "elementów" w oknie. Spowoduje to sprawdzenie obsługi ON_UPDATE_COMMAND_UI dla obiektów w łańcuchu obsługi poleceń.

Parametry i wartość zwracana opis
Wparam BOOL bDisableIfNoHandler
Lparam Nieużytne (0)
zwraca Nieużytne (0)

Program bDisableIfNoHandler jest niezerowy, aby wyłączyć obiekt interfejsu użytkownika, jeśli nie istnieje ani ON_UPDATE_COMMAND_UI, ani program obsługi ON_COMMAND.

WM_EXITHELPMODE

Ten komunikat jest publikowany w tym CFrameWnd celu, aby zamknąć tryb pomocy kontekstowej poufnej. Potwierdzenie tego komunikatu kończy pętlę modalną uruchomioną przez CFrameWnd::OnContextHelp.

Parametr i wartość zwracana opis
Wparam Nieużytne (0)
Lparam Nieużytne (0)
zwraca Nieużywane

WM_INITIALUPDATE

Ten komunikat jest wysyłany przez szablon dokumentu do wszystkich elementów podrzędnych okna ramki, gdy jest bezpieczny dla nich do wykonania początkowej aktualizacji. Mapuje ono wywołanie do CView::OnInitialUpdate metody , ale może być używane w innych CWndklasach pochodnych na potrzeby aktualizacji z jednym strzałem.

Parametry i wartość zwracana opis
Wparam Nieużytne (0)
Lparam Nieużytne (0)
zwraca Nieużytne (0)

WM_RECALCPARENT

Ten komunikat jest wysyłany przez widok do okna nadrzędnego (uzyskanego za pośrednictwem GetParent) w celu wymuszenia ponownego obliczenia układu (zazwyczaj element nadrzędny wywoła metodę RecalcLayout). Jest to używane w aplikacjach serwera OLE, w których jest konieczne zwiększenie rozmiaru ramki w miarę wzrostu całkowitego rozmiaru widoku.

Jeśli okno nadrzędne przetwarza ten komunikat, powinien zwrócić wartość TRUE i wypełnić recT przekazany w lParam nowym rozmiarem obszaru klienta. Służy CScrollView do prawidłowego obsługi pasków przewijania (umieść je na zewnątrz okna po dodaniu), gdy obiekt serwera jest aktywowany w miejscu.

Parametry i wartość zwracana opis
Wparam Nieużytne (0)
Lparam Obiekt LPRECT rectClient może mieć wartość NULL
zwraca WARTOŚĆ TRUE, jeśli zwracany jest nowy prostokąt klienta, w przeciwnym razie wartość FALSE

WM_SIZECHILD

Ta wiadomość jest wysyłana do COleResizeBar okna właściciela (za pośrednictwem GetOwner), gdy użytkownik zmienia rozmiar paska rozmiaru za pomocą uchwytów zmiany rozmiaru. COleIPFrameWnd odpowiada na ten komunikat, próbując zmienić położenie okna ramki, gdy użytkownik zażądał.

Nowy prostokąt, podany we współrzędnych klienta względem okna ramki zawierającego pasek zmiany rozmiaru, jest wskazywany przez lParam.

Parametry i wartość zwracana opis
Wparam Nieużytne (0)
Lparam LPRECT rectNowy
zwraca Nieużytne (0)

WM_DISABLEMODAL

Ten komunikat jest wysyłany do wszystkich okien podręcznych należących do okna ramowego, które jest dezaktywowane. Okno ramki używa wyniku, aby określić, czy wyłączyć okno podręczne.

Za pomocą tego polecenia można wykonać specjalne przetwarzanie w oknie podręcznym, gdy ramka wchodzi w stan modalny lub nie wyłącza niektórych okien podręcznych. Etykietki narzędzi używają tego komunikatu, aby zniszczyć się, gdy na przykład okno ramki przechodzi w stan modalny.

Parametry i wartość zwracana opis
Wparam Nieużytne (0)
Lparam Nieużytne (0)
zwraca Bez zera, aby nie wyłączyć okna, 0 oznacza, że okno zostanie wyłączone

WM_FLOATSTATUS

Ten komunikat jest wysyłany do wszystkich okien podręcznych należących do okna ramki, gdy ramka jest aktywowana lub dezaktywowana przez kolejne okno ramki najwyższego poziomu. Jest to używane przez implementację MFS_SYNCACTIVE w programie w CMiniFrameWndcelu zachowania synchronizacji tych okien podręcznych z aktywacją okna ramek najwyższego poziomu.

Parametry opis
Wparam Jest jedną z następujących wartości:

FS_SHOW

FS_HIDE

FS_ACTIVATE

FS_DEACTIVATE

FS_ENABLEFS_DISABLE

FS_SYNCACTIVE
Lparam Nieużytne (0)

Wartość zwracana powinna być inna niż zero, jeśli FS_SYNCACTIVE jest ustawiona, a okno synchronizuje jego aktywację z ramką nadrzędną. CMiniFrameWnd Zwraca wartość inną niż zero, gdy styl jest ustawiony na MFS_SYNCACTIVE.

Aby uzyskać więcej informacji, zobacz implementację programu CMiniFrameWnd.

WM_ACTIVATETOPLEVEL

Ten komunikat jest wysyłany do okna najwyższego poziomu, gdy okno w grupie najwyższego poziomu jest aktywowane lub dezaktywowane. Okno jest częścią grupy najwyższego poziomu, jeśli jest to okno najwyższego poziomu (bez elementu nadrzędnego lub właściciela) lub jest własnością takiego okna. Ten komunikat jest podobny do WM_ACTIVATEAPP, ale działa w sytuacjach, w których okna należące do różnych procesów są mieszane w jednej hierarchii okien (typowej w aplikacjach OLE).

WM_COMMANDHELP, WM_HELPHITTEST, WM_EXITHELPMODE

Te komunikaty są używane w implementacji pomocy kontekstowej. Aby uzyskać więcej informacji, zapoznaj się z dokumentacją techniczną 28 .

Formaty zasobów prywatnych MFC

Obecnie MFC definiuje dwa prywatne formaty zasobów: RT_TOOLBAR i RT_DLGINIT.

format zasobu RT_TOOLBAR

Domyślny pasek narzędzi dostarczony przez aplikację AppWizard jest oparty na zasobie niestandardowym RT_TOOLBAR, który został wprowadzony w MFC 4.0. Ten zasób można edytować przy użyciu edytora narzędzi.

format zasobu RT_DLGINIT

Jeden prywatny format zasobu MFC służy do przechowywania dodatkowych informacji inicjowania okna dialogowego. Obejmuje to początkowe ciągi przechowywane w polu kombi. Format tego zasobu nie jest przeznaczony do ręcznej edycji, ale jest obsługiwany przez program Visual C++.

Visual C++ i ten zasób RT_DLGINIT nie są wymagane do korzystania z powiązanych funkcji MFC, ponieważ istnieje alternatywa interfejsu API do korzystania z informacji w zasobie. Korzystanie z języka Visual C++ znacznie ułatwia pisanie, konserwowanie i tłumaczenie aplikacji w dłuższej perspektywie.

Podstawowa struktura zasobu RT_DLGINIT jest następująca:

+---------------+    \
| Control ID    |   UINT             |
+---------------+    |
| Message #     |   UINT             |
+---------------+    |
|length of data |   DWORD            |
+---------------+    |   Repeated
|   Data        |   Variable Length  |   for each control
|   ...         |   and Format       |   and message
+---------------+    /
|     0         |   BYTE
+---------------+

Powtórzona sekcja zawiera identyfikator kontrolki do wysłania komunikatu, komunikat # do wysłania (normalny komunikat systemu Windows) i zmienną długość danych. Komunikat systemu Windows jest wysyłany w formularzu:

SendDlgItemMessage(<Control ID>, <Message #>, 0, &<Data>);

Jest to bardzo ogólny format, który umożliwia korzystanie z komunikatów i zawartości danych systemu Windows. Edytor zasobów Visual C++ i MFC obsługują tylko ograniczony podzestaw komunikatów systemu Windows: CB_ADDSTRING dla początkowych opcji listy dla pól kombi (dane są ciągiem tekstowym).

Zobacz też

Uwagi techniczne według numerów
Uwagi techniczne według kategorii