微软提供几种编程语言可以写Windows窗口应用程序,比如C/C++,VB,C#等。Windows下要学习游戏窗口编写,一定离不开Windows API的使用。
1、安装窗口编译环境
推荐VS(VS2008,VS2010,VS2015,VS2013,VS2017),MSDN文档。
2、安装帮助文档MSDN
3、C/C++语言编程
4、掌握Windows编程
编写Windows程序一般有两种:一种是MFC编程(C++);一种是Win32编程(C+Windows API调用方式)。
5、窗口交互界面
Windows编程两部分:Windows下的交互界面编程;深入理解Windows运行机制、内存管理和核心对象。
框架——Windows是一个消息驱动的系统
窗口——窗口管理,比如创建、销毁、重绘、透明处理技术等
控件——包括Windows窗口上的各种控件的使用和管理。
外设——包括鼠标、键盘、打印机等、串/并口。
GDI——绘制各种Windows GDI对象,比如字体、位图、画笔、画刷等
6、Windows核心编程
Windows内部运行机制。
内核对象——包括进程、线程、高度、同步等技术
内存管理——包括Windows系统的虚拟内存管理、地址空间、内存映射等
动态链接库——包括动态库原理、创建等
异常处理机制——结构化异常处理、异常链、错误与恢复。
二、Windows游戏动作技能入门

//---------------------------------------------------------------------------------------
//
// 程序名称:Windows游戏入门动作技能
//
// 编译环境:Visual Studio 2013
//
// 文件名称:Game.cpp
//
// 开发作者:张三
//
// 创建日期:2017-04-03
//
// 修改日期:2017-04-03 By 李四
//
//---------------------------------------------------------------------------------------
#include<Windows.h>
#include<tchar.h>
#pragmacomment(lib,"winmm.lib") // 调用PlaySound()函数所需要的库文件
#defineWINDOW_WIDTH 800
#defineWINDOWS_HEIGHT 600
#defineWINDOW_TITEL L"Windows游戏编程入门:动作技能"
// 声明全局变量--------------------------------------------------------------------
HDC g_hdc = NULL, g_mdc = NULL; // 全局设备环境句柄/全局内存DC句柄HB
HBITMAP g_hSprite[12]; // 声明位图数组来存储每一张人物的图片
DWORD g_tPre = 0, g_tNow = 0; // 记录上一次绘图的时间/记录本次准备绘图时间
int g_iNum = 0; // 记录目前显示的图片编号
// 声明全局函数--------------------------------------------------------------------
LRESULTCALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); // 窗口过程函数
BOOL Init_Game(HWND hwnd); // 资源初始化
VOID Paint_Game(HWND hwnd); // 绘制游戏图片
BOOL CleanUp_Game(HWND hwnd); // 清理资源
// WinMain():Windows应用程序的入口函数
intWINAPI WinMain(HINSTANCEhInstance, HINSTANCEhPrevInstance, LPSTRlpCmdLine, intnShowCmd)
{
// 窗口类
WNDCLASSEX wndclass = { 0 };
wndclass.cbSize = sizeof(WNDCLASSEX); // 设置结构体字节数大小
wndclass.style = CS_HREDRAW | CS_VREDRAW; // 设置窗口的样式
wndclass.lpfnWndProc = WndProc; // 设置指向窗口过程函数的指针
wndclass.cbClsExtra = 0; // 窗口类附加内存,一船情况下直接取0即可
wndclass.cbWndExtra = 0; // 窗口附加内存,依然取0即可
wndclass.hInstance = hInstance; // 包含窗口过程的程序实例句柄
wndclass.hIcon = (HICON)::LoadImage(NULL, L"GAME.ico", IMAGE_ICON, 0, 0, LR_DEFAULTSIZE|LR_LOADFROMFILE);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);// 指定窗口类的光标句柄
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL; // 用一个以空终止的字符串,指定菜单资源名称
wndclass.lpszClassName = L"GameGDI";
// 注册窗口类
if (!RegisterClassEx(&wndclass))
return -1;
// 创建窗口
HWND hwnd = CreateWindow(L"GameGDI", WINDOW_TITEL, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
CW_USEDEFAULT, WINDOW_WIDTH, WINDOWS_HEIGHT, NULL, NULL, hInstance, NULL);
// 显示更新
MoveWindow(hwnd, 250, 80, WINDOW_WIDTH, WINDOWS_HEIGHT, true);
ShowWindow(hwnd, nShowCmd);
UpdateWindow(hwnd);
// 游戏资源初始化
if (!Init_Game(hwnd))
{
MessageBox(hwnd, L"游戏资源初始化失败", L"错误", 0);
returnFALSE;
}
PlaySound(L"仙剑·重楼.wav", NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);
// 消息循环
MSG msg = { 0 };
while (msg.message != WM_QUIT) // 使用while循环,如果消息不是WM_QUIT消息,继续循环
{
if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) // 查看应用程序消息队列,有消息时将队列中的消息发出去
{
TranslateMessage(&msg); // 将虚拟键消息转换成字符消息
DispatchMessage(&msg); // 分发一个消息窗口
}
else
{
g_tNow = GetTickCount();
if (g_tNow - g_tPre >= 100)
Paint_Game(hwnd);
}
}
// 窗口注销
UnregisterClass(L"GameGDI", wndclass.hInstance);// 程序准备结束,注销窗口类
return 0;
}
// 窗口过程函数
LRESULTCALLBACK WndProc(HWNDhwnd, UINTmessage, WPARAMwParam, LPARAMlParam)
{
switch (message)
{
caseWM_DESTROY: // 窗口销毁消息
CleanUp_Game(hwnd); // 进行退出前的资源清理
PostQuitMessage(0); // 向系统表明线程有终止请求
break;
default:
returnDefWindowProc(hwnd, message, wParam, lParam);
}
return 0; // 正常退出
}
// 资源初始化
BOOL Init_Game(HWNDhwnd)
{
g_hdc = GetDC(hwnd);
wchar_t filename[20];
// 加载每个人物
for (int i = 0; i < 12; i++)
{
memset(filename, 0, sizeof(filename));
swprintf_s(filename, L"%d.bmp", i);
g_hSprite[i] = (HBITMAP)LoadImage(NULL, filename, IMAGE_BITMAP, 800, 600, LR_LOADFROMFILE);
}
g_mdc = CreateCompatibleDC(g_hdc); // 建立兼容设备环境的内存DC
Paint_Game(hwnd);
returnTRUE;
}
// 绘制游戏图片
VOID Paint_Game(HWNDhwnd)
{
if (g_iNum == 11) // 判断是否超过最大图片编号,若超过最大图片编号10,则直接重新设置0
g_iNum = 0;
SelectObject(g_mdc, g_hSprite[g_iNum]);
// 把图片按编号贴图到窗口当中
BitBlt(g_hdc, 0, 0, 800, 600, g_mdc, 0, 0, SRCCOPY);
g_tPre = GetTickCount();
g_iNum++;
}
// 清除资源
BOOL CleanUp_Game(HWNDhwnd)
{
// 释放资源对象
for (int i = 0; i < 12; i++)
DeleteObject(g_hSprite[i]);
DeleteDC(g_mdc);
ReleaseDC(hwnd, g_hdc);
returnTRUE;
}
这是今天的内容,希望大家有所收获,学有所成,写出属于自己的程序!!!
如果对这方面有兴趣的可以加群:379249575,大家一起学习交流。
群内还有更多学习资料、视频,免费课......
相关资讯
最新热门应用
非小号交易平台官网安卓版
其它软件292.97MB
下载
币交易所地址
其它软件274.98M
下载
iotx交易所app
其它软件14.54 MB
下载
zt交易所安卓最新版
其它软件273.2 MB
下载
币拓交易所bittok
其它软件288.1 MB
下载
u币交易所平台app
其它软件292.97MB
下载
热币全球交易所app官网版
其它软件287.27 MB
下载
多比交易平台app
其它软件28.28MB
下载
币赢交易所app官网安卓版
其它软件14.78MB
下载
toncoin币交易所安卓版
其它软件48MB
下载