Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 CWnd
klasach 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 CMiniFrameWnd
celu 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