Udostępnij za pośrednictwem


Programy obsługi dla zakresów map komunikatów

W tym artykule wyjaśniono, jak mapowanie szereg wiadomości do funkcji obsługi pojedynczej wiadomości (zamiast mapowania jeden komunikat do tylko jednej funkcji).

Bywają takie sytuacje, kiedy trzeba będzie przetwarzać więcej niż jedno powiadomienie wiadomości lub kontroli w ten sam sposób.W takich terminach może chcesz mapować wszystkie wiadomości do funkcji obsługi pojedynczego.Zakresy mapę wiadomości pozwalają na to zrobić dla ciągły zakres wiadomości:

  • Można mapować zakresy identyfikatorów poleceń do:

    • Funkcja obsługi polecenia.

    • Funkcja obsługi aktualizacji polecenia.

  • Kontrola powiadomień dla zakresu regulacji identyfikatorów można mapować do funkcji obsługi wiadomości.

Omówione w tym artykule tematy obejmują:

  • Pisanie wpisie mapy wiadomości

  • Zadeklarowanie funkcji obsługi

  • Przykładem identyfikatorów poleceń dla zakresu

  • Przykład zakresu formantu identyfikatory

Pisanie wpisie mapy wiadomości

W.CPP plików, Dodaj wpis mapy komunikat, jak pokazano w następującym przykładzie:

ON_COMMAND_RANGE(ID_MYCMD_ONE, ID_MYCMD_TEN, &OnDoSomething)

Wpis mapy wiadomości składa się z następujących elementów:

  • Makro zakres mapy wiadomości:

  • Parametry do makra:

    Pierwsze dwa makra wykonać trzy parametry:

    • Identyfikator polecenia, rozpoczynający zakres

    • Identyfikator polecenia, kończący zakres

    • Nazwa funkcji obsługi wiadomości

    Zakres identyfikatorów poleceń musi być ciągły.

    Trzeci makro, ON_CONTROL_RANGE, zabiera dodatkowy parametr pierwszy: control komunikat z powiadomieniem, takich jak EN_CHANGE.

Zadeklarowanie funkcji obsługi

Dodaj swoje deklaracji funkcji obsługi w.H plik.Poniższy kod ilustruje, jak może to wyglądać, jak pokazano poniżej:

public:
   afx_msg void OnDoSomething(UINT nID);

Funkcje obsługi dla pojedynczego polecenia zwykle nie mają żadnych parametrów.Z wyjątkiem funkcje obsługi aktualizacji, funkcje obsługi dla zakresów mapę wiadomości wymagają dodatkowego parametru nID, typ UINT.Ten parametr jest pierwszym parametrem.Dodatkowy parametr może pomieścić identyfikator polecenia dodatkowe potrzebne do określania polecenia, które faktycznie wybrał użytkownik.

Aby uzyskać więcej informacji na temat wymagania dotyczące parametrów aktualizacji funkcje obsługi, zobacz przykład dla zakres polecenia identyfikatorów.

Przykład dla identyfikatorów polecenia zakres

Może być użycie zakresy?Jednym z przykładów jest w zakresie obsługi poleceń, podobnie jak polecenie Powiększenie w próbce MFC HIERSVR.To polecenie powoduje powiększenie widoku, przeskalowania go między 25% a 300% normalnego rozmiaru.Klasa widok HIERSVR's używa zakresu do obsługi poleceń Lupka z wpisem mapy komunikat przypominający to:

ON_COMMAND_RANGE(ID_VIEW_ZOOM25, ID_VIEW_ZOOM300, &OnZoom)

Podczas zapisu mapy wiadomości, należy określić:

  • Dwa identyfikatory poleceń, zaczynającego się i kończącego ciągły zakres.

    Here they are ID_VIEW_ZOOM25 and ID_VIEW_ZOOM300.

  • Nazwa funkcji obsługi dla poleceń.

    Here it's OnZoom.

Deklaracji funkcji może być podobna do poniższej:

public:
   afx_msg void OnZoom(UINT nID);

W przypadku funkcje obsługi aktualizacji jest podobne i mogą być znacznie bardziej użyteczne.Dość często do zapisu ON_UPDATE_COMMAND_UI obsługi wielu poleceń i okaże się, że pisanie lub kopiowanie, ten sam kod w kółko.Rozwiązaniem jest zakres identyfikatorów do jednej aktualizacji za pomocą funkcji obsługi polecenia Mapuj ON_UPDATE_COMMAND_UI_RANGE makro.Identyfikatory poleceń muszą stanowić ciągły zakres.Na przykład, zobacz OnUpdateZoom obsługi i jego ON_UPDATE_COMMAND_UI_RANGE mapy wiadomości pozycji w klasie widoku próbki HIERSVR.

Aktualizacja funkcje obsługi dla pojedynczego polecenia normalnie korzystać z jednego parametru, pCmdUI, typ CCmdUI *.W przeciwieństwie do funkcji obsługi funkcje obsługi aktualizacji dla zakresów wiadomość Mapa nie wymagają dodatkowego parametru nID, typ UINT.Identyfikator polecenia, który jest wymagany do określenia, jakie polecenia faktycznie wybrał użytkownik, znajduje się w CCmdUI obiektu.

Przykład dla identyfikatorów zakresu kontroli

Innym przypadku interesujące jest mapowanie sterowania powiadomień dla zakresu regulacji identyfikatorów do pojedynczego programu obsługi.Załóżmy, że użytkownik może kliknąć jeden z przycisków 10.Aby mapować wszystkie przyciski 10 jeden program obsługi, wpis mapy wiadomość będzie wyglądać następująco:

ON_CONTROL_RANGE(BN_CLICKED, IDC_BUTTON1, IDC_BUTTON10, OnButtonClicked)  

Podczas wpisywania ON_CONTROL_RANGE makro na mapie wiadomości, można określić:

  • Określonego formantu komunikat z powiadomieniem.

    W tym miejscu ma BN_CLICKED.

  • Identyfikator formantu wartości skojarzone z ciągły zakres kontroli.

    Here these are IDC_BUTTON1 and IDC_BUTTON10.

  • Nazwa funkcji obsługi wiadomości.

    Here it's OnButtonClicked.

Po napisaniu funkcji obsługi określić dodatkowe UINT parametr, jak pokazano poniżej:

void CRangesView::OnButtonClicked( UINT nID )
{
    int nButton = nID - IDC_BUTTON1;
    ASSERT( nButton >= 0 && nButton < 10 );
    // ...
}

OnButtonClicked Obsługi dla pojedynczego BN_CLICKED wiadomość nie ma parametrów.Tej procedury obsługi zakresu przyciski ma jedną UINT.Dodatkowy parametr umożliwia identyfikowanie określonego formantu odpowiedzialny za wygenerowanie BN_CLICKED wiadomości.

Kod w przykładzie jest typowe: konwersja wartości przekazywane do int w obrębie zasięgu wiadomości i twierdząc, że jest to możliwe.Następnie może zająć kilka różnych akcji w zależności od tego, który przycisk został kliknięty.

Zobacz też

Koncepcje

Deklarowanie funkcji obsługi komunikatów