📄 sanguo_view.cpp
字号:
// 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 + -