现在的位置: 首页 > 综合 > 正文

GridCtrlView

2013年07月16日 ⁄ 综合 ⁄ 共 5414字 ⁄ 字号 评论关闭

// GridCtrlView.cpp : implementation file
//

#include "stdafx.h"
#include "iDART_UI.h"
#include "iDART_UIDoc.h"
#include "GridCtrlView.h"

//////////////////////////////////////////////////////////////////////////
// GridCtrlView

IMPLEMENT_DYNCREATE(GridCtrlView, CView)
    //有消息时循环暂停和挂起
    BOOL PeekAndPump()
{
    static MSG msg;

    while (::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)) {
        if (!AfxGetApp()->PumpMessage()) {
            ::PostQuitMessage(0);
            return FALSE;
        } 
    }

    return TRUE;
}
GridCtrlView::GridCtrlView()
{
    m_pGridCtrl = NULL;
    CString str = theApp.m_curFileListPath;
    int last=str.ReverseFind('.');
    if(
        str.Mid(last+1, str.GetLength()-last).MakeLower()=="csv"||
        str.Mid(last+1, str.GetLength()-last).MakeLower()=="xls")
    {
        m_curFilePath = str;
    }else
    {
        m_curFilePath = "";
        MessageBox("无法读取文件");
    }
}

GridCtrlView::~GridCtrlView()
{
    if (m_pGridCtrl)
        delete m_pGridCtrl;
    if (m_pEx)
    {
        delete m_pEx;
    }
}

BEGIN_MESSAGE_MAP(GridCtrlView, CView)
    ON_WM_SIZE()
    ON_WM_ERASEBKGND()
    ON_WM_TIMER()
END_MESSAGE_MAP()

// GridCtrlView drawing

void GridCtrlView::OnDraw(CDC* pDC)
{
    CDocument* pDoc = GetDocument();
    // TODO: add draw code here
    ASSERT_VALID(pDoc);
    if (!pDoc)
        return;
}

// GridCtrlView diagnostics

#ifdef _DEBUG
void GridCtrlView::AssertValid() const
{
    CView::AssertValid();
}
CiDART_UIDoc* GridCtrlView::GetDocument() const // 非调试版本是内联的
{
    ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CiDART_UIDoc)));
    return (CiDART_UIDoc*)m_pDocument;
}
#ifndef _WIN32_WCE
void GridCtrlView::Dump(CDumpContext& dc) const
{
    CView::Dump(dc);
}
#endif
#endif //_DEBUG

// GridCtrlView message handlers
void GridCtrlView::OnInitialUpdate()
{
    CView::OnInitialUpdate();

    // TODO: Add your specialized code here and/or call the base class
    CDocument* pDoc = GetDocument();
    // TODO: add draw code here
    ASSERT_VALID(pDoc);
    if (!pDoc)
        return;
    if (m_curFilePath == "")
    {
        return;
    }
    fillGridView();
}

void GridCtrlView::OnSize(UINT nType, int cx, int cy)
{
    CView::OnSize(nType, cx, cy);

    // TODO: Add your message handler code here

    if (m_pGridCtrl->GetSafeHwnd())
    {
        CRect rect;
        GetClientRect(rect);
        m_pGridCtrl->MoveWindow(rect);
    }
}
BOOL GridCtrlView::OnEraseBkgnd(CDC* pDC)
{
    // TODO: Add your message handler code here and/or call default

    return CView::OnEraseBkgnd(pDC);
}

BOOL GridCtrlView::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
    // TODO: Add your specialized code here and/or call the base class

    return CView::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}

void GridCtrlView::OnTimer(UINT_PTR nIDEvent)
{
    // TODO: Add your message handler code here and/or call default
    CView::OnTimer(nIDEvent);
}

void GridCtrlView::fillGridView(void)
{
    if (m_curFilePath == "")
    {
        return;
    }
    COleSafeArray strXls;
    m_pEx = new excel();

    int _row = 0;
    int _low = 0;
    int nPos = 0;
    bool bRead, bColumnName;

    bRead = m_pEx->ReadExcelToString(m_curFilePath, strXls, &_row, &_low, true);

    if (!bRead)
    {
        MessageBox("读取表%s失败...", m_curFilePath);
        return ;
    }
    long lNumRows;
    long lNumCols;
    strXls.GetUBound(1, &lNumRows);
    strXls.GetUBound(2, &lNumCols);

    BeginWaitCursor();
    if (m_pGridCtrl == NULL)
    {
        m_pGridCtrl = new CGridCtrl;
        if (!m_pGridCtrl)
        {
            return ;
        }
        //创建
        CRect rect;
        GetClientRect(rect);
        m_pGridCtrl->Create(rect, this, 100);

        // 画表格填充数据
        m_pGridCtrl->SetEditable(TRUE);
        m_pGridCtrl->EnableDragAndDrop(TRUE);

        try {
            m_pGridCtrl->SetRowCount(lNumRows);
            m_pGridCtrl->SetColumnCount(lNumCols+1);
            m_pGridCtrl->SetFixedRowCount(1);
            m_pGridCtrl->SetFixedColumnCount(1);
        }
        catch (CMemoryException* e)
        {
            e->ReportError();
            e->Delete();
            return ;
        }

        long maxNum = (lNumRows*lNumCols)/1000;
        long i = 0;
        int j = 0;
        long index[2];
        VARIANT val;
        COleVariant rValue;
        // fill rows/cols with text
        for (int row = 0; row <= lNumRows; row++)
            for (int col = 0; col <=lNumCols; col++)
            {
                PeekAndPump();
                i++;
                GV_ITEM Item;
                Item.mask = GVIF_TEXT|GVIF_FORMAT;
                Item.row = row;
                Item.col = col;
                if (row < 1) {
                    Item.nFormat = DT_LEFT|DT_WORDBREAK;
                    if (col == 0)
                    {
                        Item.strText= " ";
                    }else
                    {
                        Item.strText.Format("%c",'A'+col-1);
                    }

                } else if (col < 1) {
                    Item.nFormat = DT_RIGHT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS|DT_NOPREFIX;
                    Item.strText.Format(_T("%d"),row);
                } else {
                    Item.nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS|DT_NOPREFIX;
                    CString str ;
                    index[0]=row;
                    index[1]=col;
                    strXls.GetElement(index, &val);
                    rValue = COleVariant(val);
                    rValue.ChangeType(VT_BSTR);

                    str = rValue.bstrVal;
                    Item.strText =str;
                }
                m_pGridCtrl->SetItem(&Item);
                if (i%maxNum == 0)
                {
                    j++;
                    theApp.m_pMainWnd->SendMessage(MYWM_PROGRESS,j,0);

                }

            }
            m_pGridCtrl->AutoSize();
            theApp.m_pMainWnd->SendMessage(MYWM_PROGRESS,0,0);

    }
    EndWaitCursor();
    GetParent()->SetWindowText(theApp.m_FileListItem);

}

抱歉!评论已关闭.