网页游戏微端制作过程遇到的问题和知识点

本文分享了使用MFC开发游戏微端的经验,包括自绘制窗体、解决CWebBrowser2快捷键问题、实现程序自更新及兼容UAC限制等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网页游戏微端制作过程遇到的问题和知识点


最近接到个需求是制作我们游戏的微端,上头丢给我一个创建好的MFC程序,

包含一个主窗体MainFrm,一个内嵌窗体ChildView,

ChildView中初始化时创建控件CWebBrowser2,通过CWebBrowser2打开游戏网页,并装载引擎DLL。

目的是达到登录帐号并执行游戏的全过程。


第一个要点就是自绘制窗体:

           因为系统创建的窗体的标题栏是肯定不能用的,就必须自己绘制整个客户区并取消系统的标题栏及附带的最小化、最大化、关闭等按钮。

           参考:

                1   终结mfc标题栏重绘

                2   MFC 改变控件大小和位置

           游戏登陆页面Launcher的外框贴图需要镂空绘制

           参考:

                1   MFC 创建不规则窗体      这个方法效率高,可以在一秒内绘制出来

                2   MFC 绘制不规则窗体      这个方法第一次绘制时会卡几秒甚至二十几秒,作为游戏微端,这个启动时间无法接受

                3   MFC 双缓冲图形刷新

         

          然后就是各种按钮功能的具体实现,包括窗体不同状态下的大小绘制等问题

           参考:

               1    Windows窗口消息        

               2    MFC GetWindowRect, GetClientRect和ScreenToClient       

               3    MFC 程序最小化到系统托盘区的一个简单实例 

               4    怎样使程序最小化后隐藏在任务栏的右下角 

               5    MFC 响应双击事件                           用于双击自绘制标题栏响应最大化/恢复

               6   关于WM_NCHITTEST消息              用于移动我们自绘制的无标题窗体

               7   MFC 用默认浏览器打开网页          

          绘制最大化程序时遇到问题,因为需求是不覆盖任务栏的最大化,

          所以使用了

          CRect reWnd;

         ::SystemParametersInfo(SPI_GETWORKAREA,0,&rtWnd,0);

         来获取桌面工作区域大小,但是自绘制的时候,右边和下面与任务栏连接处会有两条缝隙无法绘制到。

         后来用  int  frameSIze = ::GetSystemMetris(SM_CYFRAME); 

         获取了自身窗体的边框大小, 然后将上面获得的工作区的宽高分别补上frameSIze,才绘制了无缝贴合任务栏的窗体。

        

         CWebbrowser2内嵌网页的输入框出现无法响应TAB、复制、粘贴等快捷操作的问题

         最后找到了解决方案,是在ChildView中加入以下消息处理

        

    BOOL   CMyView::PreTranslateMessage(MSG*   pMsg)  
    {  
            if   (IsDialogMessage(pMsg))  
                    return   TRUE;  
            else  
                    return   CWnd::PreTranslateMessage(pMsg);  
    }  

        参考:             

             1   CWebBrowser 中处理回车相应的问题


        

第二个要点就是程序的自更新下载:

           我不想再写一个自更新程序,于是就将更新程序都集成在微端中,

           主要思路是:

           先到指定路径下下载一个版本文件,其中包含需要下载更新的文件名 和其对应最新版本的文件MD5码。

           校验本地文件的MD5码和版本文件中是否相同,不同的则执行下载。

           其中比较麻烦的是本身程序exe文件的更新,由于这个时候程序是启动的状态,无法修改对应exe文件。

           对此,我采用的方式是先下载一份备份文件,重命名为XXX.update.exe,然后通过shell启动新的.update.exe并同时关闭原exe。

           exe启动时判定是.update.exe启动还是原exe启动,

           当.update.exe启动时,先删除原exe,拷贝一份.update.exe重命名为XXX.exe,然后重新启动原exe,关闭更新程序自身,

           反之则删除XXX.update.exe,执行后面的逻辑。

          参考:

                 1   MFC通过URL下载并保存文件代码 

                 2   CHttpConnection::OpenRequest

                 3   获取文件的MD5码

 

         

          在Win7等系统下,由于有User Account Control(UAC)限制,

          导致部分开启UAC功能的玩家由于XXX.exe无法启动下载的XXX.update.exe而导致更新过程失败。

          参考:  

                 1  MFC编程:Win7下支持弹出UAC对话框获取管理员权限   

                 2 程序调用ShellExecuteEx打开其他程序(兼容UAC获取管理员权限)

          


后期维护中用到的知识:

使用ShellExecuteEx调用控制台程序(exe)并传入多个参数 





游戏测试分析》 1 第1章 游戏测试的基本概念 4 1.1 产生背景 4 1.2 基本概述 4 1.3 工作原理 5 1.4 测试流程 5 1.5 设计评审 6 1.6 可玩性测试 6 1.7 策划测试 7 1.8 游戏压力测 7 1.9 经典解析 7 第2章 游戏类型 9 2.1 分类方法 9 2.1.1 按游戏方式 9 2.1.2 游戏内容 9 2.1.3 按游戏载体 9 2.1.4 按游戏平台 10 2.1.5 按玩家人数 10 2.1.6 按游戏地区 10 2.2 游戏分类 11 2.2.1 动作游戏 11 2.2.2 冒险游戏 12 2.2.3 模拟游戏 12 2.2.4 角色扮演游戏 14 2.2.5 策略游戏 14 2.2.6 其余大类 15 2.3 其他游戏类型 16 第 3 章 游测试 17 3.1安装、运行、卸载测试 17 3.2 UI测试 17 3.4 功能测试 18 3.5 性能测试 18 3.6 兼容性测试 18 3.7 安全测试 19 3.8 回归测试 19 3.9升级、更新测试 20 第4章 页游测试 21 4.1 页游游戏特点 21 4.2 页游种类 23 4.2.1 策略类 23 4.2.2 宠物养成类 23 4.2.3 网页MMORPG 23 4.2.4 休闲竞技类 23 4.2.5 模拟经营类 24 4.3 页游困境 24 4.3.1 技术瓶颈 24 4.3.2 挑战 24 4.3.4 IP战略 24 4.4页游测试 25 4.4.1 页游常见的安全问题、防御方式与挽救措施 25 4.4.2 Web前性能测试及优化技巧 40 4.4.3 兼容性测试 42 第 5 章 手游测试 44 5.1 权限测试 44 5.2安装、运行、卸载测试 44 5.3 UI测试 44 5.4 功能测试 44 5.5性能测试 45 5.6中断测试 45 5.7兼容测试 45 5.8安全测试 45 5.9回归测试 46 5.10升级、更新测试 46 5.11 用户体验测试 46 第 6 章 游戏封测、内测公测 47 6.1 封测 47 6.1.1 定义 47 6.1.2 介绍 47 6.1.3 意义 47 6.2 内测 47 6.2.1 定义 47 6.2.2 流程 48 6.3 压测 48 6.3.1 定义 48 6.3.2 起因 48 6.3.3 关于压测 48 6.3.4 压测方式 49 6.4 公测 50
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值