Шаг 365 - Класс вида GRID и обработка извещений

В прошлом шаге мы вставили класс GRID в вид, нам нужно обрабатывать события и AppWizard здесь не помощник будем делать ручками. Объявляем в классе вида что у нас будут извещения.

class CTestViewGridView : public CView
{
protected: // create from serialization only
	CTestViewGridView();
	DECLARE_DYNCREATE(CTestViewGridView)
	DECLARE_EVENTSINK_MAP()
// Attributes
public:
	CTestViewGridDoc* GetDocument();

private:
	CMsDgridCtrl cmg;
// Operations
......
};

Реализуем эту таблицу обработки извещений.

BEGIN_EVENTSINK_MAP(CTestViewGridView, CView)
  	ON_EVENT(CMsDgridCtrl, IDC_DBGRID1, -602 /* KeyDown */, OnKeyDownDbgrid1, VTS_PI2 VTS_I2)
END_EVENTSINK_MAP()

Первый параметр это класс, второй идентификатор элемента, его нужно использовать в Create.

int CTestViewGridView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	CRect rc;
	GetClientRect(&rc);
	cmg.Create(_T("STATIC"), "Hi", WS_CHILD | WS_VISIBLE, CRect(0, 0, 400, 200), this, IDC_DBGRID1);
	cmg.ShowWindow(SW_SHOW); 
	return 0;
}

Дальше идет номер метода, откуда его брать. Проше всего сделать как в "Шаг 363 - Обработка событий DBGRID в VC", получить эту строку и перенести в проект класса с видом. Вообщем передрать можно все кстати и описание функции реакции.

class CTestViewGridView : public CView
{
protected: // create from serialization only
	CTestViewGridView();
	DECLARE_DYNCREATE(CTestViewGridView)
	DECLARE_EVENTSINK_MAP()
// Attributes
public:
......
public:
	afx_msg void OnKeyDownDbgrid1(short FAR* KeyCode, short Shift);
	virtual ~CTestViewGridView();
#ifdef _DEBUG
};

Ну и реализовать саму функцию

void CTestViewGridView::OnKeyDownDbgrid1(short FAR* KeyCode, short Shift)
{
	AfxMessageBox("OK");
}

Запускаем и смотрим:

365_1.gif (6206 b)


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.