公司网站建设代理,网站开发公司杭州网站建设,软件网站设计,无代码应用搭建平台文章目录 文档串行化全部代码 单文档应用程序搭建原理搭建框架Win32 过度到MFC 三部曲设置ID资源全部代码 单文档应用程序设置标题绘图 简单的管理系统部分代码 文档串行化 ui 设计 保存 void CfileDemoDlg::OnBnClickedBtnSave()
{UpdateData();//CFile file(LDemo.dat… 文章目录 文档串行化全部代码 单文档应用程序搭建原理搭建框架Win32 过度到MFC 三部曲设置ID资源全部代码 单文档应用程序设置标题绘图 简单的管理系统部分代码 文档串行化 ui 设计 保存 void CfileDemoDlg::OnBnClickedBtnSave()
{UpdateData();//CFile file(LDemo.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(LDemo.dat);//保存
}读取 void CfileDemoDlg::OnBnClickedBtnRead()
{//CFile file(LDemo.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(LDemo.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_TIMEenum { IDD IDD_FILEDEMO_DIALOG };
#endifprotected: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_castWPARAM(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_castHCURSOR(m_hIcon);
}//保存
void CfileDemoDlg::OnBnClickedBtnSave()
{UpdateData();//CFile file(LDemo.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(LDemo.dat);//保存}//读取
void CfileDemoDlg::OnBnClickedBtnRead()
{//CFile file(LDemo.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(LDemo.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.hCMyDoc::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.hCSDIApp 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,//所有资源IDRUNTIME_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.hIMPLEMENT_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.hIMPLEMENT_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.hIMPLEMENT_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,//所有资源IDRUNTIME_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,LID,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 nSelm_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// CMangerSystmViewIMPLEMENT_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,LID,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 nSelm_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);}