Programy obsługi dla standardowych komunikatów systemu Windows
Domyślne programy obsługi dla standardowych komunikatów systemu Windows (WM_) są wstępnie zdefiniowane w klasie CWnd.Biblioteka klas opiera nazw dla tych programów obsługi na nazwę komunikatu.Na przykład programu obsługi dla WM_PAINT wiadomości jest zadeklarowany w CWnd jako:
afx_msg void OnPaint();
Afx_msg słowa kluczowego sugeruje efekt C++ wirtualnego słowa kluczowego, wyróżniając programów obsługi innych CWnd funkcji elementów członkowskich.Należy jednak zauważyć, funkcje te nie są faktycznie wirtualnych; Zamiast tego są implementowane za pomocą mapy wiadomości.Mapy wiadomości wyłącznie zależą od standardowego preprocesora makra, nie na wszystkich rozszerzeń języka C++.Afx_msg słowa kluczowego rozpoznawany jako odstęp po wstępnego przetwarzania.
Aby zastąpić obsługi, zdefiniowane w klasie bazowej, po prostu zdefiniować funkcję z samym prototypu w klasie pochodnej i dokonania wpisu mapy wiadomości obsługi.Twój program obsługi "zastępuje" wszelkie obsługi tej samej nazwie w dowolnym z klas podstawowych swojej klasy.
W niektórych przypadkach Twój program obsługi powinny wywołania obsługi przesłonięte w klasie bazowej tak klasy podstawowej i system Windows może działać na wiadomość.Gdy wywołania obsługi klasa bazowa w sieci override zależy od okoliczności.Czasami musi najpierw wywoływać program klasa bazowa i czasami ostatniego.Czasami wywołania obsługi klasa bazowa warunkowo, jeżeli nie chcesz samodzielnie obsługi wiadomości.Czasami powinna wywoływać program klasa bazowa wówczas warunkowo wykonanie własnego kodu obsługi, w zależności od wartości lub Państwo zwracane przez program obsługi klasa bazowa.
Przestroga |
---|
Nie jest bezpieczne zmodyfikować argumentów przekazywanych do programu obsługi, jeśli zamierzasz przekazać je do obsługi klas bazowych.Na przykład, może być skłonny do modyfikowania nChar argumentu OnChar obsługi (Aby przekonwertować na wielkie litery, na przykład).To zachowanie jest dość niejasne, ale należy wykonać w tym celu użyć CWnd Członkowskich funkcji SendMessage zamiast. |
Jak ustalić właściwy sposób, aby zastąpić danej wiadomości?Kiedy okno właściwości zapisuje szkielet funkcji obsługi dla danej wiadomości — OnCreate obsługi WM_CREATE, na przykład — naszkicowany go w postaci funkcji zalecane Członkowskie przesłonięte.Poniższy przykład zaleca obsługi najpierw wywołania obsługi klasy base i kontynuować tylko pod warunkiem, że nie zwraca –1.
int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFormView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
return 0;
}
Przez Konwencję nazwy te programy obsługi rozpocząć z prefiksem "On". Niektóre z tych programów obsługi nie wymaga żadnych argumentów, podczas gdy inne kilka.Niektóre również mają typ zwracany innych niż void.Programy obsługi domyślne dla wszystkich WM_ komunikaty są udokumentowane w Odniesienia MFC jako funkcje składowe klasy CWnd których nazwy zaczynają "On". Deklaracje funkcji Członkowskich w CWnd z prefiksem afx_msg.