vc游戏--01--windows API程序框架
来源:互联网 发布:软件配置管理实施情况 编辑:程序博客网 时间:2024/05/29 16:38
本人开始学习winAPI,由于本人小白,有错误或不解的请各位大牛指点错误。谢谢
目前大型商业网络游戏软件开发模式大多使用vc++与windows API。
c++程序编译后文件是可直接运行的机器码。
其他语言如vb,java编译先产生中间码,解释器解析中间码需要占内存和时间,所以游戏运行慢
下面我们先用vc建立一个windowsAPI架构的项目
点击完成即可生成windows自动创建的框架
先来运行下看看
是一个典型的windows窗口。我们来看看代码。
我们看看项目资源管理器
canvas.cpp为项目主程序,包含winmain;canvas.rc为资源文件;StdAfx.cpp为标头文件,引用项目所需头文件
一.游戏框架:
WinMain:主程序,程序起点
WinProc:自定义函数,消息处理程序
MyRegesterClass:自定义函数,注册窗口类别
InitInstance:自定义函数,建立显示窗口的初始化程序
1.WinMain:
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow){UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine); // TODO: 在此放置代码。MSG msg;HACCEL hAccelTable;// 初始化全局字符串LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);LoadString(hInstance, IDC_CANVAS, szWindowClass, MAX_LOADSTRING);MyRegisterClass(hInstance);// 执行应用程序初始化:if (!InitInstance (hInstance, nCmdShow))//调用InitInstance函数,初始化窗口{return FALSE;}hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_CANVAS));// 主消息循环:消息处理函数while (GetMessage(&msg, NULL, 0, 0)){if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)){TranslateMessage(&msg);DispatchMessage(&msg);}}return (int) msg.wParam;}
WinMain()参数:
hInstance:识别该程序的句柄,唯一代表了该应用 的程序,管理内存中各个对象
hPrevInstance:以前版本的参数,不管。
IpCndLine:以null结尾的字符串
nCmdShow:传递给应用程序一个整数,指出如何打开应用程序窗口。
一个窗口可以看成在winmain中线注册一个窗口(MyRegisterClass)在初始化窗口(InitInstance)再处理消息函数
API--GetMessage:获取程序消息
API-TranslateMessage:转换伪码及字符
API-DispatchMessage:将控制权交给系统,再由系统负责处理消息程序
2.MyRegisterClass函数:
ATOM MyRegisterClass(HINSTANCE hInstance){WNDCLASSEX wcex;wcex.cbSize = sizeof(WNDCLASSEX);//类大小wcex.style= CS_HREDRAW | CS_VREDRAW;//窗口属性wcex.lpfnWndProc= WndProc;//指向消息函数的指针wcex.cbClsExtra= 0;为类保存些额外空间wcex.cbWndExtra= 0;wcex.hInstance= hInstance;wcex.hIcon= LoadIcon(hInstance, MAKEINTRESOURCE(IDI_CANVAS));//窗口图标wcex.hCursor= LoadCursor(NULL, IDC_ARROW);//鼠标光标的句柄wcex.hbrBackground= (HBRUSH)(COLOR_WINDOW+1);//窗口背景画笔句柄wcex.lpszMenuName= MAKEINTRESOURCE(IDC_CANVAS);wcex.lpszClassName= "canvas";wcex.hIconSm= LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));return RegisterClassEx(&wcex);}
函数参数传入窗口句柄hInstance
声明一个窗口类别“WNDCLASSEX”的结构“wcex”;
19行,调用RegisterClassEx()函数注册类别,返回一个ATOM形态的字符串
InitInstance函数:
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow){ HWND hWnd; hInst = hInstance; // 将实例句柄存储在全局变量中 hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE;}
API-MoveWindows:设定窗口显示的位置和大小
API-ShowWindow:设定窗口显示状态
API-UpdateWindow:将窗口绘制在显示器上
WndPro函数:CALLBACK回调函数;
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){int wmId, wmEvent;PAINTSTRUCT ps;HDC hdc;switch (message){case WM_COMMAND:wmId = LOWORD(wParam);wmEvent = HIWORD(wParam);// 分析菜单选择:switch (wmId){case IDM_ABOUT:DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);break;case IDM_EXIT:DestroyWindow(hWnd);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}break;case WM_PAINT:hdc = BeginPaint(hWnd, &ps);// TODO: 在此添加任意绘图代码...EndPaint(hWnd, &ps);break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}return 0;}
参数:hwnd:windows句柄,当windows打开多窗口时用到
message:消息标识符
Wparam和param进一步限定或发送到msg参数中的信息;
- vc游戏--01--windows API程序框架
- 使用windows api编写网络程序(VC ++)
- 01-windows游戏编程-框架
- vc++之windows api
- windows api 扫雷游戏
- 4.2游戏程序框架
- API程序框架
- API程序框架
- WINDOWS API &&VC SKILL(一)
- VC串口通讯(Windows API)
- 【VC++游戏开发#十一】用C++来架构一个适合windows游戏编程的框架——取名为BCF
- 【VC++游戏开发】用C++来架构一个适合windows游戏编程的框架——取名为BCF
- 【VC++游戏开发】用C++来架构一个适合windows游戏编程的框架——取名为BCF
- 【VC++游戏开发】用C++来架构一个适合windows游戏编程的框架——取名为BCF
- 【VC++游戏开发】用C++来架构一个适合windows游戏编程的框架——取名为BCF
- WIN32编程--用Windows API实现Windows NT服务的程序框架
- Windows程序基本框架
- windows基本程序框架
- 多线程---(互斥体)
- 开发属于自己的在线编辑器--编辑器的核心
- 浙江大学2011年复试上机题 解题报告
- 2012年3月17日
- 专注于操作系统22之中断
- vc游戏--01--windows API程序框架
- Codeforces Round #112 (Div. 2) E题 位运算
- RadioWar_RFID_LiveCD_Alpha315.iso
- Python模拟Web Fetion给好友发送信息
- asp.net 页面缓存
- 发个XNA中文字体生成的辅助小工具
- STL::bind1st STL::bind2st boost::bind
- Android Prelink实现的源码分析
- 计算机组成原理学习心得(二)