24 MFC文档串行化和单文档应用程序

文章目录

  • 文档串行化
    • 全部代码
  • 单文档应用程序搭建原理
    • 搭建框架
    • Win32 过度到MFC 三部曲
    • 设置ID资源
    • 全部代码
  • 单文档应用程序
    • 设置标题
    • 绘图
  • 简单的管理系统
    • 部分代码

文档串行化

ui 设计
24 MFC文档串行化和单文档应用程序_第1张图片24 MFC文档串行化和单文档应用程序_第2张图片

保存

void CfileDemoDlg::OnBnClickedBtnSave()
{
	UpdateData();
	//CFile file(L"Demo.dat",CFile::modeCreate|CFile::modeWrite);
	第一个参数:文件指针
	第二个参数:模式
	//CArchive ar(&file, CArchive::store);
	//ar << m_strName;
	//ar << m_strSex;
	//ar << m_nAge;
	//ar << m_nHeight;
	//ar << m_fWeight;
	//ar << m_fSalary;
	//ar.Close();
	//file.Close();
	//m_doc.OnNewDocument();//创建一个新文档
	m_doc.OnSaveDocument(L"Demo.dat");//保存
}

读取

void CfileDemoDlg::OnBnClickedBtnRead()
{
	//CFile file(L"Demo.dat",  CFile::modeRead);
	//CArchive ar(&file, CArchive::load);
	注意:一定要按照写入顺序读取,顺序不能乱
	//ar >> m_strName;
	//ar >> m_strSex;
	//ar >> m_nAge;
	//ar >> m_nHeight;
	//ar >> m_fWeight;
	//ar >> m_fSalary;
	//ar.Close();
	//file.Close();
	m_doc.OnOpenDocument(L"Demo.dat");//打开一个文档
	UpdateData(FALSE);//显示
}

定义一个文档类

#pragma once
#include 
class CMyDoc :public CDocument
{
	CMyDoc();
};

添加虚函数判断是否保存还是读取
24 MFC文档串行化和单文档应用程序_第3张图片

void CMyDoc::Serialize(CArchive& ar)
{
	CfileDemoDlg* pMainDlg=(CfileDemoDlg*)AfxGetMainWnd();//获取主对话框
	pMainDlg->Serialize(ar);
}

主对话框内添加Serialize虚函数
24 MFC文档串行化和单文档应用程序_第4张图片

void CfileDemoDlg::Serialize(CArchive& ar)
{
	if (ar.IsStoring())//保存
	{
		//第一个参数:文件指针
		//第二个参数:模式
		//CArchive ar(&file, CArchive::store);
		ar << m_strName;
		ar << m_strSex;
		ar << m_nAge;
		ar << m_nHeight;
		ar << m_fWeight;
		ar << m_fSalary;
	}
	else//读取
	{
		ar >> m_strName;
		ar >> m_strSex;
		ar >> m_nAge;
		ar >> m_nHeight;
		ar >> m_fWeight;
		ar >> m_fSalary;
	}
}

全部代码

// fileDemoDlg.h: 头文件

//

#pragma once
#include "CMyDoc.h"

// CfileDemoDlg 对话框
class CfileDemoDlg : public CDialogEx
{
// 构造
public:
	CfileDemoDlg(CWnd* pParent = nullptr);	// 标准构造函数

// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum { IDD = IDD_FILEDEMO_DIALOG };
#endif

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持


// 实现
protected:
	HICON m_hIcon;

	// 生成的消息映射函数
	virtual BOOL OnInitDialog();
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	DECLARE_MESSAGE_MAP()
public:
	CString m_strName;
	CString m_strSex;
	UINT m_nAge;
	UINT m_nHeight;
	float m_fWeight;
	float m_fSalary;
	CMyDoc m_doc;
	afx_msg void OnBnClickedBtnSave();
	afx_msg void OnBnClickedBtnRead();
	virtual void Serialize(CArchive& ar);
};
// fileDemoDlg.cpp: 实现文件
//

#include "pch.h"
#include "framework.h"
#include "fileDemo.h"
#include "fileDemoDlg.h"
#include "afxdialogex.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CfileDemoDlg 对话框



CfileDemoDlg::CfileDemoDlg(CWnd* pParent /*=nullptr*/)
	: CDialogEx(IDD_FILEDEMO_DIALOG, pParent)
	, m_nAge(0)
	, m_nHeight(0)
	, m_fWeight(0)
	, m_fSalary(0)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CfileDemoDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Text(pDX, IDC_EDIT1, m_strName);
	DDX_Text(pDX, IDC_EDIT2, m_strSex);
	DDX_Text(pDX, IDC_EDIT3, m_nAge);
	DDX_Text(pDX, IDC_EDIT4, m_nHeight);
	DDX_Text(pDX, IDC_EDIT5, m_fWeight);
	DDX_Text(pDX, IDC_EDIT6, m_fSalary);
}

BEGIN_MESSAGE_MAP(CfileDemoDlg, CDialogEx)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BTN_SAVE, &CfileDemoDlg::OnBnClickedBtnSave)
	ON_BN_CLICKED(IDC_BTN_READ, &CfileDemoDlg::OnBnClickedBtnRead)
END_MESSAGE_MAP()


// CfileDemoDlg 消息处理程序

BOOL CfileDemoDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO: 在此添加额外的初始化代码

	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。

void CfileDemoDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 用于绘制的设备上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使图标在工作区矩形中居中
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// 绘制图标
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialogEx::OnPaint();
	}
}

//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CfileDemoDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}


//保存
void CfileDemoDlg::OnBnClickedBtnSave()
{
	UpdateData();
	//CFile file(L"Demo.dat",CFile::modeCreate|CFile::modeWrite);

	第一个参数:文件指针
	第二个参数:模式
	//CArchive ar(&file, CArchive::store);
	//ar << m_strName;
	//ar << m_strSex;
	//ar << m_nAge;
	//ar << m_nHeight;
	//ar << m_fWeight;
	//ar << m_fSalary;
	//ar.Close();
	
	//file.Close();
	//m_doc.OnNewDocument();//创建一个新文档

	m_doc.OnSaveDocument(L"Demo.dat");//保存

	
}


//读取
void CfileDemoDlg::OnBnClickedBtnRead()
{
	//CFile file(L"Demo.dat",  CFile::modeRead);
	//CArchive ar(&file, CArchive::load);
	注意:一定要按照写入顺序读取,顺序不能乱
	//ar >> m_strName;
	//ar >> m_strSex;
	//ar >> m_nAge;
	//ar >> m_nHeight;
	//ar >> m_fWeight;
	//ar >> m_fSalary;
	//ar.Close();
	//file.Close();
	
	m_doc.OnOpenDocument(L"Demo.dat");//打开一个文档
	UpdateData(FALSE);//显示
}


void CfileDemoDlg::Serialize(CArchive& ar)
{
	if (ar.IsStoring())//保存
	{
		//第一个参数:文件指针
		//第二个参数:模式
		//CArchive ar(&file, CArchive::store);
		ar << m_strName;
		ar << m_strSex;
		ar << m_nAge;
		ar << m_nHeight;
		ar << m_fWeight;
		ar << m_fSalary;

	}
	else//读取
	{
		ar >> m_strName;
		ar >> m_strSex;
		ar >> m_nAge;
		ar >> m_nHeight;
		ar >> m_fWeight;
		ar >> m_fSalary;
	}
}
#pragma once
#include 
class CMyDoc :public CDocument
{
public:
	CMyDoc();
public:
	virtual void Serialize(CArchive& ar);
};
#include "pch.h"
#include "CMyDoc.h"
#include "fileDemoDlg.h"

CMyDoc::CMyDoc()
{
}
void CMyDoc::Serialize(CArchive& ar)
{
	CfileDemoDlg* pMainDlg=(CfileDemoDlg*)AfxGetMainWnd();//获取主对话框
	pMainDlg->Serialize(ar);
}

单文档应用程序搭建原理

单文档应用程序(SDI应用程序)是一种基于文档的应用程序,它允许用户打开、编辑和保存单个文档。这种类型的应用程序通常用于文本编辑器、图像编辑器、绘图工具等。

在单文档应用程序中,用户可以打开一个文档,对其进行编辑并将其保存。当用户打开同一个文档时,应用程序会将其加载到内存中供用户编辑。用户可以对文档进行各种操作,如添加、删除、修改和移动文档中的内容。

与多文档应用程序(MDI应用程序)不同,单文档应用程序只允许用户同时打开一个文档。这意味着用户必须先关闭当前文档,然后才能打开另一个文档。

属性设置
24 MFC文档串行化和单文档应用程序_第5张图片

搭建框架

24 MFC文档串行化和单文档应用程序_第6张图片
24 MFC文档串行化和单文档应用程序_第7张图片

Win32 过度到MFC 三部曲

CSDIApp 类

1.建立CWinApp 派生类

class CSDIApp :public CWinApp
{
	DECLARE_DYNCREATE(CSDIApp)  //声明动态创建
public:
	BOOL InitInstance();
};

2.重写CWinAPP
3.定义CWinApp派生类的全局变量

#include "stdafx.h"
#include "SDI.h"
#include "CMainFrame.h"

CSDIApp theApp;//定义CWinApp派生类的全局变量
IMPLEMENT_DYNAMIC(CSDIApp, CWinApp) //实现动态创建
BOOL CSDIApp::InitInstance()
{
	//CMainFrame* pFrame = new CMainFrame;
	//pFrame->Create(NULL, L"框架程序");
	//m_pMainWnd = pFrame;
	//pFrame->ShowWindow(SW_SHOW);
	//单文档
	CSingleDocTemplate* pDocTemplate = new CSingleDocTemplate(
		IDR_MAINFRAME,//所有资源ID
		RUNTIME_CLASS(CMainDoc),//文档类
		RUNTIME_CLASS(CMainFrame),//主窗口框架啊
		RUNTIME_CLASS(CMainView)//视图类
	);

	//添加到文档模板对象中
	AddDocTemplate(pDocTemplate);
	//解析命令行信息
	CCommandLineInfo cmdLineInfo;
	ParseCommandLine(cmdLineInfo);

	//执行命令行命令
	if (FALSE == ProcessShellCommand(cmdLineInfo))
		return FALSE;

	//显示窗口
	m_pMainWnd->ShowWindow(SW_SHOW);
	m_pMainWnd->UpdateWindow();


	return TRUE;
}

MFC 框架类

CMainFrame .h

class CMainFrame :public CFrameWnd 
{
	DECLARE_DYNCREATE(CMainFrame)  //声明动态创建
public:
	CMainFrame();
};

CMainFrame .cpp

#include "stdafx.h"
#include "CMainFrame.h"


IMPLEMENT_DYNAMIC(CMainFrame, CFrameWnd) //实现动态创建

CMainFrame::CMainFrame()
{
}

完成框架
24 MFC文档串行化和单文档应用程序_第8张图片24 MFC文档串行化和单文档应用程序_第9张图片

设置ID资源

设置菜单
24 MFC文档串行化和单文档应用程序_第10张图片设置图标
名字统一24 MFC文档串行化和单文档应用程序_第11张图片
添加快捷键
24 MFC文档串行化和单文档应用程序_第12张图片24 MFC文档串行化和单文档应用程序_第13张图片
添加字符串
24 MFC文档串行化和单文档应用程序_第14张图片24 MFC文档串行化和单文档应用程序_第15张图片工具栏资源
24 MFC文档串行化和单文档应用程序_第16张图片

创建主文档类

#pragma once
#include "stdafx.h"
class CMainDoc :public CDocument
{
	DECLARE_DYNCREATE(CMainDoc)  //声明动态创建
public:
	CMainDoc();
};
#include "CMainDoc.h"
#include "stdafx.h"
IMPLEMENT_DYNAMIC(CMainDoc,CDocument) //实现动态创建
CMainDoc::CMainDoc()
{
}

创建视图类

#pragma once
#include 
class CMainView :public CView
{
		DECLARE_DYNCREATE(CMainView)  //声明动态创建
public:
	CMainView();
};
#include "CMainView.h"
#include "stdafx.h"
IMPLEMENT_DYNAMIC(CMainView, CView) //实现动态创建
CMainView::CMainView()
{
}

24 MFC文档串行化和单文档应用程序_第17张图片

全部代码

CMainDoc.h

#pragma once
#include "stdafx.h"
class CMainDoc :public CDocument
{
	DECLARE_DYNCREATE(CMainDoc)  //声明动态创建
public:
	CMainDoc();
};

CMainDoc.cpp

#include "CMainDoc.h"
#include "stdafx.h"

IMPLEMENT_DYNAMIC(CMainDoc,CDocument) //实现动态创建

CMainDoc::CMainDoc()
{
}

CMainFrame.h

#pragma once
class CMainFrame :public CFrameWnd 
{
	DECLARE_DYNCREATE(CMainFrame)  //声明动态创建
public:
	CMainFrame();
};

CMainFrame.cpp

#include "stdafx.h"
#include "CMainFrame.h"

IMPLEMENT_DYNAMIC(CMainFrame, CFrameWnd) //实现动态创建

CMainFrame::CMainFrame()
{
}

CMainView.h

#pragma once
#include "stdafx.h"
class CMainView :public CView
{
	DECLARE_DYNCREATE(CMainView)  //声明动态创建
public:
	CMainView();
	virtual void OnDraw(CDC* /*pDC*/);
};

CMainView.cpp

#include "CMainView.h"
#include "stdafx.h"
IMPLEMENT_DYNAMIC(CMainView, CView) //实现动态创建
CMainView::CMainView()
{
}


void CMainView::OnDraw(CDC* /*pDC*/)
{
	// TODO: 在此添加专用代码和/或调用基类
}

CMainView.h

class CSDIApp :public CWinApp
{
	DECLARE_DYNCREATE(CSDIApp)  //声明动态创建
public:

	BOOL InitInstance();
};

CMainView.cpp

#include "stdafx.h"
#include "SDI.h"
#include "CMainFrame.h"
#include "CMainDoc.h"
#include "CMainView.h"
CSDIApp theApp;
IMPLEMENT_DYNAMIC(CSDIApp, CWinApp) //实现动态创建

BOOL CSDIApp::InitInstance()
{
	/*CMainFrame* pFrame = new CMainFrame;
	pFrame->Create(NULL, L"框架程序");
	m_pMainWnd = pFrame;
	pFrame->ShowWindow(SW_SHOW);*/

	//单文档
	CSingleDocTemplate* pDocTemplate = new CSingleDocTemplate(
		IDR_MAINFRAME,//所有资源ID
		RUNTIME_CLASS(CMainDoc),//文档类
		RUNTIME_CLASS(CMainFrame),//主窗口框架啊
		RUNTIME_CLASS(CMainView)//视图类
	);

	//添加到文档模板对象中
	AddDocTemplate(pDocTemplate);
	//解析命令行信息
	CCommandLineInfo cmdLineInfo;
	ParseCommandLine(cmdLineInfo);

	//执行命令行命令
	if (FALSE == ProcessShellCommand(cmdLineInfo))
		return FALSE;

	//显示窗口
	m_pMainWnd->ShowWindow(SW_SHOW);
	m_pMainWnd->UpdateWindow();
	return TRUE;
}

单文档应用程序

设置标题

24 MFC文档串行化和单文档应用程序_第18张图片

设置窗口名字
24 MFC文档串行化和单文档应用程序_第19张图片

BOOL CSingleDoc::OnNewDocument()
{
	SetTitle(L"名字");

	return CDocument::OnNewDocument();
}

24 MFC文档串行化和单文档应用程序_第20张图片

设置窗口参数,去除多余标题
24 MFC文档串行化和单文档应用程序_第21张图片

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	cs.cx = 800;
	cs.cy = 600;
	cs.style = cs.style &~FWS_ADDTOTITLE;//去掉风格
	return CFrameWnd::PreCreateWindow(cs);
}

24 MFC文档串行化和单文档应用程序_第22张图片24 MFC文档串行化和单文档应用程序_第23张图片

绘图

在View 中绘图
24 MFC文档串行化和单文档应用程序_第24张图片24 MFC文档串行化和单文档应用程序_第25张图片在frame中绘图
24 MFC文档串行化和单文档应用程序_第26张图片

结论:视图在框架之上

简单的管理系统

视图界面继承CListView
24 MFC文档串行化和单文档应用程序_第27张图片

24 MFC文档串行化和单文档应用程序_第28张图片
重写虚函数
24 MFC文档串行化和单文档应用程序_第29张图片

24 MFC文档串行化和单文档应用程序_第30张图片

void CMangerSystmView::OnInitialUpdate()
{
	CListView::OnInitialUpdate();

	m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
	m_list.ModifyStyle(0, LVS_REPORT|LVS_SHOWSELALWAYS);//设置风格
	m_list.InsertColumn(0,L"ID",LVCFMT_LEFT,100);
	m_list.InsertColumn(0, L"姓名", LVCFMT_LEFT, 100);
	m_list.InsertColumn(0, L"性别", LVCFMT_LEFT, 100);
	m_list.InsertColumn(0, L"年龄", LVCFMT_LEFT, 100);
}

设置菜单24 MFC文档串行化和单文档应用程序_第31张图片
24 MFC文档串行化和单文档应用程序_第32张图片添加窗口
24 MFC文档串行化和单文档应用程序_第33张图片添加类
24 MFC文档串行化和单文档应用程序_第34张图片添加控件变量
24 MFC文档串行化和单文档应用程序_第35张图片

添加

void CMangerSystmView::OnAdd()
{
	CAddDlg addDlg;
	if (IDCANCEL == addDlg.DoModal())
		return;
	int nCount = m_list.GetItemCount();//获取总行数
	CString str;
	str.Format(L"%d",addDlg.m_nID);
	m_list.InsertItem(nCount,str);
	m_list.SetItemText(nCount, 1, addDlg.m_strName);
	m_list.SetItemText(nCount, 2, addDlg.m_strSex);
	str.Format(L"%d", addDlg.m_nAge);
	m_list.SetItemText(nCount, 3, str);
}

24 MFC文档串行化和单文档应用程序_第36张图片

删除

void CMangerSystmView::OnDelete()
{
	POSITION pos = m_list.GetFirstSelectedItemPosition();//获取相中的位置
	int nSel=m_list.GetNextSelectedItem(pos);
	CString str;
	str.Format(L"%d", nSel);
	SetWindowText(str);
	if (nSel < 0)
	{
		MessageBox(L"请选中后在删除");
		return;
	}
	
	if (IDYES == MessageBox(L"确定要删除吗", L"提示", MB_YESNO))
	{
		m_list.DeleteItem(nSel);
	}
}

修改
24 MFC文档串行化和单文档应用程序_第37张图片24 MFC文档串行化和单文档应用程序_第38张图片

void CMangerSystmView::OnModify()
{
	CModifyDlg dlg;
	POSITION pos = m_list.GetFirstSelectedItemPosition();//获取相中的位置
	int nSel = m_list.GetNextSelectedItem(pos);//获取当前选项

	if (nSel < 0)
	{
		MessageBox(L"请选中后在修改");
		return;
	}
	dlg.m_nID=_wtoi(m_list.GetItemText(nSel, 0 ));
	dlg.m_strName = m_list.GetItemText(nSel, 1);
	dlg.m_strSex= m_list.GetItemText(nSel, 2);
	dlg.m_nAge = _wtoi(m_list.GetItemText(nSel, 3));
	if (IDCANCEL == dlg.DoModal())
	{
		return;
	}
	CString str;
	str.Format(L"%d", dlg.m_nID);
	m_list.SetItemText(nSel, 0,str);
	m_list.SetItemText(nSel, 1, dlg.m_strName);
	m_list.SetItemText(nSel, 2, dlg.m_strSex);
	str.Format(L"%d", dlg.m_nAge);
	m_list.SetItemText(nSel, 3, str);

}

添加快捷键
查看菜单ID24 MFC文档串行化和单文档应用程序_第39张图片>设置工具栏
24 MFC文档串行化和单文档应用程序_第40张图片24 MFC文档串行化和单文档应用程序_第41张图片

24 MFC文档串行化和单文档应用程序_第42张图片

部分代码

//MangerSystmView.h

public:
	virtual void OnInitialUpdate();
	afx_msg void OnAdd();
	afx_msg void OnDelete();
	afx_msg void OnModify();
	CListCtrl& m_list ;

// MangerSystmView.cpp: CMangerSystmView 类的实现

//

#include "pch.h"
#include "framework.h"
// SHARED_HANDLERS 可以在实现预览、缩略图和搜索筛选器句柄的
// ATL 项目中进行定义,并允许与该项目共享文档代码。
#ifndef SHARED_HANDLERS
#include "MangerSystm.h"
#endif

#include "MangerSystmDoc.h"
#include "MangerSystmView.h"

#include "CAddDlg.h"
#include "CModifyDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CMangerSystmView

IMPLEMENT_DYNCREATE(CMangerSystmView, CListView)

BEGIN_MESSAGE_MAP(CMangerSystmView, CListView)
	// 标准打印命令
	ON_COMMAND(ID_FILE_PRINT, &CListView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, &CListView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CListView::OnFilePrintPreview)
	ON_COMMAND(ID_ADD, &CMangerSystmView::OnAdd)
	ON_COMMAND(ID_DELETE, &CMangerSystmView::OnDelete)
	ON_COMMAND(ID_MODIFY, &CMangerSystmView::OnModify)
END_MESSAGE_MAP()

// CMangerSystmView 构造/析构

CMangerSystmView::CMangerSystmView():m_list(GetListCtrl())
{
	// TODO: 在此处添加构造代码

}

CMangerSystmView::~CMangerSystmView()
{
}

BOOL CMangerSystmView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: 在此处通过修改
	//  CREATESTRUCT cs 来修改窗口类或样式

	return CListView::PreCreateWindow(cs);
}

void CMangerSystmView::OnInitialUpdate()
{
	CListView::OnInitialUpdate();

	m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
	m_list.ModifyStyle(0, LVS_REPORT|LVS_SHOWSELALWAYS);//设置风格
	m_list.InsertColumn(0,L"ID",LVCFMT_LEFT,100);
	m_list.InsertColumn(0, L"姓名", LVCFMT_LEFT, 100);
	m_list.InsertColumn(0, L"性别", LVCFMT_LEFT, 100);
	m_list.InsertColumn(0, L"年龄", LVCFMT_LEFT, 100);
}


void CMangerSystmView::OnAdd()
{
	CAddDlg addDlg;
	if (IDCANCEL == addDlg.DoModal())
		return;
	int nCount = m_list.GetItemCount();//获取总行数
	CString str;
	str.Format(L"%d",addDlg.m_nID);
	m_list.InsertItem(nCount,str);
	m_list.SetItemText(nCount, 1, addDlg.m_strName);
	m_list.SetItemText(nCount, 2, addDlg.m_strSex);
	str.Format(L"%d", addDlg.m_nAge);
	m_list.SetItemText(nCount, 3, str);
}


void CMangerSystmView::OnDelete()
{
	POSITION pos = m_list.GetFirstSelectedItemPosition();//获取相中的位置
	int nSel=m_list.GetNextSelectedItem(pos);
	CString str;
	str.Format(L"%d", nSel);
	SetWindowText(str);
	if (nSel < 0)
	{
		MessageBox(L"请选中后在删除");
		return;
	}
	
	if (IDYES == MessageBox(L"确定要删除吗", L"提示", MB_YESNO))
	{
		m_list.DeleteItem(nSel);
	}
}

//修改
void CMangerSystmView::OnModify()
{
	CModifyDlg dlg;
	POSITION pos = m_list.GetFirstSelectedItemPosition();//获取相中的位置
	int nSel = m_list.GetNextSelectedItem(pos);//获取当前选项

	if (nSel < 0)
	{
		MessageBox(L"请选中后在修改");
		return;
	}

	dlg.m_nID=_wtoi(m_list.GetItemText(nSel, 0 ));
	dlg.m_strName = m_list.GetItemText(nSel, 1);
	dlg.m_strSex= m_list.GetItemText(nSel, 2);
	dlg.m_nAge = _wtoi(m_list.GetItemText(nSel, 3));
	if (IDCANCEL == dlg.DoModal())
	{
		return;
	}
	CString str;
	str.Format(L"%d", dlg.m_nID);
	m_list.SetItemText(nSel, 0,str);
	m_list.SetItemText(nSel, 1, dlg.m_strName);
	m_list.SetItemText(nSel, 2, dlg.m_strSex);
	str.Format(L"%d", dlg.m_nAge);
	m_list.SetItemText(nSel, 3, str);

}

你可能感兴趣的:(mfc,restful,c++)