www.gusucode.com > VC++网格控件CGridCtrl演示程源代码-源码程序 > VC++网格控件CGridCtrl演示程源代码-源码程序\code\主控报表View.cpp
//Download by http://www.NewXing.com // 主控报表View.cpp : implementation of the CMyView class // #include "stdafx.h" #include "主控报表.h" #include "GridCtrl.h" #include "OwnWnd.h" #include "主控报表Doc.h" #include "主控报表View.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CMyView IMPLEMENT_DYNCREATE(CMyView, CView) BEGIN_MESSAGE_MAP(CMyView, CView) //{{AFX_MSG_MAP(CMyView) ON_WM_SIZE() //}}AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CMyView construction/destruction CMyView::CMyView() { // TODO: add construction code here m_pGridCtrl = NULL; m_ownwnd=NULL; } CMyView::~CMyView() { if (m_pGridCtrl) delete m_pGridCtrl; } BOOL CMyView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return CView::PreCreateWindow(cs); } ///////////////////////////////////////////////////////////////////////////// // CMyView drawing void CMyView::OnDraw(CDC* pDC) { CMyDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here } ///////////////////////////////////////////////////////////////////////////// // CMyView printing BOOL CMyView::OnPreparePrinting(CPrintInfo* pInfo) { // default preparation return DoPreparePrinting(pInfo); } void CMyView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add extra initialization before printing } void CMyView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add cleanup after printing } ///////////////////////////////////////////////////////////////////////////// // CMyView diagnostics #ifdef _DEBUG void CMyView::AssertValid() const { CView::AssertValid(); } void CMyView::Dump(CDumpContext& dc) const { CView::Dump(dc); } CMyDoc* CMyView::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDoc))); return (CMyDoc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CMyView message handlers BOOL CMyView::DestroyWindow() { // TODO: Add your specialized code here and/or call the base class return CView::DestroyWindow(); } void CMyView::OnInitialUpdate() { CView::OnInitialUpdate(); // TODO: Add your specialized code here and/or call the base class // TODO: Add your specialized code here and/or call the base class m_ownwnd=new COwnWnd(); CRect rect; GetClientRect(rect); rect.bottom=rect.top+rect.Height()/4+10; // rect.left=rect.left-80; m_ownwnd->Create(rect,this,200); CDC *pDC; if (m_pGridCtrl == NULL) { // 创建 Gridctrl 对象 m_pGridCtrl = new CGridCtrl; if (!m_pGridCtrl) return; // 创建 Gridctrl 窗口 CRect rect; GetClientRect(rect); m_pGridCtrl->Create(rect, this, 100); // 填充数据 m_pGridCtrl->SetEditable(TRUE); m_pGridCtrl->EnableDragAndDrop(TRUE); try { m_pGridCtrl->SetRowCount(33); m_pGridCtrl->SetColumnCount(31); m_pGridCtrl->SetFixedRowCount(4); m_pGridCtrl->SetFixedColumnCount(1); } catch (CMemoryException* e) { e->ReportError(); e->Delete(); return; } // 填充每格数据 for (int row = 0; row < m_pGridCtrl->GetRowCount(); row++) for (int col = 0; col < m_pGridCtrl->GetColumnCount(); col++) { GV_ITEM Item; Item.mask = GVIF_TEXT|GVIF_FORMAT; Item.row = row; Item.col = col; if (row < 1) { Item.nFormat = DT_LEFT|DT_WORDBREAK; switch(col) { case 1: Item.szText.Format(_T("1# 发电机"));break; case 10: Item.szText.Format(_T("2# 发电机"));break; case 19: Item.szText.Format(_T("1# 主变"));break; case 22: Item.szText.Format(_T("110kv 车乔线"));break; case 27: Item.szText.Format(_T("10kv 母线"));break; case 29: Item.szText.Format(_T("110kv 母线"));break; } } else if (col < 1) { Item.nFormat = DT_RIGHT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS; if(row>=4&&row<28) Item.szText.Format(_T(" %d"),row-3); else { switch(row) { case 30:Item.szText.Format(_T("4"));break; case 31:Item.szText.Format(_T(" 12"));break; case 32:Item.szText.Format(_T(" 20"));break; } } } else { Item.nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS; Item.szText.Format(_T(" ")); } m_pGridCtrl->SetItem(&Item); } m_pGridCtrl->AutoSize(); m_pGridCtrl->SetRowHeight(0, 3*m_pGridCtrl->GetRowHeight(0)/2); } pDC=m_pGridCtrl->GetDC(); CSize cellSize; GV_ITEM Item; Item.mask = GVIF_TEXT|GVIF_FORMAT; Item.nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS; CRect tempRect; if (m_pGridCtrl->GetSafeHwnd()) { m_pGridCtrl->SetFixedCellCombine(0,0,3,0); m_pGridCtrl->SetFixedCellCombine(0,1,0,8); m_pGridCtrl->SetFixedCellCombine(0,10,0,8); m_pGridCtrl->SetFixedCellCombine(0,19,0,2); m_pGridCtrl->SetFixedCellCombine(0,22,0,4); m_pGridCtrl->SetFixedCellCombine(0,27,0,1); m_pGridCtrl->SetFixedCellCombine(0,29,0,1); int i; for(i=5;i<=10;i++) { Item.col=i; Item.row=1; m_pGridCtrl->SetFixedCellCombine(1,i,1,0); switch(i) { case 5: Item.szText.Format(_T("有功")); cellSize=pDC->GetTextExtent("有功"); m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10); break; case 6: Item.szText.Format(_T("无功")); cellSize=pDC->GetTextExtent("无功"); m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10);break; case 7: Item.szText.Format(_T("励磁电压")); cellSize=pDC->GetTextExtent("励磁电压"); m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10);break; case 8: Item.szText.Format(_T("励磁电流")); cellSize=pDC->GetTextExtent("励磁电流"); m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10);break; case 9: Item.szText.Format(_T("复励电流")); cellSize=pDC->GetTextExtent("复励电流"); m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10);break; case 10: Item.szText.Format(_T("电压")); cellSize=pDC->GetTextExtent("电压"); m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10);break; } m_pGridCtrl->SetItem(&Item); } for(i=14;i<=23;i++) { Item.col=i; Item.row=1; m_pGridCtrl->SetFixedCellCombine(1,i,1,0); switch(i) { case 14:case 19:case 22: Item.szText.Format(_T("有功")); cellSize=pDC->GetTextExtent("有功"); m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10); break; case 15:case 20:case 23: Item.szText.Format(_T("无功")); cellSize=pDC->GetTextExtent("无功"); m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10); break; case 16: Item.szText.Format(_T("励磁电压")); cellSize=pDC->GetTextExtent("励磁电压"); m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10); break; case 18: Item.szText.Format(_T("复励电流")); cellSize=pDC->GetTextExtent("复励电流"); m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10); break; case 17: Item.szText.Format(_T("励磁电流")); cellSize=pDC->GetTextExtent("励磁电流"); m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10); break; case 21: Item.szText.Format(_T("电流")); cellSize=pDC->GetTextExtent("电流"); m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10); break; } m_pGridCtrl->SetItem(&Item); } for(i=27;i<=30;i++) { Item.col=i; Item.row=1; m_pGridCtrl->SetFixedCellCombine(1,i,1,0); switch(i) { case 27:case 29: Item.szText.Format(_T("周波")); cellSize=pDC->GetTextExtent("周波"); m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10); break; case 28:case 30: Item.szText.Format(_T("电压")); cellSize=pDC->GetTextExtent("电压"); m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10); break; } m_pGridCtrl->SetItem(&Item); } m_pGridCtrl->SetFixedCellCombine(1,24,0,2); Item.col=24; Item.row=1; Item.szText.Format(_T("电流")); m_pGridCtrl->SetItem(&Item); cellSize=pDC->GetTextExtent("电流"); m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10); for(i=0;i<=2;i++) { Item.row=2; switch(i) { case 0: Item.col=24; Item.szText.Format(_T(" A ")); cellSize=pDC->GetTextExtent(" A "); m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10); break; case 1: Item.col=25; Item.szText.Format(_T(" B ")); cellSize=pDC->GetTextExtent(" B "); m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10); break; case 2: Item.col=26; Item.szText.Format(_T(" C ")); cellSize=pDC->GetTextExtent(" C "); m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10); break; } m_pGridCtrl->SetItem(&Item); } m_pGridCtrl->SetFixedCellCombine(1,2,0,2); Item.col=2; Item.row=1; Item.szText.Format(_T("电流")); m_pGridCtrl->SetItem(&Item); cellSize=pDC->GetTextExtent("电流"); m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10); for(i=0;i<=2;i++) { Item.row=2; switch(i) { case 0: Item.col=2; Item.szText.Format(_T(" A ")); cellSize=pDC->GetTextExtent(" A "); m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10); break; case 1: Item.col=3; Item.szText.Format(_T(" B ")); cellSize=pDC->GetTextExtent(" B "); m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10); break; case 2: Item.col=4; Item.szText.Format(_T(" C ")); cellSize=pDC->GetTextExtent(" C "); m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10); break; } m_pGridCtrl->SetItem(&Item); } m_pGridCtrl->SetFixedCellCombine(1,1,1,0); Item.col=1; Item.row=1; Item.szText.Format(_T("电压")); m_pGridCtrl->SetItem(&Item); cellSize=pDC->GetTextExtent("电压"); m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10); m_pGridCtrl->SetFixedCellCombine(1,11,0,2); Item.col=11; Item.row=1; Item.szText.Format(_T("电流")); m_pGridCtrl->SetItem(&Item); cellSize=pDC->GetTextExtent("电流"); m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10); for(i=0;i<=2;i++) { Item.row=2; switch(i) { case 0: Item.col=11; Item.szText.Format(_T(" A ")); cellSize=pDC->GetTextExtent(" A "); m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10); break; case 1: Item.col=12; Item.szText.Format(_T(" B ")); cellSize=pDC->GetTextExtent(" B "); m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10); break; case 2: Item.col=13; Item.szText.Format(_T(" C ")); cellSize=pDC->GetTextExtent(" C "); m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10); break; } m_pGridCtrl->SetItem(&Item); } Item.row = 3; for(i=1;i<=30;i++) { Item.col=i; switch(i) { case 2:case 3:case 4:case 8:case 9:case 11:case 12: case 13: case 17:case 18:case 21:case 24:case 25:case 26: Item.szText.Format(_T(" A")); break; case 1:case 10:case 28:case 30: Item.szText.Format(_T("KV")); break; case 5:case 14:case 19:case 22: Item.szText.Format(_T("MW")); break; case 6:case 15:case 20:case 23: Item.szText.Format(_T("MVar")); break; case 7:case 16: Item.szText.Format(_T("V")); break; case 27:case 29: Item.szText.Format(_T("Hz")); break; } m_pGridCtrl->SetItem(&Item); } CGridCell *pCell; m_pGridCtrl->SetFixedCellCombine(28,0,1,0); m_pGridCtrl->SetCellCombine(28,1,0,2,TRUE); Item.col=1; Item.row=28; Item.szText.Format(_T("发电机风温℃")); m_pGridCtrl->SetItem(&Item); for(i=1;i<4;i++) { Item.row=29; Item.col=i; switch(i) { case 1:Item.szText.Format(_T("励磁侧入口"));break; case 2:Item.szText.Format(_T("汽机侧入口"));break; case 3:Item.szText.Format(_T("出口"));break; } m_pGridCtrl->SetItem(&Item); pCell=m_pGridCtrl->GetCellP(Item.row,Item.col); pCell->m_bNoEdit=TRUE; cellSize=pDC->GetTextExtent("123456"); if(m_pGridCtrl->GetCellRect(Item.row,Item.col,tempRect)) if(cellSize.cx+10>tempRect.Width()) m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10); } m_pGridCtrl->SetCellCombine(28,4,0,11,TRUE); Item.col=4; Item.row=28; Item.szText.Format(_T("发电机静子线圈.静子铁心温度℃")); m_pGridCtrl->SetItem(&Item); for(i=0;i<12;i++) { Item.row=29; Item.col=4+i; Item.szText.Format(_T(" %d "),19+i); m_pGridCtrl->SetItem(&Item); pCell=m_pGridCtrl->GetCellP(Item.row,Item.col); pCell->m_bNoEdit=TRUE; cellSize=pDC->GetTextExtent("123456"); if(m_pGridCtrl->GetCellRect(Item.row,Item.col,tempRect)) if(cellSize.cx+10>tempRect.Width()) m_pGridCtrl->SetColumnWidth(Item.col,cellSize.cx+10); } for(i=0;i<6;i++) { CString str; Item.row=28; switch(i) { case 0:Item.col=16; Item.szText.Format(_T("1#高厂变温度"));break; case 1:Item.col=17; Item.szText.Format(_T("2#高厂变温度"));break; case 2:Item.col=18; Item.szText.Format(_T("0#高厂变温度"));break; case 3:Item.col=28; Item.szText.Format(_T("除尘变温度"));break; case 4:Item.col=29; Item.szText.Format(_T("输煤变温度"));break; case 5:Item.col=30; Item.szText.Format(_T("主变温度"));break; } m_pGridCtrl->SetItem(&Item); m_pGridCtrl->SetCellCombine(Item.row,Item.col,1,0,TRUE); } for (i=0;i<=3;i++) { Item.row=28; switch (i) { case 0:Item.col=19; Item.szText.Format(_T("1#低厂变温度"));break; case 1:Item.col=21; Item.szText.Format(_T("2#低厂变温度"));break; case 2:Item.col=23; Item.szText.Format(_T("3#低厂变温度"));break; case 3:Item.col=25; Item.szText.Format(_T("0#低厂变温度"));break; } m_pGridCtrl->SetItem(&Item); int hNum=i!=3?1:2; m_pGridCtrl->SetCellCombine(Item.row,Item.col,1,hNum,TRUE); int j=m_pGridCtrl->GetRowCount(); while(j>Item.row) { m_pGridCtrl->SetCellCombine(j,Item.col,0 ,hNum); j--;} } }//if (m_pGridCtrl->GetSafeHwnd())ended } void CMyView::OnSize(UINT nType, int cx, int cy) { CView::OnSize(nType, cx, cy); // TODO: Add your message handler code here CRect rect,tempRect; GetClientRect(rect); tempRect=rect; if(m_ownwnd->GetSafeHwnd()) { tempRect.bottom=rect.top+rect.Width()/7; m_ownwnd->MoveWindow(tempRect); } if (m_pGridCtrl->GetSafeHwnd()) { rect.top=rect.top+rect.Width()/7; m_pGridCtrl->MoveWindow(rect); } } BOOL CMyView::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) { // TODO: Add your specialized code here and/or call the base class if (m_pGridCtrl && IsWindow(m_pGridCtrl->m_hWnd)) if (m_pGridCtrl->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo)) return TRUE; return CView::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo); }