C语言小程序:Windows窗口游戏编程模板

很多学习C语言使用的是Turbo C,但是现在已经是桌面程序的天下了。虽然有时候命令符程序也比较好用,但是学习怎么开发窗口应用程序还是必要的。在前面的一篇博客中你可以学习如何使用C语言编写一个简单的windows下的窗口程序。

今天大笨兔带给大家的是一个windows游戏编程的窗口模板代码,代码如下:

#include #define WINDOW_CLASS_NAME "win32api"#define WINDOW_WIDTH 500#define WINDOW_HEIGHT 500//检测按键状态#define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)#define KEYUP(vk_code)   ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)/* 窗口过程 */LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);HWND main_window_handle = NULL; //保存窗口句柄的全局变量HINSTANCE hinstance_app = NULL;//保存程序实例句柄的全局变量HDC global_hdc = NULL;//保存窗口 hdc 的全局变量int WINAPIWinMain (HINSTANCE hinstance,         HINSTANCE hPrevInstance,         LPSTR lpszArgument,         int nFunsterStil){    HWND hwnd;               /* 窗口句柄 */    MSG messages;            /* 保存窗口消息 */    WNDCLASSEX wincl;        /* 窗口类 */    /* 要注册窗口类的信息 */    wincl.hInstance = hinstance;    wincl.lpszClassName = WINDOW_CLASS_NAME;    wincl.lpfnWndProc = WindowProcedure;      /* 窗口过程名字 */    wincl.style = CS_DBLCLKS | CS_OWNDC |                          CS_HREDRAW | CS_VREDRAW;                 /* 窗口风格 */    wincl.cbSize = sizeof (WNDCLASSEX);    /* 使用默认的icon和鼠标光标 */    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);    wincl.lpszMenuName = NULL;                 /* 没有菜单 */    wincl.cbClsExtra = 0;    wincl.cbWndExtra = 0;    /* 窗口的背景为黑色 */    wincl.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);    /* 注册窗口类 */    if (!RegisterClassEx (&wincl))        return 0;    /* 注册完窗口类后创建一个窗口 hwnd保存窗口句柄 */    hwnd = CreateWindowEx (           0,                   /* Extended possibilites for variation */           WINDOW_CLASS_NAME,         /* 窗口类名字 */           "windows游戏编程模板 大笨兔博客--C语言学习交流专业博客", /* 窗口标题 */           WS_OVERLAPPEDWINDOW | WS_VISIBLE, /* 程序运行就激活窗口 */           0,           0,       /* 窗口相对于桌面的位置 */           WINDOW_WIDTH,           WINDOW_HEIGHT,                 /* 窗口高与宽 */           HWND_DESKTOP,           NULL,                /* 没有菜单 */           hinstance,           NULL           );/* 保存窗口句柄与程序实例句柄到全局变量 */    main_window_handle = hwnd;    hinstance_app = hinstance;    /* 游戏初始化的工作 */    /* 消息循环 */    while(TRUE){if(PeekMessage (&messages, NULL, 0, 0,PM_REMOVE))    {  //检测到退出消息       if(WM_QUIT == messages.message)       break;        TranslateMessage(&messages);        /* Send message to WindowProcedure */        DispatchMessage(&messages);    }    /*        ** 游戏主循环** 你可以执行动画、逻辑等等操作*/    }    /* 游戏结束的工作 */    /* 程序返回 */    return messages.wParam;}/*事件处理函数*/LRESULT CALLBACKWindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){PAINTSTRUCT ps;HDC hdc;RECT rt;char szHello[]="Hello, C-Free!";    switch (message)    {    case WM_PAINT:hdc = BeginPaint(hwnd, &ps);EndPaint(hwnd, &ps);break;        case WM_DESTROY:            PostQuitMessage (0);            break;        default:            return DefWindowProc (hwnd, message, wParam, lParam);    }    return 0;}

程序的运行效果如下:

windows游戏编程模板

程序和普通的win32窗口程序差不多,但是在处理消息循环中使用的不是GetMessage,而换成了PeekMessage函数.你可以在程序的消息循环中处理游戏的动画、逻辑等等。在消息循环前处理游戏初始化的操作,在消息循环结束后处理资源回收的工作。

这个游戏框架对于C语言开发windows下的小游戏,还是非常好用的。希望对你有用。:)

参考资料:《windows游戏编程大师技巧》(全文完)

若非注明,均为原创文章,转载请注明: 转载自大笨兔

本文链接地址: C语言小程序:Windows窗口游戏编程模板

相关文章:

你感兴趣的文章:

标签云: