MFC - Wiadomości i wydarzenia
Aplikacja składa się z różnych obiektów. W większości przypadków na komputerze działa więcej niż jedna aplikacja, a system operacyjny jest stale proszony o wykonanie niektórych zadań. Ponieważ może być tak wiele żądań prezentowanych w nieprzewidywalny sposób, system operacyjny pozostawia obiektom określenie, czego chcą, kiedy chcą i jakiego zachowania lub wyniku oczekują.
Przegląd
System operacyjny Microsoft Windows nie jest w stanie przewidzieć, jakiego rodzaju żądania jeden obiekt będzie wymagał obsługi i jakiego rodzaju przypisania będzie potrzebny inny obiekt.
Aby zarządzać wszystkimi przydziałami i żądaniami, obiekty wysyłają wiadomości.
Każdy obiekt ma obowiązek zdecydować, jaką wiadomość wysłać i kiedy.
Aby wysłać wiadomość, formant musi utworzyć zdarzenie.
Aby dokonać rozróżnienia między nimi, nazwa wiadomości zwykle zaczyna się od WM_, co oznacza komunikat okna.
Nazwa zdarzenia zwykle zaczyna się od On, co oznacza akcję.
Zdarzenie to akcja wysyłania wiadomości.
Mapa wiadomości
Ponieważ Windows jest systemem operacyjnym zorientowanym na komunikaty, duża część programowania w środowisku Windows obejmuje obsługę komunikatów. Za każdym razem, gdy wystąpi zdarzenie, takie jak naciśnięcie klawisza lub kliknięcie myszą, do aplikacji wysyłana jest wiadomość, która następnie musi obsłużyć to zdarzenie.
Aby kompilator mógł zarządzać komunikatami, należy je uwzględnić w definicji klasy.
Plik DECLARE_MESSAGE_MAP makro powinno znajdować się na końcu definicji klasy, jak pokazano w poniższym kodzie.
class CMainFrame : public CFrameWnd {
public:
CMainFrame();
protected:
DECLARE_MESSAGE_MAP()
};
Rzeczywiste komunikaty powinny być wymienione tuż nad wierszem DECLARE_MESSAGE_MAP.
Aby zaimplementować komunikaty, musisz utworzyć tabelę komunikatów, których używa twój program.
W tej tabeli są używane dwa makra ograniczające;
Zaczyna się od BEGIN_MESSAGE_MAP i kończy się na END_MESSAGE_MAP makra.
Makro BEGIN_MESSAGE_MAP przyjmuje dwa argumenty, nazwę klasy i klasę MFC, z której wyprowadzono klasę, jak pokazano w poniższym kodzie.
#include <afxwin.h>
class CMainFrame : public CFrameWnd {
public:
CMainFrame();
protected:
DECLARE_MESSAGE_MAP()
};
CMainFrame::CMainFrame() {
// Create the window's frame
Create(NULL, L"MFC Messages Demo", WS_OVERLAPPEDWINDOW,
CRect(120, 100, 700, 480), NULL);
}
class CMessagesApp : public CWinApp {
public:
BOOL InitInstance();
};
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
END_MESSAGE_MAP()
BOOL CMessagesApp::InitInstance(){
m_pMainWnd = new CMainFrame;
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
return TRUE;
}
CMessagesApp theApp;
Spójrzmy na prosty przykład, tworząc nowy projekt Win32.
Step 1 - Aby utworzyć projekt MFC, kliknij projekt prawym przyciskiem myszy i wybierz opcję Właściwości.
Step 2 - W lewej sekcji kliknij Właściwości konfiguracji → Ogólne.
Step 3 - Wybierz opcję „Użyj MFC w udostępnionej bibliotece DLL” w sekcji Ustawienia domyślne projektu i kliknij przycisk OK.
Step 4 - Musimy dodać nowy plik źródłowy.
Step 5 - Kliknij prawym przyciskiem myszy projekt i wybierz Dodaj → Nowy element.
Step 6 - W sekcji Szablony kliknij opcję Plik C ++ (.cpp).
Step 7 - Kliknij Dodaj, aby kontynuować.
Step 8 - Teraz dodaj następujący kod w pliku * .cpp.
#include <afxwin.h>
class CMainFrame : public CFrameWnd {
public:
CMainFrame();
protected:
DECLARE_MESSAGE_MAP()
};
CMainFrame::CMainFrame() {
// Create the window's frame
Create(NULL, L"MFC Messages Demo", WS_OVERLAPPEDWINDOW,
CRect(120, 100, 700, 480), NULL);
}
class CMessagesApp : public CWinApp {
public:
BOOL InitInstance();
};
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
END_MESSAGE_MAP()
BOOL CMessagesApp::InitInstance() {
m_pMainWnd = new CMainFrame;
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
return TRUE;
}
CMessagesApp theApp;
Wiadomości systemu Windows
Istnieją różne typy komunikatów systemu Windows, takie jak tworzenie okna, wyświetlanie okna itp. Oto niektóre z najczęściej używanych komunikatów systemu Windows.
Wiadomość | Wpis na mapie | Opis |
---|---|---|
WM_ACTIVATE | ON_WM_ACTIVATE () | Framework wywołuje tę funkcję członkowską, gdy obiekt CWnd jest aktywowany lub dezaktywowany. |
WM_ACTIVATEA PP | ON_WM_ACTIVATEAPP () | Struktura wywołuje tę funkcję członkowską we wszystkich oknach najwyższego poziomu aktywowanego zadania i we wszystkich oknach najwyższego poziomu dezaktywowanego zadania. |
WM_APPCOMM AND | ON_WM_APPCOMMAND () | Struktura wywołuje tę funkcję członkowską, gdy użytkownik generuje zdarzenie polecenia aplikacji. |
WM_CANCELMODE | WM_CANCELMODE () | Struktura wywołuje tę funkcję członkowską, aby poinformować CWnd o anulowaniu dowolnego trybu wewnętrznego. |
WM_CHILDACTIVATE | ON_WM_CHILDACTIVATE () | Jeśli obiekt CWnd jest oknem potomnym interfejsu wielu dokumentów (MDI), OnChildActivate jest wywoływana przez strukturę, gdy użytkownik kliknie pasek tytułu okna lub gdy okno jest aktywowane, przenoszone lub zmieniane. |
WM_CLIPBOAR DUPDATE | ON_WM_CLIPBOARDUPDATE () | Struktura wywołuje tę funkcję członkowską, gdy zawartość schowka uległa zmianie. |
WM_CLOSE | ON_WM_CLOSE () | Struktura wywołuje tę funkcję członkowską jako sygnał, że CWnd lub aplikacja ma zakończyć działanie. |
WM_CONTEXTMENU | ON_WM_CONTEXTMENU () | Wywoływane przez framework, gdy użytkownik kliknął prawym przyciskiem myszy (prawy przycisk myszy) w oknie. |
WM_COPYDATA | ON_WM_COPYDATA () | Ta funkcja członkowska jest wywoływana przez platformę w celu kopiowania danych z jednej aplikacji do drugiej. |
WM_CREATE | ON_WM_CREATE () | Struktura wywołuje tę funkcję członkowską, gdy aplikacja żąda utworzenia okna systemu Windows, wywołując funkcję członkowską Create lub CreateEx. |
WM_CTLCOLOR | ON_WM_CTLCOLOR () | Struktura wywołuje tę funkcję członkowską, gdy ma zostać narysowana formant podrzędny. |
WM_DELETEITEM | ON_WM_DELETEITEM () | Struktura wywołuje tę funkcję członkowską, aby poinformować właściciela pola listy rysowanej przez właściciela lub pola kombi, że pole listy lub pole kombi są zniszczone lub że elementy zostały usunięte. |
WM_DESTROY | ON_WM_DESTROY () | Framework wywołuje tę funkcję składową, aby poinformować obiekt CWnd, że jest on niszczony. |
WM_DRAWITEM | ON_WM_DRAWITEM () | Struktura wywołuje tę funkcję członkowską dla właściciela kontrolki przycisku rysowania przez właściciela, kontrolki pola kombi, kontrolki pola listy lub menu, gdy zmienił się aspekt wizualny kontrolki lub menu. |
WM_DROPFILES | ON_WM_DROPFILES () | Struktura wywołuje tę funkcję członkowską, gdy użytkownik zwolni lewy przycisk myszy nad oknem, które zarejestrowało się jako odbiorca upuszczonych plików. |
WM_ENABLE | ON_WM_ENABLE () | Struktura wywołuje tę funkcję członkowską, gdy aplikacja zmienia włączony stan obiektu CWnd. Składnia. |
WM_HELPINFO | ON_WM_HELPINFO () | Obsługuje Pomoc F1 w aplikacji (przy użyciu bieżącego kontekstu). |
WM_HOTKEY | ON_WM_HOTKEY () | Struktura wywołuje tę funkcję członkowską, gdy użytkownik naciśnie klawisz skrótu dla całego systemu. |
WM_HSCROLL | ON_WM_HSCROLL () | Struktura wywołuje tę funkcję członkowską, gdy użytkownik kliknie poziomy pasek przewijania okna. |
WM_KEYDOWN | ON_WM_KEYDOWN () | Struktura wywołuje tę funkcję składową po naciśnięciu klawisza niesystemowego. |
WM_KEYUP | ON_WM_KEYUP () | Struktura wywołuje tę funkcję członkowską po zwolnieniu klucza niesystemowego. |
WM_KILLFOCUS | ON_WM_KILLFOCUS () | Struktura wywołuje tę funkcję członkowską bezpośrednio przed utratą fokusu wprowadzania. |
WM_LBUTTONDBLCLK | ON_WM_LBUTTONDBLCLK () | Struktura wywołuje tę funkcję członkowską, gdy użytkownik kliknie dwukrotnie lewy przycisk myszy. |
WM_LBUTTONDOWN | ON_WM_LBUTTONDOWN () | Framework wywołuje tę funkcję członkowską, gdy użytkownik naciśnie lewy przycisk myszy. |
WM_LBUTTONUP | ON_WM_LBUTTONUP () | Framework wywołuje tę funkcję członkowską, gdy użytkownik zwolni lewy przycisk myszy. |
WM_MBUTTONDBLCLK | ON_WM_MBUTTONDBLCLK () | Struktura wywołuje tę funkcję członkowską, gdy użytkownik kliknie dwukrotnie środkowy przycisk myszy. |
WM_MBUTTONDOWN | ON_WM_MBUTTONDOWN () | Struktura wywołuje tę funkcję członkowską, gdy użytkownik naciśnie środkowy przycisk myszy. |
WM_MBUTTONUP | ON_WM_MBUTTONUP () | Struktura wywołuje tę funkcję członkowską, gdy użytkownik zwolni środkowy przycisk myszy. |
WM_MENUSELECT | ON_WM_MENUSELECT () | Jeśli obiekt CWnd jest skojarzony z menu, OnMenuSelect jest wywoływana przez środowisko, gdy użytkownik wybierze element menu. |
WM_MOUSEACTIVATE | ON_WM_MOUSEACTIVATE () | Struktura wywołuje tę funkcję członkowską, gdy kursor znajduje się w nieaktywnym oknie, a użytkownik naciśnie przycisk myszy. |
WM_MOUSEHOVER | ON_WM_MOUSEHOVER () | Struktura wywołuje tę funkcję członkowską, gdy kursor znajduje się nad obszarem roboczym okna przez czas określony we wcześniejszym wywołaniu TrackMouseEvent. |
WM_MOUSEHWHEEL | ON_WM_MOUSEHWHEEL () | Struktura wywołuje ten element członkowski, gdy bieżące okno jest tworzone przez Menedżera okien pulpitu (DWM), a okno jest zmaksymalizowane. |
WM_MOUSELEAVE | ON_WM_MOUSELEAVE () | Struktura wywołuje tę funkcję członkowską, gdy kursor opuszcza obszar roboczy okna określonego we wcześniejszym wywołaniu TrackMouseEvent. |
WM_MOUSEMOVE | ON_WM_MOUSEMOVE () | Struktura wywołuje tę funkcję członkowską, gdy porusza się kursor myszy. |
WM_MOVE | ON_WM_MOVE () | Framework wywołuje tę funkcję członkowską po przeniesieniu obiektu CWnd. |
WM_PAINT | ON_WM_PAINT () | Struktura wywołuje tę funkcję członkowską, gdy system Windows lub aplikacja żąda przemalowania części okna aplikacji. |
WM_SETFOCUS () | ON_WM_SETFOCUS () | Struktura wywołuje tę funkcję członkowską po uzyskaniu fokusu wejściowego. |
WM_SIZE () | ON_WM_SIZE () | Struktura wywołuje tę funkcję członkowską po zmianie rozmiaru okna. |
WM_TIMER | ON_WM_TIMER () | Struktura wywołuje tę funkcję składową po każdym interwale określonym w funkcji składowej SetTimer używanej do zainstalowania licznika czasu. |
WM_VSCROLL | ON_WM_VSCROLL () | Struktura wywołuje tę funkcję członkowską, gdy użytkownik kliknie pionowy pasek przewijania okna. |
WM_WINDOWPOSCHANGED | ON_WM_WINDOWPOSCHANGED () | Struktura wywołuje tę funkcję składową, gdy rozmiar, pozycja lub kolejność Z uległy zmianie w wyniku wywołania funkcji składowej SetWindowPos lub innej funkcji zarządzania oknami. |
Spójrzmy na prosty przykład tworzenia okien.
WM_CREATE - Kiedy tworzony jest obiekt zwany oknem, ramka tworząca obiekty wysyła komunikat identyfikowany jako ON_WM_CREATE.
Step 1- Aby utworzyć ON_WM_CREATE, dodaj afx_msg int OnCreate (LPCREATESTRUCT lpCreateStruct); przed DECLARE_MESSAGE_MAP (), jak pokazano poniżej.
class CMainFrame : public CFrameWnd {
public:
CMainFrame();
protected:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
DECLARE_MESSAGE_MAP()
};
Step 2 - Dodaj ON_WM_CREATE () po BEGIN_MESSAGE_MAP (CMainFrame, CFrameWnd) i przed END_MESSAGE_MAP ()
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_CREATE()
END_MESSAGE_MAP()
Step 3 - Oto implementacja OnCreate ()
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {
// Call the base class to create the window
if (CFrameWnd::OnCreate(lpCreateStruct) == 0) {
// If the window was successfully created, let the user know
MessageBox(L"The window has been created!!!");
// Since the window was successfully created, return 0
return 0;
}
// Otherwise, return -1
return -1;
}
Step 4 - Teraz twój plik * .cpp będzie wyglądał jak w poniższym kodzie.
#include <afxwin.h>
class CMainFrame : public CFrameWnd {
public:
CMainFrame();
protected:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
DECLARE_MESSAGE_MAP()
};
CMainFrame::CMainFrame() {
// Create the window's frame
Create(NULL, L"MFC Messages Demo", WS_OVERLAPPEDWINDOW,
CRect(120, 100, 700, 480), NULL);
}
class CMessagesApp : public CWinApp {
public:
BOOL InitInstance();
};
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_CREATE()
END_MESSAGE_MAP()
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {
// Call the base class to create the window
if (CFrameWnd::OnCreate(lpCreateStruct) == 0) {
// If the window was successfully created, let the user know
MessageBox(L"The window has been created!!!");
// Since the window was successfully created, return 0
return 0;
}
// Otherwise, return -1
return -1;
}
BOOL CMessagesApp::InitInstance() {
m_pMainWnd = new CMainFrame;
m_pMainWnd -> ShowWindow(SW_SHOW);
m_pMainWnd -> UpdateWindow();
return TRUE;
}
CMessagesApp theApp;
Step 5 - Gdy powyższy kod zostanie skompilowany i wykonany, zobaczysz następujące dane wyjściowe.
Step 6 - Po kliknięciu OK wyświetli się okno główne.
Komunikaty poleceń
Jedną z głównych cech aplikacji graficznej jest prezentacja elementów sterujących i zasobów systemu Windows, które pozwalają użytkownikowi na interakcję z maszyną. Przykłady kontrolek, których się nauczymy, to przyciski, pola listy, pola kombi itp.
Jednym z rodzajów zasobów, które przedstawiliśmy w poprzedniej lekcji, jest menu. Takie kontrolki i zasoby mogą inicjować własne wiadomości, gdy użytkownik je kliknie. Komunikat pochodzący z kontrolki lub zasobu systemu Windows nazywany jest komunikatem polecenia.
Przyjrzyjmy się prostemu przykładowi komunikatów poleceń.
Aby zapewnić aplikacji możliwość tworzenia nowego dokumentu, klasa CWinApp udostępnia metodę OnFileNew ().
afx_msg void OnFileNew();
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_COMMAND(ID_FILE_NEW, CMainFrame::OnFileNew)
END_MESSAGE_MAP()
Oto definicja metody -
void CMainFrame::OnFileNew() {
// Create New file
}
Komunikaty klawiatury
ZA keyboardto obiekt sprzętowy podłączony do komputera. Domyślnie służy do wprowadzania rozpoznawalnych symboli, liter i innych znaków w kontrolce. Każdy klawisz na klawiaturze wyświetla symbol, literę lub ich kombinację, aby wskazać, do czego można użyć klawisza. Użytkownik zazwyczaj naciska klawisz, który wysyła sygnał do programu.
Każdy klucz ma kod rozpoznawany przez system operacyjny. Ten kod jest znany jakovirtual key code.
Sr.No. | Stała / wartość i opis |
---|---|
1 | VK_LBUTTON Lewy przycisk myszy |
2 | VK_RBUTTON Prawy przycisk myszy |
3 | VK_CANCEL Przetwarzanie z przerwami kontrolnymi |
4 | VK_MBUTTON Środkowy przycisk myszy (mysz z trzema przyciskami) |
5 | VK_BACK Klawisz BACKSPACE |
6 | VK_RETURN Przycisk ENTER |
7 | VK_TAB Klawisz TAB |
8 | VK_CLEAR Klawisz CLEAR |
9 | VK_SHIFT Klawisz Shift |
10 | VK_CONTROL Klawisz CTRL |
11 | VK_MENU Klawisz Alt |
12 | VK_PAUSE Klawisz PAUSE |
13 | VK_CAPITAL Klawisz CAPS LOCK |
14 | VK_ESCAPE Klawisz ESC |
15 | VK_SPACE SPACJA |
16 | VK_PRIOR Klawisz PAGE UP |
17 | VK_NEXT Klawisz PAGE DOWN |
18 | VK_END Klawisz END |
19 | VK_HOME Klawisz HOME |
20 | VK_LEFT Klawisz STRZAŁKA W LEWO |
21 | VK_UP Klawisz STRZAŁKI W GÓRĘ |
22 | VK_RIGHT Klawisz STRZAŁKI W PRAWO |
23 | VK_DOWN Klawisz STRZAŁKA W DÓŁ |
24 | VK_SELECT Klawisz SELECT |
25 | VK_PRINT Klawisz PRINT |
26 | VK_EXECUTE Klawisz EXECUTE |
27 | VK_SNAPSHOT Przycisk PRINT SCREEN |
28 | VK_INSERT Klucz INS |
29 | VK_DELETE Klawisz DEL |
30 | VK_NUMPAD0 Klawisz 0 na klawiaturze numerycznej |
31 | VK_NUMPAD1 Klawisz 1 klawiatury numerycznej |
32 | VK_NUMPAD2 Klawisz 2 klawiatury numerycznej |
33 | VK_NUMPAD3 Klawisz 3 klawiatury numerycznej |
34 | VK_NUMPAD4 Klawisz 4 klawiatury numerycznej |
35 | VK_NUMPAD5 Klawisz 5 klawiatury numerycznej |
36 | VK_NUMPAD6 Klawisz 6 klawiatury numerycznej |
37 | VK_NUMPAD7 Klawisz 7 klawiatury numerycznej |
38 | VK_NUMPAD8 Klawisz 8 klawiatury numerycznej |
39 | VK_NUMPAD9 Klawisz 9 klawiatury numerycznej |
40 | VK_MULTIPLY Pomnóż klucz |
41 | VK_ADD Dodaj klucz |
42 | VK_SEPARATOR Klucz separatora |
43 | VK_SUBTRACT Odejmij klucz |
44 | VK_DECIMAL Klucz dziesiętny |
45 | VK_DIVIDE Klucz podziału |
46 | VK_F1 Klawisz F1 |
47 | VK_F2 Klawisz F2 |
48 | VK_F3 Klawisz F3 |
49 | VK_F4 Klawisz F4 |
50 | VK_F5 Klawisz F5 |
52 | VK_F6 Klawisz F6 |
53 | VK_F7 Klawisz F7 |
54 | VK_F8 Klawisz F8 |
55 | VK_F9 Klawisz F9 |
56 | VK_F10 Klawisz F10 |
57 | VK_F11 Klawisz F11 |
58 | VK_F12 Klawisz F12 |
59 | VK_NUMLOCK Klawisz NUM LOCK |
60 | VK_SCROLL Klawisz SCROLL LOCK |
61 | VK_LSHIFT Lewy klawisz SHIFT |
62 | VK_RSHIFT Prawy klawisz SHIFT |
63 | VK_LCONTROL Lewy klawisz CONTROL |
64 | VK_RCONTROL Prawy klawisz CONTROL |
Naciśnięcie klawisza powoduje umieszczenie wiadomości WM_KEYDOWN lub WM_SYSKEYDOWN w wiadomości wątku. Można to zdefiniować w następujący sposób -
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
Spójrzmy na prosty przykład.
Step 1 - Oto wiadomość.
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_CREATE()
ON_WM_KEYDOWN()
END_MESSAGE_MAP()
Step 2 - Oto implementacja OnKeyDown ().
void CMainFrame::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) {
switch (nChar) {
case VK_RETURN:
MessageBox(L"You pressed Enter");
break;
case VK_F1:
MessageBox(L"Help is not available at the moment");
break;
case VK_DELETE:
MessageBox(L"Can't Delete This");
break;
default:
MessageBox(L"Whatever");
}
}
Step 3 - Gdy powyższy kod zostanie skompilowany i wykonany, zobaczysz następujące dane wyjściowe.
Step 4 - Po naciśnięciu klawisza Enter wyświetli się następujący komunikat.
Wiadomości myszy
Mysz to kolejny obiekt, który jest podłączony do komputera i umożliwia użytkownikowi interakcję z maszyną.
Jeśli naciśnięto lewy przycisk myszy, wysyłana jest wiadomość ON_WM_LBUTTONDOWN. Składnia tej wiadomości to -
afx_msg void OnLButtonDown (UINT nFlags, punkt CPoint)
Jeśli został naciśnięty prawy przycisk myszy, wysyłana jest wiadomość ON_WM_RBUTTONDOWN. Jego składnia to -
afx_msg void OnRButtonDown (UINT nFlags, punkt CPoint)
Podobnie, jeśli lewy przycisk myszy jest zwalniany, wysyłany jest komunikat ON_WM_LBUTTONUP. Jego składnia to -
afx_msg void OnLButtonUp (UINT nFlags, punkt CPoint)
W przypadku zwolnienia prawego przycisku myszy wysyłany jest komunikat ON_WM_TBUTTONUP. Jego składnia to -
afx_msg void OnRButtonUp (UINT nFlags, punkt CPoint)
Spójrzmy na prosty przykład.
Step 1 - Dodaj następujące dwie funkcje w definicji klasy CMainFrame, jak pokazano w poniższym kodzie.
class CMainFrame : public CFrameWnd {
public:
CMainFrame();
protected:
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
DECLARE_MESSAGE_MAP()
};
Step 2 - Dodaj następujące dwie mapy wiadomości.
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_KEYDOWN()
ON_WM_LBUTTONDOWN()
ON_WM_RBUTTONUP()
END_MESSAGE_MAP()
Step 3 - Oto definicja funkcji.
void CMainFrame::OnLButtonDown(UINT nFlags, CPoint point) {
CString MsgCoord;
MsgCoord.Format(L"Left Button at P(%d, %d)", point.x, point.y);
MessageBox(MsgCoord);
}
void CMainFrame::OnRButtonUp(UINT nFlags, CPoint point) {
MessageBox(L"Right Mouse Button Up");
}
Step 4 - Po uruchomieniu tej aplikacji zobaczysz następujące dane wyjściowe.
Step 5 - Po kliknięciu OK zostanie wyświetlony następujący komunikat.
Step 6- Kliknij prawym przyciskiem myszy to okno. Teraz, gdy zwolnisz prawy przycisk myszy, wyświetli się następujący komunikat.