项目说明
挑战6秒是精典的小游戏,通过控制按键来使时钟精准停在6秒整。
本程序仅仅为了学习的目的,还存在很多不完善甚至错误的地方,暂时不去修改了,请谨慎参考。
特别感谢@简单(2864292458@qq.com)同学,本程序即以他的“挑战六秒”程序为基础,添加了部分注释,进行了适当修改并添加了部分功能。
程序效果图
编译环境
- VS2019
- EasyX 2021
源码下载
程序功能
- 基本游戏功能(保留了原程序的全部核心功能)
- 取消标题栏(新)
- 拖动没有标题栏的窗体(新)
- 贴图实现关闭按钮(新)
以下对一些知识点做进一步说明;
1. 取消标题栏
即去掉程序的标题栏。initgraph()绘制总窗体(包括标题栏和主视图)时默认是有标题栏的,虽然可以设置取消“最小化”和“关闭”按钮,但标题栏依然存在。使用SetWindowLong()虽可以去掉标题栏,但主视图会往左上角移动,导致窗体的右边和下边出现黑边(见下图),因此还需要使用WinAPI相关函数(下面代码的最后一行)来消除黑边。
具体做法是:
- 利用GetSystemMetrics(SM_CYCAPTION)获取标题栏的高度;
- 使用CreateRectRgn() 创建一个矩形区域(即initgraph()中原来的长和宽,减去标题栏,剩下的矩形区域);
- 使用SetWindowRgn() 将新创建的矩形区域设置为显示区域;
// 初始化窗体,去掉最小化及关闭按钮
initgraph(800, 600, EW_NOCLOSE | EW_NOMINIMIZE);
// 去掉标题栏
SetWindowLong(GetHWnd(), GWL_STYLE, GetWindowLong(GetHWnd(), GWL_STYLE) & ~WS_CAPTION);
// 获取标题栏的高度
int caption_height = GetSystemMetrics(SM_CYCAPTION);
// 去掉黑色边框
SetWindowRgn(GetHWnd(), Create;RectRgn(0, caption_height, 800, 600 - caption_height), true);
参考资料:
CreateRectRgn function ;
区