Windows API初步实现游戏界面
来源:互联网 发布:复旦医学院考研 知乎 编辑:程序博客网 时间:2024/06/14 12:02
首先将位图资源载入工程
具体实现方法:Insert > Resource > Import 载入位图资源,保存成xxx.rc资源文件,最后编译资源文件,发现左下角会多出一个Resource View选项卡,接着为每个资源取一个容易记忆的ID,这样就将位图资源载入工程了。
下面用LoadBitmap将资源中的文件载入程序,示例代码如下:
HBITMAP bmp_ground=LoadBitmap((HINSTANCE)GetModuleHandle(NULL),(LPCSTR)IDB_GROUND);
双缓冲技术
要在屏幕上显示位图需要用到双缓冲技术,即在一个设备描述表上创建一个与此兼容的设备描述表,然后在这个兼容的设备描述表上创建兼容的位图,接着用SelectObject将位图作用于兼容的设备描述表,最后关键的步骤用Bitblt将兼容DC贴到DC上。
具体实现代码如下:
hdc=GetDC(hwnd);//设备描述表MemDC=CreateCompatibleDC(hdc);//兼容的设备描述表CreateCompatibleBitmap(MemDC,0,0);//兼容的位图SelectObject(MemDC,bmp_cloud);//将位图作用于兼容的设备描述表//BitBlt(hdc,0,0,537,232,MemDC,0,0,SRCCOPY);//将兼容的设备描述表贴到设备描述表上TransparentBlt(hdc,20,80,89,50,MemDC,0,0,89,50,RGB(0,0,0));//该行代码实现功能同上,但实现了背景透明的效果DeleteDC(MemDC);//释放兼容的设备描述表ReleaseDC(hwnd,hdc);//释放设备描述表
API实现按钮的绘制
在WIN32 SDK中,按钮也是属于一种窗口,只不过是附属于某个父窗口的子窗口,因此也可以使用CreateWindow创建一个按钮
HWND hwnd_check;hwnd_check=CreateWindow("BUTTON","开始游戏",WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,350,400,80,28,hwnd,NULL,NULL,NULL);
用以上知识就可以实现一个游戏界面
实现代码:
#include <windows.h>#include "resource.h"LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd ){WNDCLASS wnd;wnd.cbClsExtra=0;wnd.cbWndExtra=0;wnd.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);wnd.hCursor=LoadCursor(hInstance,(LPCTSTR)IDC_CURSOR2);wnd.hIcon=LoadIcon(hInstance,IDI_APPLICATION);wnd.hInstance=hInstance;wnd.lpfnWndProc=WndProc;wnd.lpszClassName="window";wnd.lpszMenuName=NULL;wnd.style=CS_HREDRAW|CS_VREDRAW;RegisterClass(&wnd);HWND hwnd;HWND hwnd_check;hwnd=CreateWindow("window","超级玛丽",WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX & ~WS_THICKFRAME,300,40,800,600,NULL,NULL,hInstance,NULL);hwnd_check=CreateWindow("BUTTON","开始游戏",WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,350,400,80,28,hwnd,NULL,NULL,NULL);ShowWindow(hwnd,nShowCmd);MSG msg;while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}return 0;}LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){HDC hdc;HDC MemDC;PAINTSTRUCT ps;RECT r={0,0,800,600};RECT rc_ground={0,530,800,600};RECT rc_grass={0,500,800,530};HBITMAP bmp_ground=LoadBitmap((HINSTANCE)GetModuleHandle(NULL),(LPCSTR)IDB_GROUND);HBITMAP bmp_sky=LoadBitmap((HINSTANCE)GetModuleHandle(NULL),(LPCSTR)IDB_SKY);HBITMAP bmp_stack=LoadBitmap((HINSTANCE)GetModuleHandle(NULL),(LPCSTR)IDB_STACK);HBITMAP bmp_rock=LoadBitmap((HINSTANCE)GetModuleHandle(NULL),(LPCSTR)IDB_ROCK);HBITMAP bmp_title=LoadBitmap((HINSTANCE)GetModuleHandle(NULL),(LPCSTR)IDB_TITLE);HBITMAP bmp_grass=LoadBitmap((HINSTANCE)GetModuleHandle(NULL),(LPCSTR)IDB_GRASS);HBITMAP bmp_cloud=LoadBitmap((HINSTANCE)GetModuleHandle(NULL),(LPCSTR)IDB_CLOUD);switch(uMsg){case WM_DESTROY:PostQuitMessage(0);break;case WM_PAINT:hdc=GetDC(hwnd);//设备描述表MemDC=CreateCompatibleDC(hdc);CreateCompatibleBitmap(MemDC,0,0);HBRUSH hbr_sky=CreatePatternBrush(bmp_sky);HBRUSH hbr_ground=CreatePatternBrush(bmp_ground);//天空FillRect(hdc,&r,hbr_sky);//地面FillRect(hdc,&rc_ground,hbr_ground);//草SelectObject(MemDC,bmp_grass);//BitBlt(hdc,0,0,537,232,MemDC,0,0,SRCCOPY);for(int num_grass=0;num_grass<10;num_grass++){TransparentBlt(hdc,150+28*num_grass,506,28,24,MemDC,0,0,28,24,RGB(255,255,255));}//云朵SelectObject(MemDC,bmp_cloud);//BitBlt(hdc,0,0,537,232,MemDC,0,0,SRCCOPY);TransparentBlt(hdc,20,80,89,50,MemDC,0,0,89,50,RGB(0,0,0));//标题SelectObject(MemDC,bmp_title);//BitBlt(hdc,0,0,537,232,MemDC,0,0,SRCCOPY);TransparentBlt(hdc,140,30,537,232,MemDC,0,0,537,232,RGB(0,255,0));//烟囱SelectObject(MemDC,bmp_stack);//BitBlt(hdc,200,465,264,530,MemDC,0,0,SRCCOPY);TransparentBlt(hdc,500,465,64,65,MemDC,0,0,64,65,RGB(255,255,255));//墙SelectObject(MemDC,bmp_rock);for(int num_rock=0;num_rock<10;num_rock++){//BitBlt(hdc,0+32*num_rock,300,32+32*num_rock,332,MemDC,0,0,SRCCOPY);TransparentBlt(hdc,0+32*num_rock,330,32,32,MemDC,0,0,32,32,RGB(255,255,255));}DeleteDC(MemDC);ReleaseDC(hwnd,hdc);break;}return DefWindowProc(hwnd,uMsg,wParam,lParam);}
0 0
- Windows API初步实现游戏界面
- 游戏编程初步 Ⅰ-Windows编程初步
- windows api 扫雷游戏
- windows API之控制台界面
- windows API 实现截图
- 关于界面显示的Windows API函数
- 【王艳平WINDOWS API书】游戏内存修改器之C++类实现
- vc游戏--01--windows API程序框架
- Windows游戏编程总结(二)粒子系统初步
- C++调用API初步创建Windows窗口程序
- 界面 API: 游戏商店新的合作方式
- 常见游戏Loading界面的实现
- 如何实现从登陆界面跳转到游戏大厅界面
- Windows API实现文件操作
- 调用Windows API实现关机
- windows api 实现简单窗口
- windows api实现星空流动
- Windows API实现窗口居中
- 如何制作无状态的ASP组件
- 用JAVASCRIPT实现的日历
- 编译OSG 程序
- NSAttributedString 详解
- 生成函数hdu1398
- Windows API初步实现游戏界面
- UVa - 10115 - Automatic Editing
- Android在应用中固定屏幕方向
- Linux开启mysql远程连接
- C++笔记--explicit构造函数
- python实现凯撒加密
- 计数 杭电 1521 排列组合
- 浅析string 与char* char[]之间的转换
- const 成员函数