[Visual Studio]MFC游戏开发之回合制对战系统二_by书訢

引子:

感谢阅读


这一篇博客是我们整个MFC游戏的实操第二篇,希望大家多多支持

项目总览地址:http://blog.csdn.net/sx_csu2016sw/article/details/76473309

项目下载地址在文章末尾,如果出现了问题请留言~~


希望作为读者的你们可以多多关注我的作品,并留言或者加我qq一起学习

因为之前自己在学习的时候总是觉得有些博主们讲的有些快,所以我会讲的比较详细,能力好的可以快速掠过~~

若需转载请注明来处:http://blog.csdn.net/SX_csu2016sw

希望你们多多留言,你们的鼓励与指出的不足都是懒癌青年前进的动力




 登陆注册界面预览







登陆与注册的界面实现

开始制作我们的登录界面以及我们的注册界面

现在默认大家都已经有了两个对话框以及绑定的两个类

大家可以先下载我在文章末尾的三个链接文件,整合代码以后打开VS2015进行查看代码(因为我会按照这个项目来进行讲述,可以打开自己的项目按照我之前的步骤操作一翻,等看完这篇以后进行自己的创造哦!切忌照搬,一定要自己打一遍才会有收获哦)

 

上面的类就是我们的登录窗口绑定类,下面的是我们的注册窗口绑定类

今天我们只看这两个类

登录界面:

1.登录的时候对用户一些奇葩操作的一些判断

2.贴图处理(背景图,按钮图....)

3.如果你已经运行了代码,你会发现,登录与注册按钮在鼠标移动上去的时候会改变颜

4.实现界面之间的跳转

注册界面同理

 

接下来讲解上面四个点是怎么实现的:

主要利用IO知识,如果IO流还不清楚的话,建议先找一篇IO流相关的博客进行学习

看到这里

void CjointeffortDlg::OnLButtonDown(UINT nFlags,CPoint point)

CString cstrName;//定义CString类型的变量存储账号密码

CString cstrPassword;

GetDlgItemText(IDC_number, cstrName);//通过我们的ID得到文本框上的输入

GetDlgItemText(IDC_password, cstrPassword);

string strName= CT2A(cstrName);//将CString类型装换为String类型以便后面使用

string strPassword = CT2A(cstrPassword);

 

之后的操作就是很熟悉的IO操作了吧,不管是什么语言转过来做这个想必都看的懂了吧~

下面是一些MFC的操作:

MessageBox(_T("登录成功"),_T("提示"), 1);//弹出一个提示框

SetDlgItemText(IDC_password,_T(""));//清除文本框组件的内容

 

对用户的一些操作判断还是挺简单的,代码应该写的还清楚

 

贴图需要在OnPaint中进行处理

贴图方式很多,可以使用直接贴图也可以使用双缓冲贴图方式。

 

CPaintDC dc(this);//窗口dc

CDC memdc; //内存dc

CBitmap hBmpbg; //位图

GetClientRect(&ClientRect);//设置一个矩形,用来保存窗口大小

//这边的ClientRect是在头文件定义的,这边是一个矩形类,来辅助指定一个区域

 

hBmpbg.CreateCompatibleBitmap(&dc, ClientRect.Width(), ClientRect.Height());

//这边利用之前得到确定大小的矩形类设置位图大小

memdc.CreateCompatibleDC(&dc);//关联c窗口dc与内存dc

CBitmap* OldBitmap = memdc.SelectObject(&hBmpbg);//设置位图

 

CImage imagebg; //背景图片

imagebg.Load(_T("theme//登录//登录总界面发光.png"));//加载背景图   410  505

imagebg.BitBlt(memdc, 0, 0, ClientRect.Width(), ClientRect.Height(), 0, 0, SRCCOPY);

 

dc.BitBlt(0, 0, ClientRect.Width(), ClientRect.Height(), &memdc, 0, 0, SRCCOPY);//进行绘图

 

//将内存dc绘制到窗口上 //还原画刷,删除多余画刷,释放内存dc

memdc.SelectObject(OldBitmap);//将内存DC设置的位图还原,这边是选择资源的函数,方便我们下次绘图使用

hBmpbg.DeleteObject();

memdc.DeleteDC();

 

这边这个画图的东东我再解释一下:

一个窗口有它的内存DC,将其设置一个位图,这样在之后的BitBlt函数中就可以进行绘画了

 

上面的代码是这样的,首先我们得到当前窗口的DC,并主动生成一个内存DC,用来作为缓冲之用,我们先画在缓冲区,之后一起画到窗口上。

 

通过我们头文件的矩形类对象ClientRect通过函数GetClientRect(&ClientRect)将窗口大小得到,之后位图通过我们的矩形类来进行设置大小,并与窗口DC绑定

 

同时CBitmap* OldBitmap = memdc.SelectObject(&hBmpbg)辅助我们保存尚未操作过的位图,以便下一次画图使用。

 

画图的函数中可见我们先画在了内存dc上,然后我们在最后的地方再将内存dc画在了我们的窗口dc上

当然最后不要忘记了再次选择位图资源方便下次使用,同时删除掉我们现在不需要的资源

相信这样之后画图就不是难事了吧

 

只需要计算好位置,找一张大小合适并且美观的图片那么我们的登录界面制作当然就完成了大部分咯


好了现在进入第三部分,书訢为你解答,如果实现鼠标移动到登录和注册界面就会产生变色效果呢?

答案很简单,使用一个变量来控制,在MouseMove中进行设置,通过得到鼠标的坐标来进行操作,如果在指定的矩形区域内就进行改变变量,同时在onpaint()中利用switch或者if来控制

 

但是还有很重要的一点就是:

如代码所示:

if (px < 724 && px > 621 && py <554 && py >496)//判断是否移动到了到注册界面

{

characterone = true;

//PostMessage(WM_PAINT);

charactertwo = false;

CRect buttonRect(621, 496, 724, 554);

InvalidateRect(buttonRect,false);//使得指定区域有效

this->OnPaint();

}

如代码所示,需要设置一个矩形区域并使它有效,并使用onpaint进行重绘这样才可以产生实时改变的效果

实现界面的跳转是十分简单的,可能你不会信但是它就是那么简单

 

之前说到了,每一个窗口都与一个类要进行绑定

我们只需要实例化类的对象,并调用DoModel();函数即可实现跳转

//进入游戏选择英雄与场景

if (interGame)

{

choose ch;

EndDialog(0);

ch.DoModal();

}

如代码块所示,choose类就是与我们选择英雄与场景的窗口绑定的类,同时EndDialog(0)就是关闭当前窗口,只要窗口大小适宜,这样就能实现界面只是变换了图片的感觉了,不会有突兀感。

 

 

 

因为我的等级问题,一共200+MB的文件我只能分多次上传,不便之处多多体谅

所以需要大家自己动手整合一下项目~!

Debug文件:http://download.csdn.net/detail/sx_csu2016sw/9917669

项目主文件:http://download.csdn.net/detail/sx_csu2016sw/9917650

资源文件theme:http://download.csdn.net/detail/sx_csu2016sw/9917643

在文件里面有如何整合文件的图片,按照步骤来,点击SLN后缀的文件即可在VS2015上实现项目的导入,如果有出现断点,可以留言联系我解决,也可检查资源文件theme的路径是不是正确,以及代码中路径是否正确。