ACLLib 分析
来源:互联网 发布:mac 迅雷 下载速度 编辑:程序博客网 时间:2024/06/14 19:49
不同于传统的C语言编程,在基于窗口的程序中,通常入口是WinMain()
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow){MSG msg;WNDCLASSA wndclass; g_hInstance = hInstance;g_hWnd = NULL; g_keyboard = NULL;g_mouse = NULL;g_timer = NULL;wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC | CS_DBLCLKS;wndclass.lpfnWndProc = WndProc;wndclass.cbClsExtra = 0;wndclass.cbWndExtra = 0;wndclass.hInstance = hInstance;wndclass.hInstance = hInstance;wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);wndclass.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH);wndclass.lpszMenuName = NULL;wndclass.lpszClassName = g_wndClassName;if (!RegisterClassA(&wndclass)){MessageBoxA(NULL, "This program requires Windows NT!", g_libName, MB_ICONERROR);return 0;}Setup();ACL_ASSERT(g_hWnd,"You must call \"initWindow(...)\" in Main()");while (GetMessage(&msg, NULL, 0, 0)){TranslateMessage (&msg);DispatchMessage (&msg);}return msg.wParam;}
整个WinMain()函数可以包含上诉所说的前五大部分,以下分别说明:
1、设计窗口
程序开始定义了一个WNDCLASSA的结构体变量,其形式如下:
typedef struct tagWNDCLASSA { UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCSTR lpszMenuName; LPCSTR lpszClassName;}WNDCLASSA;其中包括窗口的类型、窗口过程函数、光标、图标、窗口背景、窗口类名等等,详见MSDN:点击打开链接
2、注册窗口
用RegisterClassA(const WNDCLASS* lpWndClass)函数注册窗口。
3、创建窗口
用CreateWindowA(lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)函数创建指定的窗口原点、长、宽、窗口类等的窗口。
4、显示及更新窗口
创建完窗口后,我们就可以调用ShowWindow(HWND hWnd, int nCmdShow)和UpdateWindow(HWND hWnd)显示和更新窗口。
5、消息循环
定义消息结构体MSG变量msg,通过GetMessage()或者PeekMessage()来接收消息,然后由TranslateMessage()将按键消息转换成字符消息,放到线程消息队列中,由DispatchMessage()函数将消息传递给窗口过程函数。
其中窗口过程函数作如下说明:在设计窗口类时,有一成员变量lpfnWndProc用来指定窗口过程函数的地址,我们用赋予函数名。
其过程函数形式如下:
LRESULT CALLBACK WindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
其中hwnd 代表所属窗口句柄,uMsg 表示消息,后面两个参数是消息的附加参数。
在使用ACLLib创建窗口时,我们只需要写一个Setup()函数,调用initWindow()初始化窗口,这样用户就可以定义自己所规划的窗口。
同时,通过initConsole()函数,程序也打开了console,方便程序读入和反馈信息等。
对于具体的程序界面设计及相应事件响应,调用相应的函数即可。
具体例程、配置方式和源文件和头文件下载网站:点击打开链接
- ACLLib 分析
- ACLlib 里的定时器
- 利用Acllib写的一个桌面时钟
- 分析
- 分析
- 分析
- 分析
- 分析
- 分析
- 分析
- 分析
- 分析
- 大家帮忙分析分析!
- FFMpeg分析详细分析
- FFMpeg分析详细分析
- core 分析的分析
- 写给自己,分析分析
- FFMpeg分析详细分析
- C++所对应的数据结构
- sql如何设置外键
- 算法与数据结构--向量
- HDU 2203--亲和串【水题】
- Java HashMap的工作原理
- ACLLib 分析
- 幽幽情怀
- 每天锻炼几分钟
- win7_oracle11g_64位连接32位PLSQL_Developer
- SQL2008安装提示"Microsoft visual studio 2008早期之前的版本"解决(这是我认为最简单有效的方法)
- HBase简介
- 关于软件开发进度的思考
- 【c语言】一个球从100米高的自由落下,每次落地后反跳回原高度的一半,再落下,再反弹。求第 10次落地时,共经过多少米,第10次反弹多高。
- 分组标签