Using the GridCtrl in a View


How to Help Your Business Become an AI Early Adopter

Download demo project.

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:

  1. Add a member variable of type CGridCtrl* to your view class:
    CGridCtrl* m_pGrid;

  2. Initialise this to NULL in your view class' constructor:
        m_pGrid = NULL;

  3. In the CView function OnInitialUpdate, create a new CGridCtrl object if the m_pGrid is not NULL, and then create the CGridCtrl window:
        if (m_pGrid == NULL)                    // Have we already done this bit?
            m_pGridCtrl = new CGridCtrl;        // Create the Gridctrl object
            if (!m_pGridCtrl) return;
            CRect rect;                         // Create the Gridctrl window
            m_pGridCtrl->Create(rect, this, 100);
            m_pGridCtrl->SetRowCount(50);        // fill it up with stuff
            // ... etc

    This allows the view to be reused (eg SDI situations).

  4. 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 the OnSize 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.
  5. Remember to delete the object when you are done:
        if (m_pGrid)
            delete m_pGrid;
  6. 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 as ID_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);

Last updated: 29 November 1998


  • There are no comments yet. Be the first to comment!

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • As all sorts of data becomes available for storage, analysis and retrieval - so called 'Big Data' - there are potentially huge benefits, but equally huge challenges...
  • The agile organization needs knowledge to act on, quickly and effectively. Though many organizations are clamouring for "Big Data", not nearly as many know what to do with it...
  • Cloud-based integration solutions can be confusing. Adding to the confusion are the multiple ways IT departments can deliver such integration...

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date