A simple tutorial that demonstrates how to use the grid control in a doc/view application.
I have had many, MANY questions asking how to use my MFC grid control in a view instead of in a dialog, so hopefully this will help.
The easiest way as I see it is as follows:
-
Add a member variable of type
CGridCtrl*to your view class:CGridCtrl* m_pGrid;
-
Initialise this to NULL in your view class' constructor:
CMyView::CMyView { m_pGrid = NULL; } -
In the
CViewfunctionOnInitialUpdate, create a newCGridCtrlobject if them_pGridis not NULL, and then create theCGridCtrlwindow:CMyView::OnInitialUpdate { CView::OnInitialUpdate(); if (m_pGrid == NULL) // Have we already done this bit? { m_pGrid = new CGridCtrl; // Create the Gridctrl object if (!m_pGrid ) return; CRect rect; // Create the Gridctrl window GetClientRect(rect); m_pGrid->Create(rect, this, 100); m_pGrid->SetRowCount(50); // fill it up with stuff m_pGrid->SetColumnCount(10); // ... etc } }This allows the view to be reused (eg SDI situations).
-
We want the grid to take up the whole of the view's client space, so add a handler to the
WM_SIZEmessage for the view and edit theOnSizefunction thus:CMyView::OnSize(UINT nType, int cx, int cy) { CView::OnSize(nType, cx, cy); if (m_pGrid->GetSafeHwnd()) // Have the grid object and window { // been created yet? CRect rect; GetClientRect(rect); // Get the size of the view's client // area m_pGrid->MoveWindow(rect); // Resize the grid to take up that // space. } }
-
Remember to delete the object when you are done:
CMyView::~CMyView { delete m_pGrid; } -
You may want to also add an
OnCmdMsgoveride to your view class and let the grid control have first go at the messages (this will allow commands such asID_EDIT_COPYto be wired in automatically:BOOL CMyView::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) { if (m_pGrid && IsWindow(m_pGrid->m_hWnd)) if (m_pGrid->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo)) return TRUE; return CView::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo); }
If you want print preview, then check out Koay Kah Hoe's article Print Previewing without the Document/View Framework.
