Udostępnij za pośrednictwem


Programy obsługi dla zakresów mapę wiadomości

W tym artykule wyjaśniono, jak mapowania zakres wiadomości do funkcji obsługi wiadomości (zamiast mapowania jeden komunikat tylko jedną funkcję).

Są potrzebne do przetwarzania więcej niż jedno powiadomienie wiadomości lub kontroli w taki sam sposób.W takich terminach możesz mapować wszystkie wiadomości do funkcji obsługi pojedynczy.Zakresy mapę wiadomości umożliwiają to zrobić na ciągły zakres wiadomości:

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

    • Funkcja obsługi polecenia.

    • Funkcja obsługi aktualizacji polecenia.

  • Wiadomości powiadomień kontroli w zakresie kontroli identyfikatorów można mapować do funkcji obsługi wiadomości.

W tym artykule tematy obejmują:

  • Pisanie wpisu mapy wiadomości

  • Deklarowania funkcji obsługi

  • Przykład zakresu identyfikatory poleceń

  • Przykład zakresu kontroli identyfikatory

Pisanie wpisu mapy wiadomości

W.CPP plików, należy dodać wpis mapy wiadomości, jak pokazano w następującym przykładzie:

ON_COMMAND_RANGE(ID_MYCMD_ONE, ID_MYCMD_TEN, &OnDoSomething)

Wpis mapowania komunikat składa się z następujących elementów:

  • Makro zakres mapę wiadomości:

  • Parametry do makra:

    Pierwsze dwa makra mieć 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, ma dodatkowy parametr pierwszy: kontroli komunikat z powiadomieniem, takie jak EN_CHANGE.

Deklarowania funkcji obsługi

Dodaj użytkownika deklaracji funkcji obsługi w.H pliku.Poniższy kod ilustruje ten może wyglądać, jak pokazano poniżej:

public:
   afx_msg void OnDoSomething(UINT nID);

Funkcje obsługi dla pojedynczego polecenia zwykle nie mieć parametrów.Z wyjątkiem funkcje obsługi aktualizacji, funkcje obsługi dla zakresów mapę wiadomości wymagają dodatkowego parametru nID, typu UINT.Ten parametr jest pierwszym parametrem.Dodatkowy parametr użytą identyfikator dodatkowe polecenia potrzebne do określania, które użytkownik rzeczywiście wybrał polecenie.

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

Przykład dla identyfikatorów polecenia zakres

Kiedy może używać zakresy?Przykładem jest obsługi poleceń, jak polecenie Powiększenie w próbce MFC w HIERSVR.To polecenie powiększa widok przeskalowania go między 25% a 300% normalnego rozmiaru.Klasa widoku HIERSVR's używa zakres obsługi poleceń Lupka wpisie 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 polecenia identyfikatory, rozpoczęcia i zakończenia ciągły zakres.

    Here they are ID_VIEW_ZOOM25 and ID_VIEW_ZOOM300.

  • Nazwa funkcji obsługi poleceń.

    Here it's OnZoom.

Deklaracja funkcji przypominałyby to:

public:
   afx_msg void OnZoom(UINT nID);

Aktualizacja programu obsługi funkcji są podobne i mogą być bardziej użyteczne.Dość często pisać ON_UPDATE_COMMAND_UI obsługi wielu poleceń i znaleźć samodzielnie pisania lub kopiowanie, ten sam kod i wielokrotnie.Roztwór jest odwzorowanie zakres identyfikatorów do jednej aktualizacji za pomocą funkcji obsługi polecenia ON_UPDATE_COMMAND_UI_RANGE makro.Identyfikatory poleceń muszą stanowić ciągły zakres.Przykładem, zobacz OnUpdateZoom obsługi i jego ON_UPDATE_COMMAND_UI_RANGE wpisu mapy wiadomości próbki HIERSVR widoku klasy.

Aktualizuj funkcje obsługi dla pojedynczego polecenia normalnie mieć jeden parametr, pCmdUI, typu CCmdUI *.W przeciwieństwie do funkcji obsługi funkcje obsługi aktualizacji dla zakresów mapę wiadomości nie wymagają dodatkowego parametru nID, typu UINT.Identyfikator polecenia, który jest potrzebny, aby określić, które polecenia użytkownik faktycznie zdecydował, znajduje się w CCmdUI obiektu.

Przykład dla identyfikatorów zakresu kontroli

Innym przypadku interesujące jest mapowania pojedynczego programu obsługi wiadomości powiadomień kontroli w zakresie kontroli identyfikatory.Załóżmy, że użytkownik może kliknąć jeden z przycisków 10.Aby mapować wszystkie przyciski 10 do obsługi jednego, wpis mapy komunikatu będzie wyglądać następująco:

ON_CONTROL_RANGE(BN_CLICKED, IDC_BUTTON1, IDC_BUTTON10, OnButtonClicked)    

Gdy piszesz ON_CONTROL_RANGE określić makro na mapie wiadomości:

  • Szczególnym komunikat z powiadomieniem kontroli.

    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.

Podczas pisania funkcji obsługi określenie dodatkowych 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ści nie ma parametrów.Tej samej obsługi dla zakresu przyciski przyjmuje jedną UINT.Dodatkowy parametr umożliwia identyfikowanie określonego formantu odpowiedzialny za wygenerowanie BN_CLICKED wiadomości.

Kod, w przykładzie jest typowy: konwertowanie wartości przekazywane do int w ramach zakresu wiadomości i potwierdzające, że dotyczy to.Następnie może zająć niektóre różne działania, w zależności od tego, który przycisk został kliknięty.

Zobacz też

Koncepcje

Deklarowanie funkcje obsługi wiadomości