2019独角兽企业重金招聘Python工程师标准>>>

虽然说编程重要的是思想,用什么语言实现都是鸡肋,但是并不是说你对一个语言一点也不会看一遍就可以精通,我的经历就是以前只注意C/C++编程,对其他语言完全不看,发现最后自己练个窗口图形都写不出来,只能无聊的控制台程序。其实从控制台到Win32窗口的过度也不是一个简单的过程,很多知识,也学要我们一点一滴的积累。

所有的程序都有一个主函数作为程序的入口,在控制台中我们都熟悉了,main这样的函数,但是在Win32窗口中这个函数的名字是WinMain函数的固定形式如下。

int WINAPI WinMain(HINSTANCE hInst,HINSTANCE prevhInst,LPSTR cmd,int show)

{

return 0;

}

这个主函数会接受四个参数,不要被形式吓到,实际上这四个参数是我们运行程序的时候系统分配的。从右到左讲解。

show 是一个int类型,表示显示的形式,比如是显示,还是隐藏,是全屏幕,还是最小化。当然了,在程序中我们不会直接使用数字而是使用宏命令,这个参数的值可以是如下:

SW_HIDE:隐藏窗口并且激活另外一个窗口。

  SW_MINIMIZE:最小化指定的窗口,并且激活在系统表中的顶层窗口。

  SW_RESTORE:激活并显示窗口。如果窗口已经最小化或最大化,系统将以恢复到原来的尺寸和位置显示窗口(与SW_SHOWNORMAL相同)。

  SW_SHOW:激活一个窗口并以原来的尺寸和位置显示窗口。

  SW_SHOWMAXIMIZED:激活窗口并且将其最大化。

  SW_SHOWMINIMIZED:激活窗口并将其最小化(以图标显示)。

  SW_SHOWMINNOACTIVE:将一个窗口显示为图标。激活窗口维持活动状态。

  SW_SHOWNA:以窗口的当前状态显示窗口。激活窗口保持活动状态。

  SW_SHOWNOACTIVATE:以窗口的最近一次的尺寸和位置显示窗口。激活窗口维持激活状态。

  SW_SHOWNORMAL:激活并显示窗口。如果窗口最大化或最小化,系统将其恢复到原来的尺寸和位置

实际上这些变量是开始定义好的值,比如 #define SW_SHOWNA 1234,当然了,这些名字要比数字好记忆的多。

上一个参数,是表示传递的命令,其类型是LPSTR,首先介绍下LPSTR。不要以为又遇到了一个新类型,其实这只是一个宏定义,#define LPSTR string *  (这里只是举个例子为了更明白,实际可能不是这么简单定义的。)说白了,这表示一个指针,指向一个以'/0'结尾的字符串,比如”asfasasf“,指向这个字符串的指针就可以看作是LPSTR

L代表Local P代表Point(指针)STR代表String.有时候我们还会发现一个LPWSTR的变量,其实大致相同,只不过WSTR代表WString。这个参数传递了一个命令,如果现在不知道什么意思可以过会再看整体的例子。

剩下的两个参数都是HINSTANCE这个变量是一个进程的句柄(Win32和Win16的程序都可以使用此变量),实际上他也是一个无符号的长整型,比如 #define HINSTANCE unsigned long int 句柄就是一个进程的标志,比如我们的电脑中运行了很多进程,操作系统如何找到他们呢?给每个进程一个标号,比如1号,2号,。。。这样可以通过标号找到进程。hInst是当前进程的标号,prehInst是该程序的上一个进程的标号,因为一个程序可以被运行多次。但是在Win32程序中这个标号通常永远为null

下面我们举一个例子,比如文本文件。你要打开D:\test.txt这个文本文件,操作系统打开文文件的程序叫做notepade.exe双击文本文件的图标,由于是.txt结尾,操作系统选择让notepade.exe打开,操作系统为进程分配一个标号,即前两个参数由操作系统 填充,接下来是第三个参数,在本例中是"D\:test.txt"指向该字符串的指针,高所notpade.exe打开哪个文件,最后是第四个参数,有系统选定显示为什么样的窗口。当我们打开了这个文件之后还想打开第二个名为text2.txt的文件,此时仍然运行notepade.exe程序,产生一个进程由系统分配ID第二个句柄参数怎是上一次打开test.txt进程的ID,即上一个进程的ID此时运行。

参数讲完了,我们还剩下一点没介绍,再往左是WInMain函数名,这个不用说了再往左是WINAPI,可能很多人会对这种形式感到迷惑,平时我们看到的函数返回类型后面加的不都是函数名吗,这样算什么啊。其实真正的函数还包括函数调用的方式,比如_cdecl  _stdcall等等,不同的调用在处理函数的时候才用的策略不同。我们只要知道其实WINAPI也是一个宏命令,声明为 #define WINAPI _stdcall(在windows.h中生命)也就是说该函数的调用方式为_stdcall特点是参数是从右向左赋值的,也就是操作系统先赋值参数show 再cmd...最终赋值给第一个参数。

这样,一个Win32中的主函数的基本讲解就算完成了。

转载于:https://my.oschina.net/u/269978/blog/56145

Win32窗口编程基础知识——主函数相关推荐

  1. Win32编程基础知识

    Win32编程基础知识 尽管Windows应用程序千变万化,令人眼花缭乱,但,消息机制和窗口过程却始终它们的基础,掌握了这两项技术,也就相当于把握住了问题的关键. 如果你以前是C程序员或是MFC的忠实 ...

  2. 16第一章 ASP.Net编程基础知识

    第一章        ASP.Net编程基础知识 第一章        ASP.Net编程基础知识 本章首先介绍用ASP.Net技术编制服务器端动态网页所需的网络和HTML标记语言方面的有关知识.然后 ...

  3. 多实例多进程网络编程PHP,php socket网络编程基础知识(四):多进程

    标签:status   传递   windows   返回   修改   队列   _for   响应   关联 说明 php在web编程时是不需要考虑多进程的,但整个php流程是涉及到多进程的,只不 ...

  4. Linux网络编程基础知识

    Linux网络编程基础知识 1. 协议的概念 1.1 什么是协议 1.2 典型协议 2 网络应用程序设计模式 2.1 C/S模式 2.2 B/S模式 2.3 优缺点 3 分层模型 3.1 OSI七层模 ...

  5. MFC 基础知识:主对话框与子对话框(二)

    (仅供使用VS MFC初学者学习,高手莫见笑) 接"MFC 基础知识:主对话框与子对话框(一)"的内容 在"MFC 基础知识:主对话框与子对话框(一)"中Edi ...

  6. 最全攻略:数据分析师必备Python编程基础知识

    导读:本文主要介绍使用Python进行数据分析时必备的编程基础知识,主要涉及Python的基本数据类型.数据结构.程序控制.读写数据等内容. Python编写代码时,是以缩进作为代码块的标识,而不是使 ...

  7. Linux 操作系统编程基础知识

    Linux操作系统 1.Linux 操作系统编程基础知识 1.3 系统调用和库函数 1.3.1 接口 命令接口:以命令形式呈现在用户面前,方便用户直接或间接控制自己的作业. 程序接口:为应用程序使用系 ...

  8. Python编程基础知识(入门了解)

    python编程语言在近几年越来越火,下面分享一下python编程语言的简单基础知识. (相关知识点实验内容源自实验平台) 知识点一:类的声明 在python中,类的声明是通过class关键字: cl ...

  9. 学习编程基础知识,进阶成为更优秀的程序员

    "脚本小子"常常从某些网站上复制脚本代码,然后到处粘贴,却并不明白其中的方法与原理 ​​当你看到编程语言编进教材的时候,看到一个文科生也在编写Python程序进行数据分析的时候,你 ...

最新文章

  1. 服务发现与负载均衡 dubbo zk原理
  2. 串行总线---差分互连(差分线)之共模、奇模、偶模
  3. MongoDB安装步骤
  4. 飞信linux下载文件,OpenFetion(飞信for Linux)
  5. MySQL数据库开发的 36 条军规
  6. linux服务与进程管理sup,linux下进程管理工具-supervisord
  7. python怎么创意出字符图形_创造课程系列:Python入门
  8. Silverlight:UpdateSourceTrigger属性的应用
  9. 创建和分享你的Visual Studio color
  10. eja智能压力变送器工作原理_eja变送器详解_eja变送器工作原理_eja变送器如何选型...
  11. 浅谈Unity中的优化
  12. [Chrome插件] SelectJd(京东自营筛选器) v1.0.0 发布
  13. LCD 调试方法及问题汇总
  14. Python基础——PyCharm版本——第八章、文件I/O(核心2——JSON序列化与反序列化——超重点)
  15. aardio - 伪装进程测试
  16. Excel按照原图片名称批量导出工作簿中所有图片
  17. uni-app常见知识点总结
  18. 程序员应该如何应对35岁中年危机?
  19. 腾讯天美后端2018实习一面面经
  20. 忧喜交加的宜家,这些年到底错过了什么?

热门文章

  1. html Window与document区别(轉)
  2. Gym 100507G The Debut Album (滚动数组dp)
  3. hdu 2196 树形dp
  4. 【转】浅析动态代理类实现过程
  5. HEU 2036 Paths on a Grid
  6. 用公式实现动态设置图表的轴数据项
  7. MFC菜单栏(CMenu)控件
  8. QT学习——Tcp客户端通信(本地回环)
  9. SQLiteOpenHelper的简单使用
  10. Visual C++位图操作