windows程序设计——飞机大战笔记(单文档文件登陆界面)

//////////////2015/07/21////////////////

/////////////by xbw///////////////////////

/////////////环境 VS 2013////////////

飞机大战做的差不多了,闲来无事加点高大上的东西,关于单文档的登陆界面;;;

界面有点丑,但是足够账号登陆了,,先试一把;

还不错吧,该有的都有了;;

下面说一下过程 、、、、、、

首先,我们要在资源视图中创建一个Dialog对话框;;;

先大体画一下这个对话框,自己设计就好了,然后在空白处右键添加类,给这个对话框添加类;

这里呢,我添加了一个loading类,英语不是太好,胡乱写点高大上的英文;;;

在哪用对话框我们就需要吧#include "loading.h"加为他的头文件,,,

这样呢,我在view类中建了一个函数

BOOL CPlaneGameView::Indlg()
{
 loading dlg;
 //opening = TRUE;
 if (dlg.DoModal() == IDOK)
 {
  Invalidate();
  opening = dlg.open1;
 }
 return TRUE;
}

调用在

void CPlaneGameView::OnInitialUpdate()
{
	CView::OnInitialUpdate();
	// TODO: 在此添加专用代码和/或调用基类
	//登陆界面
	Indlg();
	//初始化游戏
	if (!opening)
	InitGame();
	else
	exit(0);
}

这个函数中会依次运行;

这样的话登陆界面就会先于单文档窗口显示,

至于opening是我设置的开关,就是点登陆界面的退出按钮时就会执行exit(0),整个程序就结束了,之前遇到的问题是,点了退出按钮后,程序反而运行了飞机大战主程序,哭笑不得,索性把这个按钮删掉了,玩家只能进入游戏才能退出,后来一想这不扯呢吗,哈哈,于是弄了起来;;

先来段loading.cpp的代码;

完整的******

// loading.cpp : 实现文件
//

#include "stdafx.h"
#include "PlaneGame.h"
#include "loading.h"
#include "afxdialogex.h"

// loading 对话框

IMPLEMENT_DYNAMIC(loading, CDialogEx)

loading::loading(CWnd* pParent /*=NULL*/)
	: CDialogEx(loading::IDD, pParent)
	, open(false)
	, open1(false)
{

}

loading::~loading()
{

}

void loading::DoDataExchange(CDataExchange* pDX)
{

}

BEGIN_MESSAGE_MAP(loading, CDialogEx)
	ON_WM_NCHITTEST()
	ON_WM_CTLCOLOR()
	ON_BN_CLICKED(IDCANCEL, &loading::OnBnClickedCancel)
	ON_BN_CLICKED(IDOK, &loading::OnBnClickedOk)
	ON_BN_CLICKED(IDOK2, &loading::OnBnClickedOk2)
END_MESSAGE_MAP()

// loading 消息处理程序

//鼠标拖动窗口移动
LRESULT loading::OnNcHitTest(CPoint point)
{
	// TODO:  在此添加消息处理程序代码和/或调用默认值
	ScreenToClient(&point);

	CRect rc;
	GetClientRect(&rc);

	if (rc.PtInRect(point))
	{
		return HTCAPTION;
	}
	else
	{
		return CDialogEx::OnNcHitTest(point);
	}
}

HBRUSH loading::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
	//HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);

	//CFont font;
	//font.CreatePointFont(200, _T("宋体"), NULL);
	//GetDlgItem(IDC_STATIC)->SetFont(&font);
	// TODO:  在此更改 DC 的任何特性

	//在OnInitDialog()函数中添加:

	// TODO: 在此添加额外的初始化代
	if (nCtlColor == CTLCOLOR_STATIC)
	{
		pDC->SetTextColor(RGB(200, 100, 50));
		pDC->SetBkMode(RGB(200, 100, 50));   //设置背景透明
		return   HBRUSH(GetStockObject(HOLLOW_BRUSH));

	}

	// TODO:  如果默认的不是所需画笔,则返回另一个画笔
	//return hbr;
	return 0;

}

void loading::OnBnClickedCancel()
{
	// TODO:  在此添加控件通知处理程序代码
	open = FALSE;
	CDialogEx::OnCancel();
}

void loading::OnBnClickedOk()
{
	// TODO:  在此添加控件通知处理程序代码
		CString name;
		CString pwd;
		int flog = 1;
		GetDlgItem(IDC_EDIT3)->GetWindowTextW(name);
		GetDlgItem(IDC_EDIT4)->GetWindowTextW(pwd);
		if (name.Compare(_T("xbw12138")) || pwd.Compare(_T("201401061130")))
		{
			if (name.Compare(_T("xbw12138")))
			{
				flog = 0;
				MessageBox(_T("用户名不正确"), _T("提示"));
			}

			if (pwd.Compare(_T("201401061130"))&&flog==1)

			MessageBox(_T("密码不正确"), _T("提示"));
		}
		else
		{
			OnOK();
		}
}

void loading::OnBnClickedOk2()
{
	open1 = FALSE;
	// TODO:  在此添加控件通知处理程序代码
}

LRESULT loading::OnNcHitTest(CPoint point)这个是添加的消息,具体什么消息不再这说明了,请看我的其他文章,鼠标拖动对话框移动的那篇,对,就是这个功能;

HBRUSH loading::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)也是添加的消息,为了使static text等一些空间透明,在有背景图的时候效果很明显,不过这里装逼失败了,一会文章补上;;;;;

void loading::OnBnClickedCancel()

{

// TODO:  在此添加控件通知处理程序代码

open = FALSE;

CDialogEx::OnCancel();

}

这段已经没用了,取消的空间已经被我删除了;;;

void loading::OnBnClickedOk()

{

// TODO:  在此添加控件通知处理程序代码

CString name;

CString pwd;

int flog = 1;

GetDlgItem(IDC_EDIT3)->GetWindowTextW(name);

GetDlgItem(IDC_EDIT4)->GetWindowTextW(pwd);

if (name.Compare(_T("xbw12138")) || pwd.Compare(_T("201401061130")))

{

if (name.Compare(_T("xbw12138")))

{

flog = 0;

MessageBox(_T("用户名不正确"), _T("提示"));

}

if (pwd.Compare(_T("201401061130"))&&flog==1)

MessageBox(_T("密码不正确"), _T("提示"));

}

else

{

OnOK();

}

}

这段是重点了吧算是,检查登陆是否正确,,,虽然是个单机,不过这样也很高大上,后续呢,我将要用xml记录一些数据,试试能不能实现一个账号记录一个分数,弄个排行榜什么的,等我昂;

void loading::OnBnClickedOk2()

{

open1 = FALSE;

// TODO:  在此添加控件通知处理程序代码

}

这就是退出按钮的开关,,,,至于一些变量,都添加在相应的头文件里吧,一定要记得初始化,要不会乱套的,,,

这样就基本差不多了,不正确的地方互相交流学习,有问题在下边留言,我会回复跟您一同解决问题的,

这样就车不多了

,不多说了

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-06 18:37:04

windows程序设计——飞机大战笔记(单文档文件登陆界面)的相关文章

windows程序设计——飞机大战笔记(数据库记录游戏得分)

//////////////////2015/07/23//////////////// //////////////////by xbw////////////////////// /////////////////环境 VS2013//////////// 这个飞机大战呢,做了也有好几天了,我一半以上时间在鼓捣这个数据库,第一次弄,也学到了不少东西,在此记录一下,也分享一下经验:: 接着上次说吧,昨天呢,实现了多组数据的存储与调用,欣喜若狂,昨天就已经试验了这个对用户积分的储存,但是昨天不只

windows程序设计——飞机大战笔记(Access数据库的使用)

//////////////////2015/07/22/////////////////// /////////////////by xbw ///////////////////////// ////////////////环境 VS2013///////////////// 为了登陆界面的注册用的数据库鼓捣的一天了,必须得写篇文章发泄一下了, 昨天发表的文章还是存在一点bug的,不足之处很容易就看出来了,这样的,今天有修改了一下,是大改哦 int first = 1; while (!Db

windows程序设计——飞机大战笔记(解决输入混合password账户,结局自己主动记录数据)

////////////////////2015/07/23/////////////////// ////////////////////by xbw/////////////////////////// ////////////////////环境 VS2013/////////////// 问题又攻克了,攻克了登陆仅仅能用数字登陆的问题.还有自己主动记录数据的问题.. 这个仅仅能用数字登陆是后来调试出来的bug,之前没想到.为了调试方便,仅仅用了账号为1.password为1来測试的,如今

windows程序设计——飞机大战笔记(解决输入混合密码账户,结局自动记录数据)

////////////////////2015/07/23/////////////////// ////////////////////by xbw/////////////////////////// ////////////////////环境 VS2013/////////////// 问题又解决了,解决了登陆只能用数字登陆的问题,还有自动记录数据的问题:: 这个只能用数字登陆是后来调试出来的bug,之前没想到,为了调试方便,只用了账号为1,密码为1来测试的,现在才发现问题,,,其实只

C++MFC编程笔记day07 MFC单文档绘图保存、多文档绘图保存

完善绘图例子(day06中的),加上保存功能 1 设计和编写图形类 CShape 1.1 成员变量 CPoint m_ptBegin; CPoint m_ptEnd; UINT m_nType; 1.2 支持序列化 1.2.1 继承自CObject 1.2.2 添加序列化的声明宏和实现宏 1.2.3 重写虚函数Serilize(),在函数中,完成成员变量的序列化 2 由于保存多个图形,引入MFC的集合类CObArray,保存的是CObject 对象的地址. 3 图形数据需要保存到文档类中,在该类

C++MFC编程笔记day05 文档类-单文档和多文档应用程序

文档类 1 相关类 CDocument类-父类是CCmdTarget类,所以,文档类也可以处理菜单等 命令消息.作用保存和管理数据. 注意事项:如何解决断言错误 2 在视图中显示文档中的数据 2.1 CView::OnInitialUpdate 作用初始化视图,在附加文档之后,显示之前,由框架调用. 2.2 CView::GetDocument 获取与视图相关的文档 2.3 CFrameWnd::InitialUpdateFrame 作用,初始化更新框架,可以引起CView::OnInitial

PHP 高级程序设计(1) - 编码规范及文档编写

PHP 高级程序设计学习笔记20140612 软件开发中的一个重要环节就是文档编写.他可以帮助未来的程序维护人员和使用者理解你在开发时的思路.也便于日后重新查看代码时不至于无从下手.文档还有一个重要的作用,在不用了解要访问对象的细节情况下也能很好的在对象之间进行交互.文档的编写有一些成熟的行业标准格式,遵守这些行业标准将有助于创建易于阅读的代表,并使自动生成手册成为可能. 编码规范 编码规范可能很多开发人员都有各自的观点也意见,且大家不尽相同.其实只要团队成员之间达成一致,遵循同一个标准就好.

MFC:“Debug Assertion Failed!” ——自动生成的单文档程序项目编译运行就有错误

今天照着孙鑫老师的VC++教程学习文件的操作,VS2010,单文档应用程序,项目文件命名为File,也就有了自动生成的CFileDoc.CFileView等类,一进去就编译运行(就是最初自动生成的项目),编译通过,可运行时直接弹出错误框,有点小懵,,,啥都没做就给我看这个: 图一   错误提示框 后来搜索一查,网上好多类似的错误以及解决方案,几乎都试了个遍,有: 方法(1)-重新生成解决方案,或者将项目文件目录下Debug文件夹删了,重新生成Release版: 方法(2)-可以先声明一个临时的C

单文档程序结构

创建过程 下面展示建一个单文档程序的过程,在MFC Application Wizard中第一步做如下选择 不妨Project style选择MFC stardard,Visual style and colors选择Windows Native/Default,其他的选项将创建不同样式的界面. 下一步Compound document support按默认选择None: 下一步是Document Template String文档模板字符串的设置,用于设置文档视结构的一些属性,如下 各选项的意