⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 studaoview.cpp

📁 Visual c++程序设计培训教程
💻 CPP
字号:
// StuDAOView.cpp : implementation of the CStuDAOView class
//

#include "stdafx.h"
#include "StuDAO.h"

#include "StuDAOSet.h"
#include "StuDAODoc.h"
#include "StuDAOView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CStuDAOView

IMPLEMENT_DYNCREATE(CStuDAOView, CDaoRecordView)

BEGIN_MESSAGE_MAP(CStuDAOView, CDaoRecordView)
	//{{AFX_MSG_MAP(CStuDAOView)
	ON_COMMAND(ID_RECORD_FIRST, OnRecordFirst)
	ON_COMMAND(ID_RECORD_LAST, OnRecordLast)
	ON_COMMAND(ID_RECORD_NEXT, OnRecordNext)
	ON_COMMAND(ID_RECORD_PREV, OnRecordPrev)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CDaoRecordView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CDaoRecordView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CDaoRecordView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CStuDAOView construction/destruction

CStuDAOView::CStuDAOView()
	: CDaoRecordView(CStuDAOView::IDD)
{
	//{{AFX_DATA_INIT(CStuDAOView)
		// NOTE: the ClassWizard will add member initialization here
	m_pSet = NULL;
	//}}AFX_DATA_INIT
	// TODO: add construction code here

}

CStuDAOView::~CStuDAOView()
{
}

void CStuDAOView::DoDataExchange(CDataExchange* pDX)
{
	CDaoRecordView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CStuDAOView)
	DDX_Control(pDX, IDC_MSFLEXGRID1, m_FlexGrid);
	//}}AFX_DATA_MAP
}

BOOL CStuDAOView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CDaoRecordView::PreCreateWindow(cs);
}

void CStuDAOView::OnInitialUpdate()
{
	m_pSet = &GetDocument()->m_stuDAOSet;
	CDaoRecordView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();

	this->Invalidate();
}

/////////////////////////////////////////////////////////////////////////////
// CStuDAOView printing

BOOL CStuDAOView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CStuDAOView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CStuDAOView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CStuDAOView diagnostics

#ifdef _DEBUG
void CStuDAOView::AssertValid() const
{
	CDaoRecordView::AssertValid();
}

void CStuDAOView::Dump(CDumpContext& dc) const
{
	CDaoRecordView::Dump(dc);
}

CStuDAODoc* CStuDAOView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CStuDAODoc)));
	return (CStuDAODoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CStuDAOView database support
CDaoRecordset* CStuDAOView::OnGetRecordset()
{
	return m_pSet;
}


/////////////////////////////////////////////////////////////////////////////
// CStuDAOView message handlers

void CStuDAOView::OnDraw(CDC* pDC) 
{
	// TODO: Add your specialized code here and/or call the base class
	CRect rect;			 // 记录视图窗口的客户区大小
	char lpstrRow[6] = "1";	 //  FlexGrid控件当前行第0列的显示
	int     iRowCount = 1;         // FlexGrid控件的当前行
	
	// 调整FlexGrid控件的大小为整个客户区大小
	GetClientRect(rect); // 获取视图窗口客户区
	m_FlexGrid.MoveWindow(rect,TRUE); // 改变FlexGrid控件的位置和大小
	m_FlexGrid.RedrawWindow(NULL,NULL,
		RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE); // 重画控件

	// 设置FlexGrid将要显示的总行数和总列数
	m_FlexGrid.SetCols((m_pSet->m_nFields)+1);
	m_FlexGrid.SetRows(6);

	// 设置控件所有行的宽度和所有列的高度
	m_FlexGrid.SetColWidth(-1,1000);
	m_FlexGrid.SetRowHeight(-1,360);

	// 单独设置控件第0列(序号列)的宽度
	m_FlexGrid.SetColWidth(0,600);
	
	// 设置控件第0行(标题行)个列的显示文本
	m_FlexGrid.SetRow(0);
	m_FlexGrid.SetCol(1);
	m_FlexGrid.SetText("学号");
	m_FlexGrid.SetCol(2);
	m_FlexGrid.SetText("姓名");
    m_FlexGrid.SetCol(3);
	m_FlexGrid.SetText("年龄");
	m_FlexGrid.SetCol(4);
	m_FlexGrid.SetText("籍贯");
	m_FlexGrid.SetCol(5);
	m_FlexGrid.SetText("班级");

	// 将记录集移动到第一个
	m_pSet->MoveFirst();

	// 显示每一个记录集的各个字段
	while(!m_pSet->IsEOF())
	{
		// 移动到当前行
		m_FlexGrid.SetRow(iRowCount);
		// 在当前行第0列显示行号
		m_FlexGrid.SetCol(0);
		itoa(iRowCount,(char*)lpstrRow,6);
		m_FlexGrid.SetText(lpstrRow);

		// 在当前行第1列显示学生记录的学号字段
		CString  studentID;
		studentID.Format("%d",m_pSet->m_StudentID);
		m_FlexGrid.SetCol(1);
		m_FlexGrid.SetText(studentID);

		// 在当前行第2列显示学生记录的姓名字段
		m_FlexGrid.SetCol(2);
		m_FlexGrid.SetText(m_pSet->m_Name);

		// 在当前行第3列显示学生记录的年龄字段
		CString  age;
		age.Format("%d",m_pSet->m_Age);
		m_FlexGrid.SetCol(3);
		m_FlexGrid.SetText(age);

		// 在当前行第4列显示学生记录的地址字段
		m_FlexGrid.SetCol(4);
		m_FlexGrid.SetText(m_pSet->m_Address);

		// 在当前行第5列显示学生记录的班级字段
		CString  classID;
		classID.Format("%d",m_pSet->m_ClassID);
		m_FlexGrid.SetCol(5);
		m_FlexGrid.SetText(classID);

		if(!m_pSet->IsEOF())// 如果没有结束,移动到下一行继续显示
		{
			m_pSet->MoveNext(); // 移动到下一个记录
			iRowCount += 1; // 当前行加1
		}
	}

	// 将记录集移动到第一个
	m_pSet->MoveFirst();

	// 设置控件的当前选择为第一行第一列
	m_FlexGrid.SetRow(1);
	m_FlexGrid.SetCol(1);
}

void CStuDAOView::OnRecordFirst() 
{
	// TODO: Add your command handler code here
	// 移动FlexGrid控件中的选择到第一行
	m_FlexGrid.SetRow(1);
	m_FlexGrid.SetCol(1);
	m_FlexGrid.SetRowSel(1);
	m_FlexGrid.SetColSel(m_pSet->m_nFields);
	
	// 移动记录集到第一个
	m_pSet->MoveFirst();
}

void CStuDAOView::OnRecordLast() 
{
	// TODO: Add your command handler code here
	// 移动FlexGrid控件中的选择到最后一行
	m_FlexGrid.SetRow(m_pSet->GetRecordCount());
	m_FlexGrid.SetCol(1);
	m_FlexGrid.SetRowSel(m_pSet->GetRecordCount());
	m_FlexGrid.SetColSel(m_pSet->m_nFields);

	// 移动记录集到最后一个
	m_pSet->MoveLast();
}

void CStuDAOView::OnRecordNext() 
{
	// TODO: Add your command handler code here
	int iCurrentRow;  // 记录FlexGrid控件中的当前行
	iCurrentRow = m_FlexGrid.GetRow(); // 获取FlexGrid控件中的当前行
	
	if(iCurrentRow<m_pSet->GetRecordCount()) // 如果当前行不是最后一行
	{
		// 移动FlexGrid控件中的选择到下一行
		m_FlexGrid.SetRow(iCurrentRow+1);
		m_FlexGrid.SetCol(1);
		m_FlexGrid.SetRowSel(iCurrentRow+1);
		m_FlexGrid.SetColSel(m_pSet->m_nFields);

		// 移动到下一个记录集
		m_pSet->MoveNext();
	}
}

void CStuDAOView::OnRecordPrev() 
{
	// TODO: Add your command handler code here
	int iCurrentRow;  // 记录FlexGrid控件中的当前行
	iCurrentRow = m_FlexGrid.GetRow(); // 获取FlexGrid控件中的当前行
	
	if(iCurrentRow>1) // 如果当前行不是第一行
	{
		// 移动FlexGrid控件中的选择到下一行
		m_FlexGrid.SetRow(iCurrentRow-1);
		m_FlexGrid.SetCol(1);
		m_FlexGrid.SetRowSel(iCurrentRow-1);
		m_FlexGrid.SetColSel(m_pSet->m_nFields);

		// 移动到上一个记录集
		m_pSet->MovePrev();
	}	
}

BEGIN_EVENTSINK_MAP(CStuDAOView, CDaoRecordView)
    //{{AFX_EVENTSINK_MAP(CStuDAOView)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -