很多学习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;}
程序的运行效果如下: