windows游戏编程<七> 创建WIN32一个HelloWOrld程序
来源:互联网 发布:哈萨克歌软件 编辑:程序博客网 时间:2024/06/05 04:21
本系列文章由jadeshu编写,转载请注明出处。http://blog.csdn.net/jadeshu/article/details/22449085
作者:jadeshu 邮箱: jadeshu@qq.com 欢迎邮件交流
一开始我们得大致了解一个程序的运行过程,运行时得先启动一个程序,如下启动过程
1.WIN32程序启动过程就是进程的创建过程,系统调用CreateProcess函数创建新的进程(当一个线程调用CreateProcess函数时,系统会创建一个进程内核对象,其使用计数初始化为1.此进程内核对象不是进程本身,仅仅是一个系统用来管理这个进程的小的数据结构)
2.系统然后为新的进程创建一个虚拟地址空间,加载应用程序运行时所需的代码和数据
3.系统接着为新进程创建一个主线程(这个主线程通过执行C/C++运行期启动代码开始运行,C/C++运行期启动代码又会调用main函数。如果系统能够成功创建新的进程和进程的主线程,CreateProcess函数会返回TRUE,否则返回FALSE)
....运行程序
#include <windows.h>#include <tchar.h>HINSTANCE hInst;//窗口实例句柄TCHAR szTitle[MAX_PATH] = _T("HelloWorld");//窗口类名TCHAR szWindowClass[MAX_PATH] = _T("szClass");//窗口标题名ATOMMyRegisterClass(HINSTANCE hInstance); //注册窗口类函数声明BOOLInitInstance(HINSTANCE, int);//初始化实例函数声明LRESULT CALLBACKWndProc(HWND, UINT, WPARAM, LPARAM);//窗口回调函数声明int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow){UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine);MSG msg; //消息结构体MyRegisterClass(hInstance);if (!InitInstance (hInstance, nCmdShow)){return FALSE;}while (GetMessage(&msg, NULL, 0, 0)) //消息循环{TranslateMessage(&msg); //转换消息DispatchMessage(&msg); //派发消息}return (int) msg.wParam;}ATOM MyRegisterClass(HINSTANCE hInstance){WNDCLASSEX wcex;wcex.cbSize = sizeof(WNDCLASSEX);wcex.style= CS_HREDRAW | CS_VREDRAW;wcex.lpfnWndProc= WndProc;//窗口处理函数为WndProcwcex.cbClsExtra= 0;//窗口类扩展数据wcex.cbWndExtra= 0;//窗口实例扩展数据wcex.hInstance= hInstance;//当前实例句柄wcex.hIcon= LoadIcon(hInstance, IDI_APPLICATION); //加载图标wcex.hCursor= LoadCursor(NULL, IDC_ARROW);//加载光标wcex.hbrBackground= (HBRUSH)(COLOR_WINDOW+1);//窗口背景填充颜色wcex.lpszMenuName= NULL;//菜单wcex.lpszClassName= szWindowClass;//窗口类名wcex.hIconSm= LoadIcon(wcex.hInstance, IDI_APPLICATION);//加载小图标return RegisterClassEx(&wcex);//注册窗口类}BOOL InitInstance(HINSTANCE hInstance, int nCmdShow){HWND hWnd;hInst = hInstance; // Store instance handle in our global variablehWnd = 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;}LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){PAINTSTRUCT ps;HDC hdc;switch (message){case WM_PAINT:hdc = BeginPaint(hWnd, &ps);// TODO: Add any drawing code here...EndPaint(hWnd, &ps);break;case WM_DESTROY:PostQuitMessage(0);//退出break;default:return DefWindowProc(hWnd, message, wParam, lParam);}return 0;}
具体可以参看windows游戏编程<一>
需要了解的有以下几点:
1.Windows窗口类结构WNDCLASS WNDCLASSEX
2.注册窗口类
3.创建窗口
4.事件处理程序(窗口回调函数)
5.主事件循环(该实例的消息循环)
对于游戏是一个实时的循环,即你所需要的是一种检测在消息队列中是否有消息,如果有就处理它,没有就进行处理游戏逻辑等!
下面介绍几个函数的区别
BOOL GetMessage( LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax );
其唯一用途就是从事件对列中获得消息,并进行处理。当程序在等待通过 GetMessage 传递的消息时,主事件循坏基本上是锁定的。即,如果消息队列中没有消息,则GetMessage()不会返回,一直等待..
BOOL PeekMessage( LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg );
他们的原型几乎是一样的,唯一的不同是 PeekMessage 比 GetMessage 多了一个参数:UINT wRemoveMsg // removal flags。对于wRemoveMsg ,有效的标志有PM_NOREMOVE,PeekMessage 处理之后,消息没有从序列中去除PM_REMOVE,PeekMessage 处理之后,消息已经从序列中去除怎样来实现实时事件循坏呢?通过利用PeekMessage 来判断消息序列中是否有消息,如果有,就处理它;否则直接返回,并不等待。
LRESULT SendMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam );
SendMessage根据窗口句柄发送一个消息给窗口,SendMessage 向窗口传递一个要求立即处理的消息。接收窗口处理完该消息后,该函数便紧接着 WinProc 返回。是同步的。
BOOL PostMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam );
PostMessage 将消息发往窗口的消息序列,而后直接返回。如果不在意在消息被处理以前的时间延迟,或者该消息的优先级较低,就可以使用该函数。是异步的。
VC创建WIN32框架程序
1.打开VC
oror....
2.
3.新建项目
4.选择WIN32项目点击确定 一直下一步直至完成
5.完成
接着编译运行即可
0 0
- windows游戏编程<七> 创建WIN32一个HelloWOrld程序
- Win32 Windows编程 七
- win32框架,GDI图形编程写一个HelloWorld游戏_c语言
- 1.3创建一个“HelloWorld"程序
- SpringMVC创建一个HelloWorld程序
- 创建一个完整Win32程序
- 如何创建一个win32程序
- 创建一个win32窗口程序
- Win32 一个helloworld对话框
- C++之第一个windows程序,win32 helloworld
- DirectX游戏编程(一):创建一个Direct3D程序
- 创建一个Spring的HelloWorld程序
- SpringMVC基础入门,创建一个HelloWorld程序
- SpringMVC基础入门--创建一个HelloWorld程序
- SpringMVC基础入门,创建一个HelloWorld程序
- SpringMVC基础入门,创建一个HelloWorld程序
- win32程序中创建一个DOS窗口
- 怎样在Windows Mobile(Win32编程)上设计一个美观的用户界面程序
- (经过试验)我的驱动和程序共享内存代码
- android 主线程和子线程之间的消息传递
- UVa -- 10324 Zeros and Ones
- jquery error: 200
- HDU3847 Trash Removal(凸包)
- windows游戏编程<七> 创建WIN32一个HelloWOrld程序
- ffmpeg+sdl2.0做一个简单的音频播放器
- Transfer postgres database to another server - backup and restore
- Spring 基础教程之五:AOP编程介绍
- URL和URI的区别和联系
- 绝对路径和相对路径的区别
- 10Servlet-filter 实例
- CSDN处女篇
- 链表--连续归并