win32API 入口WinMain()内部机理
Posted zzdoit
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了win32API 入口WinMain()内部机理相关的知识,希望对你有一定的参考价值。
win32API 入口WinMain()内部机理
- 入口 WinMain()
- 前面戴两重“帽子”:一个"int"是指返回值; 一个WINAPI指“调用约定”。
- 后面有四个参数:
- HINSTANCE hInstance, 由操作系统生成的“当前实例句柄”。
- HINSTANCE hPrevInstance,"先前实例句柄"----已经遭废弃,以前有用到过,现在已无用。“二货”都会遭到”白眼“,一般赋值null。
- LPSTR lpCmdLine,由外部传递进来的命令行,如:用记事本打开一个txt文件,内里实现是把txt文件路径传入记事本程序,而记事本也要从入口WinMain()进入的,LPSTR lpCmdLine就来接收此路径参数。
- int nShowCmd 显示参数,由操作系统指定。
- WNDCLASSEX 结构用于注册窗口类
- cbSize:
- wcex.cbSize = sizeof( WNDCLASSEX );
- WNDCLASSEX 的大小。我们可以用sizeof(WNDCLASSEX)来获得准确的值。
- cbClsExtra:
- wcex.cbClsExtra = 0;
- 指定紧跟在窗口类结构后的附加字节数。窗口类关联的一个额外的空间。基本已经用不到。
- cbWndExtra:
- wcex.cbWndExtra = 0;
- 指定紧跟在窗口事例后的附加字节数。如果一个应用程序在资源中用CLASS伪指令注册一个对话框类时,则必须把这个成员设成DLGWINDOWEXTRA。窗口关联的一个额外的空间。
- hbrBackground:
- wcex.hbrBackground = (HBRUSH) GetStockObject( WHITE_BRUSH );
- 背景画刷的句柄。
- hCursor:
- wcex.hCursor = LoadCursor( NULL, IDC_ARROW );
- 光标的句柄。
- hIcon:
- wcex.hIcon = LoadIcon( NULL, IDI_APPLICATION );
- 图标的句柄,任务栏上面的图标。
- hIconSm:
- wcex.hIconSm = LoadIcon( NULL, IDI_WINLOGO );
- 和窗口类关联的小图标。如果该值为NULL。则把hIcon中的图标转换成大小合适的小图标。标题栏左边的小图标。
- hInstance:
- wcex.hInstance = hInstance;
- 本模块的事例句柄。
- lpfnWndProc:
- wcex.lpfnWndProc = (WNDPROC) WndProc;
- 窗口处理函数的指针。
- WNDCLASSEX 中最重要的成员莫过于lpfnWndProc了。前缀 lpfn 表示该成员是一个指向函数的长指针。在 Win32中由于内存模式是 FLAT 型,所以没有 near 或 far 的区别。每一个窗口类必须有一个窗口过程,当 Windows 把属于特定窗口的消息发送给该窗口时,该窗口的窗口类负责处理所有的消息,如键盘消息或鼠标消息。由于窗口过程差不多智能地处理了所有的窗口消息循环,所以您只要在其中加入消息处理过程即可。
- lpszClassName:
- wcex.lpszClassName = "My Class";
- 指向类名称的指针。
- lpszMenuName:
- wcex.lpszMenuName = NULL;
- 指向菜单的指针。
- style:
- wcex.style = CS_HREDRAW | CS_VREDRAW;
- 从这个窗口类派生的窗口具有的风格。您可以用“or”操作符来把几个风格或到一起。
- return RegisterClassEx( &wcex );
以上是关于win32API 入口WinMain()内部机理的主要内容,如果未能解决你的问题,请参考以下文章
Win32程序的入口啥时候是WinMain,啥时候是wWinMain?有啥不同
Win32 API编程:WinMain无法重载函数或_tWinMain无法重载
error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用