Windows编程之旅(八)
来源:互联网 发布:mysql时间转日期函数 编辑:程序博客网 时间:2024/06/03 18:04
#include <windows.h>#include <tchar.h> //swprintf 打印宽字符到字符串#pragma comment(lib,"winmm.lib") //调用PlaySound函数所需库文件#define WINDOWS_WIDTH 800#define WINDOWS_HEIGHT 600#define WINDOWS_TITLE L"--这是一个美丽而又宁静的夜晚[游戏循环动画显示]--"HDC g_hdc = NULL,g_mdc = NULL; //全局设备环境句柄 HBITMAP g_hSprite[12]; //定义位图句柄数组 存储一组位图int g_iNum = 0; //记录图号DWORD g_tPre=0, g_tNow=0; //g_tPre 记录上一次绘图的时间 g_tNow 此次准备绘图的时间LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lParam);BOOL Game_Init(HWND hwnd); // 游戏初始化 VOID Game_Paint(HWND hwnd); //在此函数中绘画BOOL Game_CleanUp(HWND hwnd); //游戏资源清理int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow){//1.初始化窗口类WNDCLASSEX wndClass = { 0 };wndClass.cbSize = sizeof(WNDCLASSEX);wndClass.cbClsExtra = 0;wndClass.cbWndExtra = 0;wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //白色背景wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); //光标句柄wndClass.hInstance = hInstance;wndClass.hIcon = (HICON)::LoadImage(NULL, L"icon.ico", IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE);wndClass.lpszClassName = L"ForTheDreamOfGameDevelop";wndClass.lpszMenuName = NULL;wndClass.lpfnWndProc = WndProc;wndClass.style = CS_HREDRAW | CS_VREDRAW;//2.注册窗口类if (!RegisterClassEx(&wndClass))return -1;//3.创建窗口HWND hwnd = CreateWindow(L"ForTheDreamOfGameDevelop", WINDOWS_TITLE,WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOWS_WIDTH, WINDOWS_HEIGHT, NULL, NULL, hInstance, NULL);//4.窗口移动,显示,更新MoveWindow(hwnd, 200, 20, WINDOWS_WIDTH, WINDOWS_HEIGHT, true);ShowWindow(hwnd, nCmdShow);UpdateWindow(hwnd);//游戏资源初始化if (!Game_Init(hwnd)){MessageBox(hwnd, L"资源初始化失败", L"消息窗口", 0);return FALSE;}PlaySound(L"鸟之诗.wav", NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);//5.消息循环MSG msg = { 0 };while (msg.message != WM_QUIT){if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)){TranslateMessage(&msg);DispatchMessage(&msg);}else{g_tNow = GetTickCount(); //获取当前系统的时间if (g_tNow - g_tPre >= 100)Game_Paint(hwnd); //当间隔相差0.1s 重新绘画}}//6. 注销窗口 UnregisterClass(L"ForTheDreamOfGameDevelop", wndClass.hInstance);return 0;}LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){//PAINTSTRUCT paintStruct;switch (message){//case WM_TIMER: //定时器信息//Game_Paint(hwnd);//break;//case WM_PAINT: //绘图信息//g_hdc = BeginPaint(hwnd, &paintStruct); //指定窗口 准备绘画//Game_Paint(hwnd); //开始绘画//EndPaint(hwnd, &paintStruct); //结束绘画//ValidateRect(hwnd, NULL); //更新客户区的显示//break;case WM_KEYDOWN: //退出信息if (wParam == VK_ESCAPE)DestroyWindow(hwnd); //销毁窗口 并发出一条WM_DESTROY信息break; case WM_DESTROY:Game_CleanUp(hwnd); //资源清理PostQuitMessage(0); //响应 WM_DESTROY信息break;default:return DefWindowProc(hwnd, message, wParam, lParam);}return 0; //正常退出}BOOL Game_Init(HWND hwnd){g_hdc = GetDC(hwnd); //获取环境句柄wchar_t filename[20]; //用来储存文件名//1.加载位图for (int i = 0; i < 12; i++){memset(filename,0,sizeof(filename)); //初始化filenameswprintf_s(filename,L"%d.bmp",i); //打印宽字符到filenameg_hSprite[i] = (HBITMAP)LoadImage(NULL, filename, IMAGE_BITMAP, WINDOWS_WIDTH, WINDOWS_HEIGHT, LR_LOADFROMFILE);}//2.建立兼容DCg_mdc = CreateCompatibleDC(g_hdc);//3.建立定时器SetTimer(hwnd, 1, 90, NULL); //间隔 0.09s 发出信息 执行命令Game_Paint(hwnd);return TRUE;}//绘制函数VOID Game_Paint(HWND hwnd){//4.恢复图号if (g_iNum == 11) //图号为大于12时 回置0g_iNum = 0;//5.选用位图对象SelectObject(g_mdc, g_hSprite[g_iNum]); //将位图对象图号 选入g_mdc内存DC中//5.进行贴图BitBlt(g_hdc,0,0,WINDOWS_WIDTH,WINDOWS_HEIGHT,g_mdc,0,0,SRCCOPY); //以目前的对象进行 SRCCOPY贴图//6.图号要自增g_iNum++;//7.记录此次的绘图时间g_tPre = GetTickCount();}BOOL Game_CleanUp(HWND hwnd){//KillTimer(hwnd, 1); //删除定时器//释放资源对象for (int i = 0; i < 12; i++)DeleteObject(g_hSprite[i]);DeleteDC(g_mdc);ReleaseDC(hwnd, g_hdc);return TRUE;}
阅读全文
0 0
- Windows编程之旅(八)
- Win32 Windows编程 八
- 100个windows平台C++开发错误之八编程
- QT分析之网络编程(八)
- 剑指offer之编程(八)
- Go语言编程(八)之函数
- DOM编程之八
- windows基础应用程序编程(八)控件简介(一)
- Windows编程之旅(二)
- Windows编程之旅(三)
- Windows编程之旅(四)
- Windows编程之旅(六)
- Windows编程之旅(七)
- Windows编程之旅(九)
- Windows编程之旅(十)
- 《Windows程序设计》读书笔记之八
- C++多线程编程之八
- 游戏编程之八 窗口
- 【SQL server】merge 关键字的使用
- 逻辑回归基本原理
- @SpringBootApplication原理
- 【HDU3466】Proud Merchants
- Shiro简介及认证授权过程
- Windows编程之旅(八)
- ros_qtc_plugin插件的使用视频教程
- Java基础0711
- Lua闭包与上值
- 启动STS编译器一直卡在“populate auto detected configs”
- scikit-learn linearRegression 1.1.10 逻辑回归
- 邮票分你一半-OJ
- Oracle调试经验-查看当前数据库的实例名
- 跳转到系统短信发送页面