mfc 学习的第七天(完结)

mfc 学习的第七天

1、新建项目

1.1根据向导创建项目
首先,新建MFC项目(SaleSystem),基于单文档,MFC标准项目,同时去掉工具栏(去掉勾选 使用传统的停靠工具栏)。

1.2添加预处理指令
由于微软在VS2013中不建议在使用C/C++的传统库函数scanf,strcpy,sprintf等,所以直接使用这些库函数会提示C4996错误。
VS建议采用带_s的函数,如scanf_s,strcpy_s,但这些并不是标准C/C++函数。想要继续使用此函数,需要添加_CRT_SECURE_NO_WARNINGS这个预定义。
在项目→属性→C/C++→预处理器→预处理器定义中添加_CRT_SECURE_NO_WARNINGS

1.3设置窗口属性
1.3.1设置图标
打开资源视图,添加本地ICO图标,在res文件夹中添加我们提前准备的图标资源。
在资源的属性中修改ID(ID_ICON_WIN)
在CMainFrame的OnCreate()中添加如下代码:

	//设置图标,IDI_ICON_WIN为图标资源ID
	SetClassLong(m_hWnd, GCL_HICON, (LONG)AfxGetApp()->LoadIconW(IDI_ICON_WIN));

1.3.2设置窗口大小和居中显示
还是在CMainFrame的OnCreate()中接着写代码:

	//设置窗口的位置和大小:CWnd::MoveWindow
	//0,0 起点坐标x和y
	//800,500 窗口宽度和高度
	MoveWindow(0, 0, 800, 500); 
	//设置居中显示
	CenterWindow(); 

1.3.3设置窗口标题
在CSaleSystemDoc文档类中的OnNewDocument()函数中添加如下代码:

	//设置窗口标题前缀,CDocument::SetTitle
	SetTitle(TEXT("销售管理系统"));
在CMainFrame的OnCreate()中添加如下代码: 
	//设置窗口标题后缀
	SetTitle(TEXT("销售管理系统")); 

2、文件处理
2.1文件内容格式
登录用户信息:
login.ini
商品信息:
stock.txt
m
2.2设计文件处理类CInfoFile
2.2.1添加文件处理类CInfoFile
右击项目→添加→添加现有项→选择中InfoFile.h .cpp→确定
2.2.2头文件InfoFile.h的设计
定义两个配置文件路径宏:
#define _F_LOGIN “./login.ini”
#define _F_STOCK “./stock.txt”
添加文件信息结构体,具体如下:

struct msg
{
	int id;				//商品id
	string name;	//商品名
	int price;			//商品价格
	int num;			//商品个数
};

商品很多,而且要经常添加删除,可以考虑用链表来存储,所以,在成员变量中添加list类型的成员变量:

	list<msg> ls;	//存储商品容器
	int num;			//用来记录商品个数
项目中需要读写的文件有两种,用户信息配置文件和商品信息文件。具体API接口如下:
	//读取登陆信息
	void ReadLogin(CString &name, CString &pwd);
	//修改密码
	void WritePwd(char* name, char* pwd);
	// 读取商品数据
	void ReadDocline();
	//商品写入文件
	void WirteDocline();
	//添加新商品
	void Addline(CString name, int num, int price);

|3、登录对话框
3.1 ui设计
3.1.1添加对话框资源(ID修改为DIALOG_LOGIN),添加所需控件:

3.1.2选中对话框→右击→添加类→类名:CLoginDlg

3.1.3根据需求,控件关联所需变量
用户名编辑区关联CString m_user,密码编辑区关联CString m_pwd

3.2功能实现
3.2.1在对话框类中,重写OnInitDialog函数,进行初始化,设置一些默认登录信息。

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

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

	//默认的登录信息
	CInfoFile file;
	CString name, pwd;
	file.ReadLogin(name, pwd);

	m_user = name;
	m_pwd = pwd;
	//同步到控件中
	UpdateData(FALSE);

	return TRUE;  // return TRUE unless you set the focus to a control
	// 异常:  OCX 属性页应返回 FALSE
}

3.2.2登录窗口的创建
在应用程序类CSaleSystemApp的InitInstance()里面的APP创建之前创建登录对话框:

BOOL CSaleSystemApp::InitInstance()
{
	// 如果一个运行在 Windows XP 上的应用程序清单指定要
	// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
	//则需要 InitCommonControlsEx()。  否则,将无法创建窗口。
	INITCOMMONCONTROLSEX InitCtrls;
	InitCtrls.dwSize = sizeof(InitCtrls);
	// 将它设置为包括所有要在应用程序中使用的
	// 公共控件类。
	InitCtrls.dwICC = ICC_WIN95_CLASSES;
	InitCommonControlsEx(&InitCtrls);

	//创建登录窗口,并以模态方式创建
	CloginDlg dlg;
	dlg.DoModal();

	CWinApp::InitInstance();

3.2.3登录按钮功能实现
//登录按钮处理函数

void CloginDlg::OnBnClickedButton1()
{
	// TODO:  在此添加控件通知处理程序代码
	//登录按钮点击事件
	UpdateData(TRUE);//更新控件数据到对应变量

	if (m_user.IsEmpty()||m_pwd.IsEmpty())
	{
		MessageBox(TEXT("输入内容不能为空"));
		return;
	}


	//获取正确的值
	CInfoFile file;
	CString name, pwd;
	file.ReadLogin(name,pwd);

	if (name == m_user) //用户名一致
	{
		if (pwd == m_pwd) //密码一致
		{
			//关闭当前对话框
			CDialog::OnCancel();
		}
		else
		{
			MessageBox(TEXT("密码有误"));
		}
	}
	else
	{
		MessageBox(TEXT("用户名有误"));
	}
 
}

3.2.4取消按钮功能实现

//取消按钮功能实现
void CloginDlg::OnClose()
{
	// TODO:  在此添加消息处理程序代码和/或调用默认值

	//关闭当前对话框
	//CDialogEx::OnClose();
	exit(0);
}

3.2.5右上角关闭按钮功能实现
选中对话框模板→右击→属性→消息→WM_CLOSE

void CloginDlg::OnClose()
{ 
	// TODO:  在此添加消息处理程序代码和/或调用默认值

	//关闭当前对话框
	//CDialogEx::OnClose();
	exit(0); //结束整个程序
}

3.2.6编辑区回车键关闭对话框问题解决
CloginDlg类→属性→重写→OnOK

void CloginDlg::OnOK()
{
	// TODO:  在此添加专用代码和/或调用基类

	//CDialogEx::OnOK();
}

4、静态拆分窗口
4.1自定义MFC视图类
自定义两个类:CSelectView和CDisplayView(它的基类必须是视图类)。
CSelectView继承于CTreeView,CDisplayView继承于CFromView。
项目右击→添加→类→MFC类→添加→取类名,设置基类→完成

4.2通过CSplitterWnd类拆分窗口
4.2.1CMainFrame类中,声明CSplitterWnd类型的对象:
private:
CSplitterWnd m_spliter; //切分窗口类对象
4.2.2重写框架类CMainFrame的OnCreateClient函数。
把OnCreateClient()函数的返回值改为return TRUE;

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
	// TODO:  在此添加专用代码和/或调用基类

	//return CFrameWnd::OnCreateClient(lpcs, pContext);
	return TRUE;
}

静态拆分实现代码如下:

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
	// TODO:  在此添加专用代码和/或调
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shark_xk88

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值