www.pudn.com > 基本GIS系统开发.rar > dbaseview.cpp, change:2005-06-13,size:3875b
// dbaseview.cpp : implementation file
//
#include "stdafx.h"
#include "Draw.h"
#include "dbaseview.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDatabaseView
IMPLEMENT_DYNCREATE(CDatabaseView, CScrollView)
CDatabaseView::CDatabaseView()
{
}
CDatabaseView::~CDatabaseView()
{
}
BEGIN_MESSAGE_MAP(CDatabaseView, CScrollView)
//{{AFX_MSG_MAP(CDatabaseView)
ON_WM_SIZE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDatabaseView drawing
void CDatabaseView::OnInitialUpdate()
{
CDrawDoc* pDoc=GetDocument(); //得到指向当前文档对象的指针
m_pSet1=&pDoc->m_data1; //得到指向记录集合对象的指针
CSize sizeTotal;
// TODO: calculate the total size of this view
Init1();
Init2();
CScrollView::OnInitialUpdate();
//sizeTotal.cx = sizeTotal.cy = 100;
SetScrollSizes(MM_TEXT, sizeTotal,sizePage,sizeLine);
}
void CDatabaseView::OnDraw(CDC* pDC)
{
// CDocument* pDoc = GetDocument();
// TODO: add draw code here
CDrawDoc* pDoc=GetDocument();
// CPen pen(0,1,RGB(255,0,0));
pDC->SetTextColor(RGB(255,0,0));
CString c1;
CString& c2=c1;
pDC->SetMapMode(1);
m_pSet1->MoveFirst();
for(int i=0;i<nRecord;i++)
{
for(int j=0;j<nField;j++)
{
m_pSet1->GetFieldValue(j,c2);
pDC->TextOut(nFieldStart[j],i*nCharHeight,c1);
}
m_pSet1->MoveNext();
}
}
void CDatabaseView::Init1()
{
TEXTMETRIC tm;
CDC* dc=GetDC();
dc->GetTextMetrics(&tm);
ReleaseDC(dc);
nCharHeight=tm.tmHeight+2;
nCharWidth=tm.tmAveCharWidth+2;
if(m_pSet1->IsOpen())
m_pSet1->Close();
m_pSet1->Open();
nField=m_pSet1->GetODBCFieldCount();
CODBCFieldInfo fieldinfo1;
CODBCFieldInfo& fieldinfo=fieldinfo1;
for(int i=0;i<nField;i++)
{
m_pSet1->GetODBCFieldInfo(i,fieldinfo);
nFieldWide[i]=(short)fieldinfo1.m_nPrecision;
}
nScreenWide=0;
nFieldStart[0]=0;
for(i=0;i<nField;i++)
{
nScreenWide=nScreenWide+nFieldWide[i]*nCharWidth;
nFieldStart[i+1]=nFieldStart[i]+nFieldWide[i]*nCharWidth;
}
sizeTotal.cx=nScreenWide;
sizeLine.cx=nCharWidth*5;
}
void CDatabaseView::Init2()
{
if(m_pSet1->IsOpen()) //如果打开了记录集合对象
m_pSet1->Close();
m_pSet1->Open();
if(m_pSet1->IsBOF()) //如果记录指针指向记录集合范围外,即记录集合不包含记录
nRecord=0;
else
{
m_pSet1->MoveFirst();
nRecord=0;
while(!m_pSet1->IsBOF()) //直到指向最后一条记录范围外
{
m_pSet1->MoveNext();
nRecord++;
}
}
nScreenHeight=nRecord*nCharHeight;
if(nScreenHeight==0)
nScreenHeight=20;
sizeTotal.cy=nScreenHeight;
sizeLine.cy=nCharHeight+2;
// if(nRecord>0) //添加的与编辑功能有关的代码
// {
// if(nIndex<1||nIndex>nRecord) //如果记录指针指向记录集合的范围外
// nIndex=1; //将记录指针指向第一条记录
// }
// else
// nIndex=-1;
}
/////////////////////////////////////////////////////////////////////////////
// CDatabaseView diagnostics
#ifdef _DEBUG
void CDatabaseView::AssertValid() const
{
CScrollView::AssertValid();
}
void CDatabaseView::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
CDrawDoc* CDatabaseView::GetDocument()
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDrawDoc)));
return (CDrawDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CDatabaseView message handlers
void CDatabaseView::OnSize(UINT nType, int cx, int cy)
{
CScrollView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
sizePage.cx=cx;//设置页滚动区域的宽度
sizePage.cy=cy;//高度
SetScrollSizes(MM_TEXT,sizeTotal,sizePage,sizeLine);//设置视图滚动范围
}