扫雷游戏(定时器+GDI+数字时钟)学习收获
来源:互联网 发布:软件退税计算方法 编辑:程序博客网 时间:2024/06/04 01:09
本章设计的技术点如下:
定时器技术实现计时功能
注册表实现英雄榜记录的功能
GDI技术实现雷区的绘制功能
双缓冲技术感悟:
1、CPainDC dc(this) 获取当前设备
2、CDC dcMemory 定义一个内存设备
3、dcMemory.CreateCompatibleDC(&dc) 创建一个与当前设备兼容的位图
4、dc.BitBlt(... , &deMemory , ...) 将内存设备上的内容复制到当前设备上
总的来说,就是 不要有什么要贴的图片就往当前设备上贴,先全部往内存设备上贴,然后再一起往 当前设备上贴,
这样就可以防止双缓冲了
<span style="font-size:14px;">void CMineGameDlg::SetCheckedLevel(){<span></span>if (m_pSubMenu)<span></span>{<span></span>m_pSubMenu->CheckMenuItem(IDM_PRIMARY, MF_UNCHECKED | MF_BYCOMMAND);<span></span>m_pSubMenu->CheckMenuItem(IDM_SECOND, MF_UNCHECKED | MF_BYCOMMAND);<span></span>m_pSubMenu->CheckMenuItem(IDM_ADVANCE, MF_UNCHECKED | MF_BYCOMMAND);<span></span>m_pSubMenu->CheckMenuItem(IDM_CUSTOM, MF_UNCHECKED | MF_BYCOMMAND);<span></span>switch(m_uLevel)<span></span>{<span></span>case LEVEL_PRIMARY:<span></span>m_pSubMenu->CheckMenuItem(IDM_PRIMARY, MF_CHECKED | MF_BYCOMMAND);<span></span>break;<span></span>case LEVEL_SECONDRY:<span></span>m_pSubMenu->CheckMenuItem(IDM_SECOND, MF_CHECKED | MF_BYCOMMAND);<span></span>break;<span></span>case LEVEL_ADVANCE:<span></span>m_pSubMenu->CheckMenuItem(IDM_ADVANCE, MF_CHECKED | MF_BYCOMMAND);<span></span>break;<span></span>case LEVEL_CUSTOM:<span></span>m_pSubMenu->CheckMenuItem(IDM_CUSTOM, MF_CHECKED | MF_BYCOMMAND);<span></span>break;<span></span>default: <span></span>break;<span></span>}<span></span>}} </span>
总结:这段函数的功能就是菜单栏中的选钩 的功能,标记某项正在被使用中。
mfc中怎样在一个基于对话框程序中添加菜单栏?
1.新建一个菜单资源,命名ID为IDM_USER
2.打开对话框资源,然后右键->属性->常规 里面有个"菜单" 下拉框,然后选择IDM_USER!
3.编译连接即可;IDM_USER菜单资源,就加入到对话框上面了
<span style="font-size:14px;">void CMineGame_CopyDlg::DrawStartButton(CPaintDC &dc){<span></span>CDC cdc;<span></span>cdc.CreateCompatibleDC(&dc);<span></span>cdc.SelectObject(m_bmpFace); // 把位图资源加载进来<span></span>dc.StretchBlt(m_uBtnRect[0], 16, 24, 24, &cdc, 0, 24 * m_uBtnState, 24, 24, SRCCOPY); <span></span>// 这个特别重要,,”24 * m_uBtnState ” 看似选择不同的位图,其实就只有一个长的位图,根据每个表情的宽度相同,高度也相同,根据表情的不同状态,选择<span></span><span></span>不同的高度,也就选择了不同的表情<span></span>dc.Draw3dRect(m_uBtnRect[1], 15, 26, 26, m_clrDark, m_clrDark);}</span>
总结:这种方法很不错,根据每个变量的状态,选择相应的位图,而且位图就只有一张只不过这种大小一样的东西,要怎么画呢??用什么软件画呢??
杂收获:
为了防止用户定义的消息ID与系统的消息ID冲突,MS(Microsoft)定义了一个宏WM_USER,小于WM_USER的ID被系统使用,大于WM_USER的ID被用户使用
总结:
这个扫雷游戏确实给了我很多丰富的学习,特别是作者的编程思想,清晰,有条理,似乎这一切的过程都在他的计划中,一步一个步骤来。具体收获如下:
1、知道了GDI技术的大概使用方法,说白了,一切可见之物都是使用GDI技术画出来的。无论是主游戏区还是辅助区,都是一笔一画,画出来的,而GDI技术不过那几个函数,但是如何灵活使用它们,确是需要智慧
2、表情,时钟技术,雷数目的绘画,这个实在太妙了,它是通过一长串的Bitmap,其实就一张图,然后根据需要选择相应的一部分,使用到的函数是 stretchBlt();
3、注册表技术,它相当于一个小的数据库,可以存排名版的数据,其中的函数不外乎那几个,创建,打开,查询,写入,退出
现在知道了有这么一个东西,以后需要就用它
4、具体的实现技术,通过左键按下,抬起,右键按下,抬起,作者自家还添加了左右键同时按下和抬起,很不错的想法,得学学。
5、在编程中,有点妙的地方是它的结构体,每个雷区都包含了它的众多属性,而作者本人却把这些属性都放在结构体里,实在值得学习。
额外收获:
在学习过程中,遇到困难不要轻易放弃,也不要急着完成任务,要正在融入到作者的程序代码里,享受获得知识的整个过程,知识不应该只是知识,而是要用情感去体会它,这样才不会觉得枯燥,而且有往下继续学的渴慕与动力,加油!!!
- 扫雷游戏(定时器+GDI+数字时钟)学习收获
- 桌面时钟(GDI实现) 学习总结
- JS 定时器和数字时钟
- 刚刚写的单片机数字时钟(定时器),献丑了
- STM32学习笔记(3):系统时钟和SysTick定时器
- STM32学习笔记(3):系统时钟和SysTick定时器
- STM32学习笔记(3):系统时钟和SysTick定时器
- STM32学习笔记(一)时钟和定时器
- STM32学习笔记(3):系统时钟和SysTick定时器
- 扫雷游戏(VC实现)
- 扫雷游戏(js版)
- GDI绘图入门实例——数字时钟
- C#扫雷游戏-2(游戏部分)
- js笔记(9)之定时器&&数字时钟&&延时提示框
- 扫雷游戏
- 扫雷游戏
- 扫雷游戏
- 扫雷游戏
- c# 程序员学习android(1)引导界面--viewpager的使用
- HDOJ 2795 Billboard(单点更新+区间最值)
- Hadoop 例子之 WordCount
- BingMap地图显示中文
- Android酷炫实用的开源框架(UI框架)
- 扫雷游戏(定时器+GDI+数字时钟)学习收获
- [iOS]CoreText 学习笔记(1)
- 多线程并发问题(一)
- manacher算法
- Android面试中可能会问的Java面试题
- 《java设计模式》之备忘录模式
- C++模板类详解
- android studio 配置学习
- Dijkstra算法 之 C语言详解