В прошлом шаге мы вставили класс 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"); }
Запускаем и смотрим: