Windows编程之旅(四)
来源:互联网 发布:开源wiki系统 php 编辑:程序博客网 时间:2024/06/03 18:37
贴图
#include <windows.h>#pragma comment(lib,"winmm.lib")#define WINDOWS_WIDTH 800#define WINDOWS_HEIGHT 600#define WINDOWS_TITLE L"--这是一个特殊而安静夜晚--"HDC g_hdc = NULL,g_mdc = NULL; //全局设备环境句柄 HBITMAP g_hBitMap = NULL; //定义一个位图句柄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"ThisIsASpecialAndQuietNight";wndClass.lpszMenuName = NULL;wndClass.lpfnWndProc = WndProc;wndClass.style = CS_HREDRAW | CS_VREDRAW;//2.注册窗口类if (!RegisterClassEx(&wndClass))return -1;//3.创建窗口HWND hwnd = CreateWindow(L"ThisIsASpecialAndQuietNight", WINDOWS_TITLE,WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOWS_WIDTH, WINDOWS_HEIGHT, NULL, NULL, hInstance, NULL);//4.窗口移动,显示,更新MoveWindow(hwnd, 250, 80, 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);}}//6. 注销窗口 UnregisterClass(L"ThisIsASpecialAndQuietNight", wndClass.hInstance);return 0;}LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){PAINTSTRUCT paintStruct;switch (message){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); //获取环境句柄//1.加载位图g_hBitMap = (HBITMAP)LoadImage(NULL, L"bmp.bmp", IMAGE_BITMAP,WINDOWS_WIDTH, WINDOWS_HEIGHT, LR_LOADFROMFILE);//2.建立兼容DCg_mdc = CreateCompatibleDC(g_hdc);Game_Paint(hwnd);ReleaseDC(hwnd, g_hdc);return TRUE;}VOID Game_Paint(HWND hwnd){//3.选用位图对象SelectObject(g_mdc, g_hBitMap); //将位图对象 选入g_mdc内存DC中//4.进行贴图BitBlt(g_hdc,0,0,WINDOWS_WIDTH,WINDOWS_HEIGHT,g_mdc,0,0,SRCCOPY);}BOOL Game_CleanUp(HWND hwnd){//释放资源对象DeleteObject(g_hBitMap);DeleteDC(g_mdc);return TRUE;}
阅读全文
0 0
- Windows编程之旅(四)
- 《windows程序设计》(四)-------GDI编程之动态正弦曲线
- 《windows程序设计》(四)-------GDI编程之动态贝塞尔曲线
- 编程之规范(四)
- 《windows核心编程》笔记(四)
- windows编程几个小例子(四)
- windows核心编程(四) 关于进程
- windows基础应用程序编程(四):菜单
- 贪吃蛇详解Windows编程(四)
- Win32 Windows编程 四
- windows编程实验四
- windows可视化编程(四)
- (转载)Windows网络编程系列教程之四:Select模型
- Windows的网络编程-之四-套接字模型
- windows编程之四 WinMain: The Application Entry Poin
- Windows Socket编程TCP范例之四(WSAEventSelect)
- 100个windows平台C++开发错误之四编程
- Windows网络编程系列教程之四:Select模型
- 关于qualcomm平台i2c和spi配置学习
- Unity之NetworkReachability描述网络可达性选项。
- YUM常用命令详解
- C# 克隆类 CloneHelper
- python3 [爬虫入门实战] 爬虫之selenium 模拟QQ登陆抓取好友说说内容(暂留)
- Windows编程之旅(四)
- 高德地图引用,搜索定位
- 【bzoj2626】JZPFAR
- java中的域是什么?
- /bin/sh^M: bad interpreter: No such file or directory 解决办法
- 推荐两份学习 Kotlin 和机器学习的资料
- sql中关于时间的函数用法整理
- 有故障的打字机 题解
- 全面解释java中StringBuilder、StringBuffer、String类之间的关系