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

news2025/1/10 20:28:35

文章目录

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

文档串行化

ui 设计
在这里插入图片描述在这里插入图片描述

保存

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 <afxwin.h>
class CMyDoc :public CDocument
{
	CMyDoc();
};

添加虚函数判断是否保存还是读取
在这里插入图片描述

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

主对话框内添加Serialize虚函数
在这里插入图片描述

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 <afxwin.h>
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应用程序)不同,单文档应用程序只允许用户同时打开一个文档。这意味着用户必须先关闭当前文档,然后才能打开另一个文档。

属性设置
在这里插入图片描述

搭建框架

在这里插入图片描述
在这里插入图片描述

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()
{
}

完成框架
在这里插入图片描述在这里插入图片描述

设置ID资源

设置菜单
在这里插入图片描述设置图标
名字统一在这里插入图片描述
添加快捷键
在这里插入图片描述在这里插入图片描述
添加字符串
在这里插入图片描述在这里插入图片描述工具栏资源
在这里插入图片描述

创建主文档类

#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 <afxwin.h>
class CMainView :public CView
{
		DECLARE_DYNCREATE(CMainView)  //声明动态创建
public:
	CMainView();
};
#include "CMainView.h"
#include "stdafx.h"
IMPLEMENT_DYNAMIC(CMainView, CView) //实现动态创建
CMainView::CMainView()
{
}

在这里插入图片描述

全部代码

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;
}

单文档应用程序

设置标题

在这里插入图片描述

设置窗口名字
在这里插入图片描述

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

	return CDocument::OnNewDocument();
}

在这里插入图片描述

设置窗口参数,去除多余标题
在这里插入图片描述

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

在这里插入图片描述在这里插入图片描述

绘图

在View 中绘图
在这里插入图片描述在这里插入图片描述在frame中绘图
在这里插入图片描述

结论:视图在框架之上

简单的管理系统

视图界面继承CListView
在这里插入图片描述

在这里插入图片描述
重写虚函数
在这里插入图片描述

在这里插入图片描述

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);

}

添加快捷键
查看菜单ID在这里插入图片描述>设置工具栏
在这里插入图片描述在这里插入图片描述

请添加图片描述

部分代码

//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);

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/756993.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python+pytest接口自动化(9)-cookie绕过登录(保持登录状态)

目录 cookie工作原理 cookie绕过登录 总结 在编写接口自动化测试用例或其他脚本的过程中&#xff0c;经常会遇到需要绕过用户名/密码或验证码登录&#xff0c;去请求接口的情况&#xff0c;一是因为有时验证码会比较复杂&#xff0c;比如有些图形验证码&#xff0c;难以通过…

旅游信息推荐系统带文档springboot+vue

功能 用户注册和登录&#xff1a;用户可以注册一个账户并登录到系统中。旅游项目展示&#xff1a;系统展示各种旅游项目的信息&#xff0c;包括目的地、行程、费用等。旅游项目搜索和筛选&#xff1a;用户可以搜索和筛选旅游项目&#xff0c;根据目的地、日期、费用等条件。预…

Linux系统终端窗口ctrl+c,ctrl+z,ctrl+d的区别

时常在Linux系统上&#xff0c;执行某命令停不下来&#xff0c;就这几个ctrl组合键按来按去&#xff0c;今天稍微总结下具体差别&#xff0c;便于以后linux系统运维操作 1、ctrlc强制中断程序&#xff0c;相应进程会被杀死&#xff0c;中断进程任务无法恢复执行 2、ctrlz暂停正…

mongodb集群搭建

下载地址&#xff1a; https://www.mongodb.com/try/download/community下载mongodb-linux-x86_64-rhel70-5.0.18 搭建集群 tar -zxvf mongodb-linux-x86_64-rhel70-5.0.18.tgz mkdir -p data/dp cd mongodb-linux-x86_64-rhel70-5.0.18 mkdir -p data/db mkdir log mkdir c…

Ubuntu 23.04安装最新版本Halcon 23.05

Ubuntu 23.04安装最新版本Halcon 23.05 官网下载安装环境变量设置创建快捷方式给个最新ubuntu的镜像源地址 官网下载 去Halcon官网&#xff1a;https://www.mvtec.com/products/halcon/&#xff0c;注册或登录&#xff0c;点击Download&#xff1a; 或者进入大恒网站&#xf…

Ubuntu最新版本23.05配置Flameshot(途中解决疑难杂症)

Ubuntu最新版本23.05配置Flameshot截图软件 安装方法&#xff1a;添加Ubuntu的快捷键遇到的问题解决 安装方法&#xff1a; sudo apt install flameshot出现该页面表示成功&#xff1a; 可以直接在终端输入&#xff1a;flameshot gui flameshot gui进行截图。 添加Ubuntu的…

云计算与大数据——MPI集群配置

什么是MPI集群&#xff1f; MPI&#xff08;消息传递接口&#xff09;是一种用于编写并行程序的标准&#xff0c;它允许在多个计算节点上进行通信和协作。MPI集群配置是指在一个或多个计算节点上设置MPI环境以实现并行计算。 MPI集群配置的步骤&#xff1a; 硬件选型&#x…

三菱PLC上位机测试

利用三菱的MX Component与三菱PLC进行以太网通信&#xff0c;我们可以用官方的dll编写C#代码&#xff0c;特别简单&#xff0c;最后附上整个源码下载。 1. 安装MX Component&#xff08;必须&#xff09;和GX WORKS3&#xff08;主要是仿真用&#xff0c;实际可以不装&#xf…

空间光通信-调制解调滤波与同步

图文并茂&#xff0c;讲解电磁波传播原理_哔哩哔哩_bilibili 深入浅出空间光通信-3.调制解调滤波与同步_哔哩哔哩_bilibili 傅里叶变换这样学&#xff0c;何愁不会呢&#xff1f;直观理解傅里叶变换_哔哩哔哩_bilibili 第二十三课&#xff1a;声音编辑必看&#xff01;&…

【六袆 - windows】windows计划任务,命令行执行,开启计划任务,关闭计划任务,查询计划任务

windows计划任务 查看 Windows 自动执行的指令取消 Windows 中的计划任务启动执行计划任务 查看 Windows 自动执行的指令 您可以使用以下方法&#xff1a; 使用任务计划程序&#xff1a;任务计划程序是 Windows 内置的工具&#xff0c;可以用于创建、编辑和管理计划任务。您可…

pytest+allure运行出现乱码的解决方法

pytestallure运行出现乱码的解决方法 报错截图&#xff1a; 这是因为没有安装allure运行环境或者没有配置allure的环境变量导致&#xff0c;解决方案&#xff1a; 1.安装allure运行环境 官方下载地址&#xff1a;https://github.com/allure-framework/allure2/releases 百度…

JavaSE - 内部类

目录 final定义常量 1. 内部类 1.1 实例内部类 1.1.1 如何获取实例内部类的对象 1.1.2 实例内部类中不能有静态的成员变量 1.1.3 实例内部类方法中可以直接访问外部类中的任何成员 1&#xff09;在实例内部类方法中访问同名的成员时&#xff0c;优先访问自己的&#xff0…

nacos注册中心+Ribbon负载均衡+完成openfeign的调用

目录 1.注册中心 1.1.nacos注册中心 1.2. 微服务注册和拉取注册中心的内容 2.3.修改订单微服务的代码 3.负载均衡组件 3.1.什么是负载均衡 3.2.什么是Ribbon 3.3.Ribbon 的主要作用 3.4.Ribbon提供的负载均衡策略 4.openfeign完成服务调用 4.1.什么是OpenFeign 4.2…

5.2 Python高阶特性之---切片迭代

一、 切片 一般用于提取指定区间内的内容&#xff0c;常用于&#xff1a;str、list、tuple等类型的的局部变量&#xff0c;如下为具体案例1、 【列表切片】 res_list [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]1&#xff09; 无步长: …

C++——类的六大默认成员构造函数

文章目录 1.默认成员函数思维导图2.构造函数定义特性 2.析构函数定义特性 3.拷贝构造函数定义特性 4.赋值构造函数定义特性 5.重载取地址运算符定义特性 6.重载const取地址运算符定义特性 1.默认成员函数思维导图 2.构造函数 定义 在面向对象编程中&#xff0c;构造函数是一种…

RHCSA——Linux网络、磁盘及软件包管理

ZY目录 Linux操作系统讲解&#xff1a;一、网络管理1、NetworkManager1.1、nmtui界面&#xff1a;1.2、nmcli使用方法&#xff1a; 2、配置网络2.1、网络接口以及网络连接2.2、配置方法&#xff1a;2.3、ping命令&#xff1a;2.4、wget命令 二、磁盘管理2.1、分区得两种格式2.1…

HCIP第五次作业

配置IP地址 r1 [r1]int g0/0/0 [r1-GigabitEthernet0/0/0]ip add 12.0.0.1 24 [r1-GigabitEthernet0/0/0]int lo0 [r1-LoopBack0]ip add 192.168.1.1 24 [r1-LoopBack0]int lo1 [r1-LoopBack1]ip add 10.0.0.1 24 r2 [r2]int g0/0/0 [r2-GigabitEthernet0/0/0]ip add 12.0.0.2 …

在vs里配置c运行环境

勾选环境包 勾选完安装就好 创建c项目 选择相关配置 设置名称和位置 创建c后缀文件 一新建项 二设置名字 输出hello world 代码段 运行结果

C++ 文档加密与解密运用【Crypto++】库

一、下载Cryptopp 鼠标放到下面网址&#xff0c;点击下载即可 github地址&#xff08;8.7.0版本&#xff09;&#xff1a;https://github.com/weidai11/cryptopp/releases/tag/CRYPTOPP_8_7_0 二 、下载PEM包 pem包官方地址&#xff1a;PEM Pack - Crypto Wiki 三、调用Cry…

深度学习环境安装|PyCharm,Anaconda,PyTorch,CUDA,cuDNN等

本文参考了许多优秀博主的博客&#xff0c;大部分安装步骤可在其他博客中找到&#xff0c;鉴于我本人第一次安装后&#xff0c;时隔半年&#xff0c;我忘记了当时安装的许多细节和版本信息&#xff0c;所以再一次报错时&#xff0c;重装花费了大量时间。因此&#xff0c;我觉得…