1 对WinMain的理解
2015-07-10 11:35
363 查看
就像C语言的main是它的程序路口一样,windows的程序入口是WinMain,WinMain的定义可以查看winbase.h文件。
效果为显示一个弹框,效果如下:
犹如c中的#include <stdio.h>一样,在这里#include <Windows.h>也是预处理指令,Windows.h是最重要的包含文件,它囊括了若干个其它Windows头文件,以下为最重要也是最基本的头文件:
windef.h 基本数据类型定义
winnt.h 支持Unicode的类型定义
winbase.h 内核函数
winuser.h 用户界面函数
wingdi.h 图形设备接口函数
(2)WINAPI
WINAPI的定义为__stdcall,__stdcall是一种函数调用规则:
进行函数调用,函数参数的入栈方式是最右边先入栈
被调用的函数负责栈的回收(调用者只负责压栈)。
当然这种函数调用规则还有别的,比如__cdecl、__pascal等规则。只是绝大多数Windows函数调用都定义成WINAPI。
(3)WINAPI
①:第一个参数 HINSTANCE hInstance
HINSTANCE为实例句柄,句柄无非是一个数值,程序用它来标识某些东西。在此该句柄唯一标识我们这个程序。
②:第二个参数 HINSTANCE hPrevInstance
前一个实例句柄,在win32程序中这一概念已不再采用,因此WinMain的第二个参数通常是NULL。
③:第三个参数 PSTR szCmdLine
PSTR是一个字符指针,用来运行程序的命令行,有些程序在启动时用它来把文件装入内存。
④:第四个参数 int iCmdShow
用来指明程序最初如何显示:正常显示、最大化到全屏、最小化到任务栏。
网上有一位网友举了一个特别通俗易懂的列子来理解这些参数,在此引荐过来:
原文参考地址为:点击查看原文。
本文作为自己学习中的笔记与大家分享,主要摘自《Windows程序设计》第五版。
Hello Windows(c语言中的Hello world!)
#include <Windows.h> int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow){ MessageBox(NULL,TEXT("Hello windows"),TEXT("HelloMSG"),0); return 0; }
效果为显示一个弹框,效果如下:
对整个程序的分析
(1)#include <Windows.h>犹如c中的#include <stdio.h>一样,在这里#include <Windows.h>也是预处理指令,Windows.h是最重要的包含文件,它囊括了若干个其它Windows头文件,以下为最重要也是最基本的头文件:
windef.h 基本数据类型定义
winnt.h 支持Unicode的类型定义
winbase.h 内核函数
winuser.h 用户界面函数
wingdi.h 图形设备接口函数
(2)WINAPI
WINAPI的定义为__stdcall,__stdcall是一种函数调用规则:
进行函数调用,函数参数的入栈方式是最右边先入栈
被调用的函数负责栈的回收(调用者只负责压栈)。
当然这种函数调用规则还有别的,比如__cdecl、__pascal等规则。只是绝大多数Windows函数调用都定义成WINAPI。
(3)WINAPI
①:第一个参数 HINSTANCE hInstance
HINSTANCE为实例句柄,句柄无非是一个数值,程序用它来标识某些东西。在此该句柄唯一标识我们这个程序。
②:第二个参数 HINSTANCE hPrevInstance
前一个实例句柄,在win32程序中这一概念已不再采用,因此WinMain的第二个参数通常是NULL。
③:第三个参数 PSTR szCmdLine
PSTR是一个字符指针,用来运行程序的命令行,有些程序在启动时用它来把文件装入内存。
④:第四个参数 int iCmdShow
用来指明程序最初如何显示:正常显示、最大化到全屏、最小化到任务栏。
网上有一位网友举了一个特别通俗易懂的列子来理解这些参数,在此引荐过来:
双击QQ快捷方式, 会启动一个qq程序, 假设给它个编号9527; 再双击QQ快捷方式, 又启动了一个新的qq, 假设编号9528; 对于9528来说, hInstance=9528, hPrevInstance=9527; 不过, msdn说hPrevInstance的这个判断没效果, hPrevInstance实际上是无意义的。 iCmdShow表示窗口的初始状态, 最大化, 最小化, 隐藏, 还是一般大小的显示等等。 szCmdLine是命令行参数, 在windows的命令行工具cmd中启动程序的话, 有时能带上其它参数, 比如"ping www.qq.com -t",这个命令就带了很多参数, 用空格分开了, 分别是 ping www.qq.com -t。
原文参考地址为:点击查看原文。
本文作为自己学习中的笔记与大家分享,主要摘自《Windows程序设计》第五版。
相关文章推荐
- hdu 5045 - Contest(2014 ACM/ICPC Asia Regional Shanghai Online )概率dp
- 安装配置fail2ban防止暴力破解
- HDU 2476 String painter(区间dp)
- editor dose not contain a main type
- "NO 3D support is available from the host"
- "NO 3D support is available from the host"
- TurboMail为各行业提供个性化邮件系统方案
- Leetcode Factorial Trailing Zeroes
- Contains Duplicate
- hdu 1789 Doing Homework again 贪心
- 在main函数之前执行一些函数
- 谓词predicate(验证email,手机号)
- Filter及FilterChain的使用详解
- Rails国际化(i18n)
- 怎一个乱字了得 深度了解BayTrail家族
- LeetCode Contains Duplicate III
- 运行时出现adb connect fail
- 解决INSTALL_FAILED_MISSING_SHARED_LIBRARY方法汇总主帖
- LeetCode Climbing Stairs
- int main(int argc,char* argv[])参数详解