int CMyGridView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; CRect rectClient; GetClientRect (rectClient); m_pMyGridCtrl =NULL; m_pMyGridCtrl = new CMyGridCtrl; if (m_pMyGridCtrl == NULL) { ASSERT (FALSE); return -1; } ASSERT_VALID (m_pMyGridCtrl); if (!m_pMyGridCtrl->Create (WS_CHILD, rectClient, this, 1)) { ASSERT (FALSE); return -1; } m_pMyGridCtrl->ShowWindow(SW_SHOW); return 0; }
对于尺寸变化时对格子进行调整void CMyGridView::OnDestroy() { if (m_pMyGridCtrl->GetSafeHwnd () != NULL) { m_pMyGridCtrl->DestroyWindow (); delete m_pMyGridCtrl; } m_pMyGridCtrl = NULL; CBCGPGridView::OnDestroy(); }
当view获取焦点时将焦点交给gridvoid CMyGridView::OnSize(UINT nType, int cx, int cy) { CView::OnSize(nType, cx, cy); AdjustLayout (); } void CMyGridView::AdjustLayout () { if (m_pMyGridCtrl->GetSafeHwnd () == NULL) { return; } CRect rectClient; GetClientRect (rectClient); m_pMyGridCtrl->SetWindowPos (NULL, 0, 0, rectClient.Width (), rectClient.Height (), SWP_NOACTIVATE | SWP_NOZORDER); }
在grid继承类中做如下修改:void CMyGridView::OnSetFocus(CWnd* pOldWnd) { CBCGPGridView::OnSetFocus(pOldWnd); if (m_pMyGridCtrl->GetSafeHwnd () != NULL) { m_pMyGridCtrl->SetFocus (); } }
以上调用 InsertGroupColumn 开启分组功能int CMyGridCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CBCGPGridCtrl::OnCreate(lpCreateStruct) == -1) return -1; /*EnableMarkSortedColumn (TRUE, FALSE); EnableHeader (TRUE, BCGP_GRID_HEADER_MOVE_ITEMS | BCGP_GRID_HEADER_SORT); EnableRowHeader (TRUE); EnableLineNumbers (); EnableInvertSelOnCtrl ();*/ InsertGroupColumn (0, 0); // SetReadOnly (); return 0; }
这两个方法,在 CBCGPGridCtrl会进行调用。int CMyGridCtrl::CompareGroup (const CBCGPGridRow* pRow1, const CBCGPGridRow* pRow2, int iColumn) { ASSERT_VALID (this); ASSERT_VALID (pRow1); ASSERT_VALID (pRow2);
long lVal1 = (long) pRow1->GetItem (0)->GetValue (); long lVal2 = (long) pRow2->GetItem (0)->GetValue (); return lVal1 / 10 * 10 - lVal2 / 10 * 10;
}
CString CMyGridCtrl::GetGroupName (int /*iColumn*/, CBCGPGridItem* pItem) { ASSERT_VALID (this); ASSERT_VALID (pItem); long lVal = (long) pItem->GetValue (); long lMin = lVal / 10 * 10; long lMax = lMin + 9; CString str; str.Format (_T("Range: [%d - %d]"), lMin, lMax); return str; }