Kontrollerde oluşan mesajları işlemek için kontrollere özgü mesaj makroları vardır. Bu mesaj makrolarının hepsi iki parametrelidir. Birinci parametreleri kontrolün ID değeri, ikinci parametreleri çağrılacak fonksiyondur. Çağrılacak fonksiyonun geri dönüş değeri ve parametresi void olmak zorundadır. Örneğin ID_BUTTON ID değerine sahip bir push button kontrolüne click yapıldığında OnButtonClick isimli üye fonksiyonun çağrılmasını isteyelim. Mesaj makrosu şöyle yazılacaktır:
ON_BN_CLICKED(ID_BUTTON, OnButtonClick)
Burada olduğu gibi her türlü kontrol için ve her türlü işlem için özel bir WM_COMMAND mesaj makrosu vardır.
ON_COMMAND ve bütün kontrol makroları mesaj harita dizisine aslında WM_COMMAND mesajını yerleştirmektedir. Ancak ON_COMMAND makrosunda HIWORD(wParam) koşulu aranmaz. Halbuki kontrollere özgü makrolarda HIWORD(wParam) kontrolü de yapılmaktadır.
Sınıf Çalışması
İskelet MFC programını kullanarak pencerenin sol üst köşesine “Ok” yazılı bir push button yerleştiriniz. Bu push button’a click yapıldığında MessageBox fonksiyonu ile durumu bildiriniz. Bu işlemi önce ON_BN_CLICKED mesaj makrosu ile, sonra OnCommand sanal fonksiyonu ile, sonra da her ikisiyle işleyiniz.
PUSHBUTTON1.H
#ifndef _PUSHBUTTON_H_
#define _PUSHBUTTON_H_
#define ID_BUTTON 100
class CGenericApp : public CWinApp {
public:
virtual BOOL InitInstance(void);
};
class CMainWnd : public CFrameWnd {
public:
CMainWnd(void);
private:
CButton m_button;
public:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnButtonClick();
DECLARE_MESSAGE_MAP()
};
#endif
PUSHBUTTON1.CPP
#include
#include “pushbutton1.h”
BEGIN_MESSAGE_MAP(CMainWnd, CFrameWnd)
ON_WM_CREATE()
ON_BN_CLICKED(ID_BUTTON, OnButtonClick)
END_MESSAGE_MAP()
CGenericApp theApp;
BOOL CGenericApp::InitInstance(void)
{
m_pMainWnd = new CMainWnd();
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}
CMainWnd::CMainWnd(void)
{
Create(NULL, “Generic MFC Application”, WS_OVERLAPPEDWINDOW);
}
int CMainWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
m_button.Create(”Ok”, WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
CRect(10, 10, 100, 40), this, ID_BUTTON);
return 0;
}
void CMainWnd::OnButtonClick()
{
MessageBox(”Push button’a click yapıldı”);
}
