《MFC游戏开发》笔记二 建立工程、调整窗口

来源:互联网 发布:linux 打包压缩文件夹 编辑:程序博客网 时间:2024/04/30 13:13

本系列文章由七十一雾央编写,转载请注明出处。

 http://blog.csdn.net/u011371356/article/details/9300383

作者:七十一雾央 新浪微博:http://weibo.com/1689160943/profile?rightmod=1&wvr=5&mod=personinfo

       

 

           要开发游戏,我们得首先建立一个MFC项目(废话,没工程怎么写代码,呵呵)。对于MFC,我先简单的介绍几句吧。用百度百科的话来说就是:“MFC(Microsoft Foundation Classes),是一个微软公司提供的类库(class libraries),以C++类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。”

        要想学好MFC,弄清楚它的原理是需要学习很长时间的,也是蛮困难的一件事情,但是对于利用它做一些应用或者开发一个小游戏并不需要对MFC有多么深刻的理解,而在编程的过程中,大家也会加深对MFC的认识。

       我记得当初自己刚接触MFC的时候,对于那一坨文件很是头痛,但是事实上,与我们的开发有关的文件就那么两三个,不需要理解MFC底层是怎么运行的,同样可以先开发。所以,无论有没有接触过MFC,都是可以很快的利用它来开发的,至于它的原理,大家可以在开发过几个程序,有一定的感性认识后,再去系统的学习。另外,在本文的最后,我会简单介绍windows的消息机制。

      下面,就让我们先动手建立一个MFC工程吧。

      为了照顾新手,对于每一步,我都会给出图文教程,我的开发环境是VS2010,WIN7。


一、建立MFC单文档应用程序


       1.打开你的VS2010,建立新项目,选择MFC应用程序

             

       2.点击确定,出现以下界面

3.点下一步

在这个界面,记得取消“文档/视图结构支持”,因为这个我们用不到,还要取消“使用Unicode库”,并且选择“单个文档”,然后点击确定。至于这三种程序类型的区别,大家可以自己勾选试试,也可以问下度娘谷哥。

4.点击确定后

5.继续点下一步,出现下面界面

我用红色框中的部分,这些选中是建立的窗口的一些属性,大家可以自己试试勾选不同的选项,看看分别有什么效果,在这里我们勾选“最小化框”,“系统菜单”这两项即可。然后就可以点击完成了。

6.运行

到这里,工程就已经建立好了,工程的文件目录如下:

大家可以直接点击运行,就会出现下面的结果了

 

如果大家出现了什么问题,把工程删了重来吧。

 

二、窗口的调整


       1.改变窗口的大小

       到这一步,总算是出现了窗口了,可是大家有木有发现,窗口的大小似乎自己改变不了,在建立工程的过程中,并没有设置窗口大小的地方吖,怎么办呢?

       这个我们可以通过在程序中加入代码来实现。

       大家为自己建立的工程命的名字如果为“XX”,那么大家可以找到“XX.cpp”这个文件,以雾央为例,就是“GameMFC2.cpp”,打开它,找到BOOL  CGameMFC2App::InitInstance()函数,在54行的位置,然后在这个函数末尾加上

[cpp] view plaincopy
  1. //设置窗口大小  
  2. m_pMainWnd->SetWindowPos(NULL,0,0,811,632,SWP_NOMOVE);    
  3. m_pMainWnd->ShowWindow(SW_SHOW);  
  4. m_pMainWnd->UpdateWindow();  

      其中SetWindowPos函数的第四和第五个参数分别表示窗口的宽度,和高度,大家可以调整这两个参数来改变自己窗口的大小。

      PS:这两个参数是包含了窗口边界的,比如高度是包含了标题栏的高度的,如果大家想使游戏画面显示出800x600的,那么宽度和高度大概就需要设置为811x632。

      2.删除菜单栏

      现在窗口已经可以任意调整大小了,哈哈,可以看着状态栏下面的一些图标什么的总是让人不爽,大家玩游戏的时候没怎么看到过这种东西吧?严重破坏游戏画面啊啊。。。。那么,下面我们就来删掉它们。

      这些东西是在建立窗口的时候MFC帮我们生成的,在写一些应用程序的时候很有用,但是对于游戏就成了鸡肋了,不,连鸡肋都比不上。

      首先呢,打开工程中的“MainFrm.cpp“,找到43行,显示的是下面这个函数

[cpp] view plaincopy
  1. int CMainFrame::OnCreate(LPCREATESTRUCTlpCreateStruct)  

     大家看看里面的内容,微软已经帮我们写好了注释,大家可以看到这个函数在创建菜单栏、工具栏等乱七八糟的玩意,大家对于不想要的东西就可以打大开删戒了。雾央当初学习的时候,就是自己尝试着乱删的,每删除一次,就运行一下,看看少了什么东西,建议大家可以试试。

好了,其实里面的大多数东西我们都是不需要的,删除之后,留下的代码就是

[cpp] view plaincopy
  1. if(CFrameWndEx::OnCreate(lpCreateStruct) == -1)  
  2.         return -1;  
  3.      
  4.     // 基于持久值设置视觉管理器和样式  
  5.     OnApplicationLook(theApp.m_nAppLook);  
  6.    
  7.     // 创建一个视图以占用框架的工作区  
  8.     if (!m_wndView.Create(NULL, NULL,AFX_WS_DEFAULT_VIEW, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL))  
  9.     {  
  10.         TRACE0("未能创建视图窗口\n");  
  11.         return -1;  
  12.     }  
  13.     SetMenu(NULL);  
  14.     return 0;  

       是不是少了很多代码?哈哈,来赶紧运行一下看看

       

      嗯,工具栏确实被去掉了,可是菜单栏还在啊,说好的都删呢?

      不碍事,再在后面加上一句代码就好了

      要加的SetMenu(NULL);

      最终这个函数就变成了下面这个样子

 

[cpp] view plaincopy
  1. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)  
  2. {  
  3.      
  4.     if (CFrameWndEx::OnCreate(lpCreateStruct) ==-1)  
  5.         return -1;  
  6.      
  7.     // 基于持久值设置视觉管理器和样式  
  8.     OnApplicationLook(theApp.m_nAppLook);  
  9.    
  10.     // 创建一个视图以占用框架的工作区  
  11.     if (!m_wndView.Create(NULL, NULL,AFX_WS_DEFAULT_VIEW, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL))  
  12.     {  
  13.         TRACE0("未能创建视图窗口\n");  
  14.         return -1;  
  15.     }  
  16.     SetMenu(NULL);  
  17.     return 0;  
  18. }  

    嗯,现在再运行试试

         

    啊,Nice啊,一个只有标题栏的空窗口建立成功了。对,就是这么简单,大家成功了没有?

 

三、关于windows程序的消息机制


       windows程序采用了消息机制,当大家点击一下鼠标左键,就产生了一个鼠标点击消息,按下键盘,就产生了键盘消息,windows操作系统为每个程序维护了一个消息队列,每次大家操作后,产生相应的消息,windows会确定这个消息归属的窗口,并将其添加进该窗口的消息队列。

       而windows应用程序呢,就在一个while(1)循环中,读取消息队列,当读取到消息后,就进行相应的处理,对于游戏,当没有读取到消息,就绘制画面。

       如果大家建立win32 应用程序,就需要自己写建立窗口,显示窗口,消息循环的代码,而MFC将这个过程封装起来了,大家是看不到的,当然也失去了很多灵活性。不过对于我们的游戏开发,影响不是很大。

       我这里简略的介绍了下消息机制,只是希望大家能大概的知道windows程序运行的流程,如果想更深入的了解,那么大家可能就需要读一些书,自己研究下了。

 

        从本章开始,以后的文章应该都会有代码文件,有需要代码的同学,请在本章评论下留下自己的邮箱,我会在看到的第一时间内把工程发送给大家。

 

     《MFC游戏开发》笔记二到这里就结束了,更多精彩请关注下一篇。如果您觉得文章对您有帮助的话,请留下您的评论,点个赞,能看到你们的留言是我最高兴的事情,因为这让我知道我正在帮助曾和我一样迷茫的少年,你们的支持就是我继续写下去的动力,愿我们一起学习,共同努力,复兴国产游戏。

      对于文章的疏漏或错误,欢迎大家的指出。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 买的狗得病了怎么办 剖腹产9天刀口痒怎么办 剖腹产6天刀口痒怎么办 剖腹产2年刀口痒怎么办 破腹产9天刀口痒怎么办 破腹产7天刀口痒怎么办 剖腹产8天伤口痒怎么办 刨腹产9天刀口痒怎么办 破腹产8天刀口痒怎么办 二胎刀口1.1mm薄怎么办 土豪养成记2闪退怎么办 爱上不该爱的人怎么办? 有妇之夫爱上我,怎么办 全身起疙瘩很痒怎么办 怀孕了肚子很痛怎么办 月经来肚子疼的厉害怎么办 孕妇9个月肚子疼怎么办 斗鱼身上长白点怎么办 8个月宝宝肚子疼怎么办 1岁半宝宝肚子痛怎么办 3岁宝宝肚子疼怎么办啊 吃的太辣肚子疼怎么办 2岁半宝宝肚子疼怎么办 2岁宝宝肚子痛哭怎么办 怀孕3个月拉肚子怎么办 一岁宝宝消化不良拉肚子怎么办 后背长好多痘痘怎么办 身上起疹子很痒怎么办 背上长好多痘痘怎么办 月经两三个月不来怎么办 来月经很少是褐色的怎么办 例假一天就没了怎么办 月经来一天就没了怎么办 假体隆胸8年怀孕怎么办 1岁宝宝长湿疹怎么办 2017卓达破产后怎么办 8岁儿童反复发烧怎么办 工商年报报错了怎么办 买房契税票丢了怎么办 合同地址写错了怎么办 货物被海关扣了怎么办