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: 在此添加控件通知处理程序代码
}
这就是退出按钮的开关,,,,至于一些变量,都添加在相应的头文件里吧,一定要记得初始化,要不会乱套的,,,
这样就基本差不多了,不正确的地方互相交流学习,有问题在下边留言,我会回复跟您一同解决问题的,
这样就车不多了
,不多说了
版权声明:本文为博主原创文章,未经博主允许不得转载。1楼zhoujielunzhimi昨天 17:20居然看到了exit(0);nexit一般用在console程序中,n界面程序使用PostQuitMessage(0).Re: xbw12138昨天 19:04回复zhoujielunzhimin学习了,谢谢您,我会改进的Re: xbw12138昨天 19:05回复zhoujielunzhimin学习了,谢谢您,我会改进的