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
CView
functionOnInitialUpdate
, create a newCGridCtrl
object if them_pGrid
is not NULL, and then create theCGridCtrl
window: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_SIZE
message for the view and edit theOnSize
function 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
OnCmdMsg
overide to your view class and let the grid control have first go at the messages (this will allow commands such asID_EDIT_COPY
to 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.