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

📄 sanguo_view.cpp

📁 ODBC方法连接Access数据库(需设置数据源)的三国人物管理系统.本人以初学者的身份写的,紧供菜鸟们参考,达人们大可无视!!
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// SanGuo_View.cpp : implementation of the CSanGuo_View class
//

#include "stdafx.h"
#include "SanGuo_.h"

#include "SanGuo_Set.h"
#include "SanGuo_Doc.h"
#include "SanGuo_View.h"
/////////////////////////////////////////////////////////////////////////////
#include "AboutDlg.h"
#include "stdlib.h"                 //包含字符转整数的函数atoi
/////////////////////////////////////////////////////////////////////////////
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSanGuo_View

IMPLEMENT_DYNCREATE(CSanGuo_View, CRecordView)

BEGIN_MESSAGE_MAP(CSanGuo_View, CRecordView)
	//{{AFX_MSG_MAP(CSanGuo_View)
	ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd)
	ON_NOTIFY(NM_CLICK, IDC_LIST_SHOW, OnClickListShow)
	ON_BN_CLICKED(IDC_BUTTON_CHANGE, OnButtonChange)
	ON_BN_CLICKED(IDC_BUTTON_DELETE, OnButtonDelete)
	ON_BN_CLICKED(IDC_BUTTON_QUERY, OnButtonQuery)
	ON_BN_CLICKED(IDC_BUTTON_QUERY2, OnButtonQuery2)
	ON_BN_CLICKED(IDC_BUTTON_QUERY3, OnButtonQuery3)
	ON_BN_CLICKED(IDC_BUTTON_QUERY4, OnButtonQuery4)
	ON_BN_CLICKED(IDC_BUTTON_QUERY5, OnButtonQuery5)
	ON_BN_CLICKED(IDC_BUTTON_LADN, OnButtonLadn)
	ON_BN_CLICKED(IDC_BUTTON_ENROLL, OnButtonEnroll)
	ON_BN_CLICKED(IDC_BUTTON_EXIT, OnButtonExit)
	ON_BN_CLICKED(IDC_BUTTON_HELP, OnButtonHelp)
	ON_BN_CLICKED(IDC_BUTTON_QUERY6, OnButtonQuery6)
	ON_BN_CLICKED(IDC_BUTTON_SHOWALL, OnButtonShowall)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CRecordView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CRecordView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CRecordView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSanGuo_View construction/destruction

CSanGuo_View::CSanGuo_View()
	: CRecordView(CSanGuo_View::IDD)
{
	//{{AFX_DATA_INIT(CSanGuo_View)
	m_pSet = NULL;
	m_strAccount = _T("admin");
	m_strPassword = _T("");
	m_strName = _T("");
	m_strNameEx = _T("");
	m_strPlace = _T("");
	m_strForce = _T("");
	m_strIntel = _T("");
	m_strShort = _T("");
	//}}AFX_DATA_INIT
	// TODO: add construction code here
	
	m_iSelect = -1;                  //用于记录鼠标点击列表中第几行
}

CSanGuo_View::~CSanGuo_View()
{
}

void CSanGuo_View::DoDataExchange(CDataExchange* pDX)
{
	CRecordView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSanGuo_View)
	DDX_Control(pDX, IDC_LIST_SHOW, m_ListShow);
	DDX_Text(pDX, IDC_EDIT_ACCOUNT, m_strAccount);
	DDV_MaxChars(pDX, m_strAccount, 20);
	DDX_Text(pDX, IDC_EDIT_PASSWORD, m_strPassword);
	DDV_MaxChars(pDX, m_strPassword, 20);
	DDX_Text(pDX, IDC_EDIT_NAME, m_strName);
	DDV_MaxChars(pDX, m_strName, 10);
	DDX_Text(pDX, IDC_EDIT_NAMEEx, m_strNameEx);
	DDV_MaxChars(pDX, m_strNameEx, 10);
	DDX_Text(pDX, IDC_EDIT_PLACE, m_strPlace);
	DDV_MaxChars(pDX, m_strPlace, 10);
	DDX_Text(pDX, IDC_EDIT_FORCE, m_strForce);
	DDV_MaxChars(pDX, m_strForce, 10);
	DDX_Text(pDX, IDC_EDIT_INTEL, m_strIntel);
	DDV_MaxChars(pDX, m_strIntel, 10);
	DDX_Text(pDX, IDC_EDIT_SHORT, m_strShort);
	DDV_MaxChars(pDX, m_strShort, 100);
	//}}AFX_DATA_MAP
}

BOOL CSanGuo_View::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
	return CRecordView::PreCreateWindow(cs);
}

void CSanGuo_View::OnInitialUpdate()
{
	m_pSet = &GetDocument()->m_sanGuo_Set;
	CRecordView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();

//	m_ListShow.SetBkImage();                    //error:设置背景图片(还不知道怎么用)
	m_ListShow.SetBkColor(RGB(255,255,205));    //设置列表背景颜色(不含字符项)
	m_ListShow.SetTextBkColor(RGB(175,255,205));//设置列表背景颜色(含字符项)
	m_ListShow.SetTextColor(RGB(125,205,105));  //设置字体颜色
	m_ListShow.InsertColumn(0,"姓名",LVCFMT_CENTER,80);/*参数1为新列的索引,2为标题文本,
	3为排列方式(左中右),4为列宽(-1表示没设置),5表示与列相关的子项索引(-1表示没有子项).
	此函数用于向列表控件插入新一的列,成功返回新列表索引,否则返回-1*/
	m_ListShow.InsertColumn(1,"表字",LVCFMT_CENTER,80);
	m_ListShow.InsertColumn(2,"所属",LVCFMT_CENTER,80);
	m_ListShow.InsertColumn(3,"武力",LVCFMT_CENTER,80);
	m_ListShow.InsertColumn(4,"智力",LVCFMT_CENTER,80);
	m_ListShow.SetExtendedStyle(m_ListShow.GetExtendedStyle()|//GetExtendedStyle获得当前风格;SetExtendedStyle修改当前风格
LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_TWOCLICKACTIVATE);//修改样式
//LVS_EX_ONECLICKACTIVATE 
	ShowList();                     //用于显示列表的函数

	CSanGuo_View::EnableAllDlg(FALSE);//用于让所有非登陆对话框激活或失活
}

/////////////////////////////////////////////////////////////////////////////
// CSanGuo_View printing

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CSanGuo_View diagnostics

#ifdef _DEBUG
void CSanGuo_View::AssertValid() const
{
	CRecordView::AssertValid();
}

void CSanGuo_View::Dump(CDumpContext& dc) const
{
	CRecordView::Dump(dc);
}

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

/////////////////////////////////////////////////////////////////////////////
// CSanGuo_View database support
CRecordset* CSanGuo_View::OnGetRecordset()
{
	return m_pSet;
}


/////////////////////////////////////////////////////////////////////////////
// CSanGuo_View message handlers

void CSanGuo_View::OnButtonAdd() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	m_pSet->MoveFirst();
	int i = 0;
	for(;!m_pSet->IsEOF();)         //查找是否有同名的,是i>0,不是i=0
	{
		if(m_strName == m_pSet->m_column1) i++;
		m_pSet->MoveNext();
	}
	if(0 == i)                      //如果无同名的则可以添加
	{ 
		m_pSet->MoveLast();
		m_pSet->AddNew();
		m_pSet->m_column1 = m_strName;
		m_pSet->m_column2 = m_strNameEx;
		m_pSet->m_column3 = m_strPlace;
		m_pSet->m_column4 = atol(m_strForce);//atol:把字符串转成int的函数(要头文件stdlib.h)
		m_pSet->m_column5 = atol(m_strIntel);
		m_pSet->m_column8 = m_strShort;
		m_pSet->Update();
		m_pSet->Requery();
		MessageBox("武将添加成功!!");
		ShowList();
	}else MessageBox("该武将已存在,请确认是否输入正确,或者选用修改功能");
}

void CSanGuo_View::OnClickListShow(NMHDR* pNMHDR, LRESULT* pResult) //当点击列表行的时候
{
	// TODO: Add your control notification handler code here
	int nItem = -1;                 //用于记录鼠标点击列表中第几行
	nItem = m_ListShow.GetNextItem(nItem,LVNI_SELECTED);
	m_iSelect = nItem;              //m_iSelect用于记录鼠标点击列表中第几行
/*
	m_strName   = m_ListShow.GetItemText(nItem,0);//error:这种显示方式要求一定要先在列表中显示
	m_strNameEx = m_ListShow.GetItemText(nItem,1);
	m_strPlace  = m_ListShow.GetItemText(nItem,2);
	m_strForce  = m_ListShow.GetItemText(nItem,3);
	m_strIntel  = m_ListShow.GetItemText(nItem,4);
*/
	m_pSet->Move(nItem);
	m_strName   = m_pSet->m_column1;
	m_strNameEx = m_pSet->m_column2;
	m_strPlace  = m_pSet->m_column3;
	CString t = "";
	t.Format("%d",m_pSet->m_column4);
	m_strForce  = t;
	t.Format("%d",m_pSet->m_column5);
	m_strIntel  = t;
	m_strShort  = m_pSet->m_column8;
	m_pSet->MoveFirst();
	UpdateData(false);

	*pResult = 0;
}

void CSanGuo_View::ShowList()       //用于显示列表的函数
{
	m_ListShow.DeleteAllItems();    //把前面显示的全删除(否则会在上次显示内容后接着显示)
	CString t = "";
	m_pSet->MoveFirst();
	/*
/////////////////////////////////////////////////////////////////////////////////////////
	CImageList m_image;
//	m_image.Create(IDR_MAINFRAME,16,1,COLOR_WHITE); 
	m_image.Create(32,32,ILC_COLOR8 | ILC_MASK,1,1);
	m_ListShow.SetImageList(&m_image,LVSIL_NORMAL);
	m_ListShow.SetItem(0,0,LVIF_IMAGE,_T("test"),2,0,0,0,0); 
/////////////////////////////////////////////////////////////////////////////////////////
*/
	for(int i = 0;!m_pSet->IsEOF();i++)
	{
		m_ListShow.InsertItem(i,m_pSet->m_column1/*,m_image.Add(AfxGetApp()-> LoadIcon(IDR_MAINFRAME))*/);//在列表中插入一列表项
		m_ListShow.SetItemText(i,0,m_pSet->m_column1);//给参数1的列表项赋第参数2个列的值
		m_ListShow.SetItemText(i,1,m_pSet->m_column2);
		m_ListShow.SetItemText(i,2,m_pSet->m_column3);
		t.Format("%d",m_pSet->m_column4);
		m_ListShow.SetItemText(i,3,t);
		t.Format("%d",m_pSet->m_column5);
		m_ListShow.SetItemText(i,4,t);
		m_pSet->MoveNext();
	}
	m_pSet->MoveFirst();
}

void CSanGuo_View::OnButtonChange() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	m_pSet->MoveFirst();
	while(m_strName != m_pSet->m_column1 && !m_pSet->IsEOF()) m_pSet->MoveNext();
	if(m_pSet->IsEOF())             //如果此记录集为空
	{
		MessageBox("此武将不存在,无法修改!!");
		return;
	}
	if(IDNO == MessageBox("是否真的要修改此武将信息??","提示",MB_YESNO)) return;//取消修改
	m_pSet->Edit();                 //要修改一定要先调用这个
//	m_pSet->m_column1 = m_strName;  //error:这一句多余(主键不能修改)
	m_pSet->m_column2 = m_strNameEx;
	m_pSet->m_column3 = m_strPlace;
	m_pSet->m_column4 = atol(m_strForce);//atol:把字符串转成int的函数(要头文件stdlib.h)
	m_pSet->m_column5 = atol(m_strIntel);
	m_pSet->m_column8 = m_strShort;
	m_pSet->Update();
	m_pSet->Requery();

⌨️ 快捷键说明

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