Using the GridCtrl in a View | CodeGuru

Using the GridCtrl in a View

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: Add a member variable of type CGridCtrl* to your view class: CGridCtrl* m_pGrid; Initialise this […]

Written By
CodeGuru Staff
CodeGuru Staff
Aug 5, 1998
1 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

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:

    CMyView::CMyView
    {
        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:

    CMyView::OnInitialUpdate
    {
        CView::OnInitialUpdate();

    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
    GetClientRect(rect);
    m_pGridCtrl->Create(rect, this, 100);

    m_pGridCtrl->SetRowCount(50); // fill it up with stuff
    m_pGridCtrl->SetColumnCount(10);

    // … 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:
    CMyView::~CMyView
    {
        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

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.