文档章节

Win32窗口编程基础知识——主函数

a
 abcdxyz
发布于 2012/05/04 15:18
字数 1428
阅读 918
收藏 3
点赞 1
评论 0

虽然说编程重要的是思想,用什么语言实现都是鸡肋,但是并不是说你对一个语言一点也不会看一遍就可以精通,我的经历就是以前只注意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中的主函数的基本讲解就算完成了。

© 著作权归作者所有

共有 人打赏支持
a
粉丝 1
博文 6
码字总数 5705
作品 0
东城
[Beautifulzzzz的博客目录] 快速索引点这儿O(∩_∩)O~~,红色标记的是不错的(⊙o⊙)哦~

3D相关开发 [direct-X] 1、direct-X最小框架 [OpenGL] 1、环境搭建及最小系统 [OpenGL] 2、企业版VC6.0自带的Win32-OpenGL工程浅析 51单片机 [51单片机] 1602液晶显示控制代码 [51单片机] 1...

史迪奇2号
2017/08/01
0
0
【Visual C++】游戏开发笔记之一——API函数、DirectX的关键系统

本系列文章由zhmxy555(毛星云)编写,转载请注明出处。 http://blog.csdn.net/zhmxy555/article/details/7318264 作者:毛星云 邮箱: happylifemxy@qq.com 大家别叫我楼主可以吗- -.请叫我...

长平狐
2012/11/12
73
0
【Visual C++】游戏开发笔记之一——API函数、DirectX的关键系统

本系列文章由zhmxy555(毛星云)编写,转载请注明出处。 http://blog.csdn.net/zhmxy555/article/details/7318264 作者:毛星云 邮箱: happylifemxy@qq.com 大家别叫我楼主可以吗- -.请叫我...

长平狐
2012/11/12
119
0
【Visual C++】游戏开发笔记二十六 DirectX 11各组件的介绍&第一个DirectX 11 Demo的创建

本系列文章由zhmxy555(毛星云)编写,转载请注明出处。 http://blog.csdn.net/zhmxy555/article/details/7688515 作者:毛星云 邮箱: happylifemxy@163.com 这节笔记主要讨论DirectX 11现有...

长平狐
2012/11/12
236
0
OpenCV学习:隐藏 Console 窗口

在VC++中使用OpenCV,一般是建立一个 win32 console application 项目,当运行此类程序的时候,默认情况下会有一个类似DOS窗口的console窗口,供程序与用户之间交互之用。 但是有时候我们只想...

heartfly
2010/10/25
0
1
VC托盘程序的简单实现

以下是网上看到的一个实现VC托盘的程序,好像只适用于对话框程序。经本人简单整理。 一、托盘简介 所谓的“托盘”,在Windows系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那...

wwl33695
2015/06/09
0
0
0-Linux 网络编程学习笔记导航

学习交流群: Linux 学习交流群 610441700 说明:本系列文章并不能取代 《UNP》这本旷世之作,文章中难免有错误与不足之处,希望读者们遇到有疑问的地方可以加群互相交流,共同进步。写这一系...

q1007729991
2017/04/04
0
0
【Visual C++】游戏开发笔记二十五 最简化的DirectX 11开发环境的配置

本系列文章由zhmxy555(毛星云)编写,转载请注明出处。 http://blog.csdn.net/zhmxy555/article/details/7672101 作者:毛星云 邮箱: happylifemxy@qq.com 期待着与志同道合的朋友们相互交...

长平狐
2012/11/12
175
0
C/C++Win32编程基础详解视频下载

课题视频:C/C++Win32编程基础详解 视频知识:win32窗口的创建 windows事件机制 主讲:择善Uncle老师 学习交流群:386620625 验证码:625 -----------------------------------------------...

择善_Zach
2015/06/25
16
0
Qt creator写Qt入门程序(超详细)

废话一下。第一、Qt是跨平台的,在windows下和Linux基本上是没什么区别的,只要用的是Qt带的库就可以。 第二、Qt c++编程和学校学的c++还有有一点区别的,学校学的c++是基础知识,Qt c++编程...

startstorm
2015/09/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

设计模式:单例模式

单例模式的定义是确保某个类在任何情况下都只有一个实例,并且需要提供一个全局的访问点供调用者访问该实例的一种模式。 实现以上模式基于以下必须遵守的两点: 1.构造方法私有化 2.提供一个...

人觉非常君
14分钟前
0
0
《Linux Perf Master》Edition 0.4 发布

在线阅读:https://riboseyim.gitbook.io/perf 在线阅读:https://www.gitbook.com/book/riboseyim/linux-perf-master/details 百度网盘【pdf、mobi、ePub】:https://pan.baidu.com/s/1C20T......

RiboseYim
25分钟前
0
0
conda 换源

https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --add channels https://mir......

阿豪boy
35分钟前
0
0
Confluence 6 安装补丁类文件

Atlassian 支持或者 Atlassian 缺陷修复小组可能针对有一些关键问题会提供补丁来解决这些问题,但是这些问题还没有放到下一个更新版本中。这些问题将会使用 Class 类文件同时在官方 Jira bug...

honeymose
44分钟前
0
0
非常实用的IDEA插件之总结

1、Alibaba Java Coding Guidelines 经过247天的持续研发,阿里巴巴于10月14日在杭州云栖大会上,正式发布众所期待的《阿里巴巴Java开发规约》扫描插件!该插件由阿里巴巴P3C项目组研发。P3C...

Gibbons
53分钟前
0
0
Tomcat介绍,安装jdk,安装tomcat,配置Tomcat监听80端口

Tomcat介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 java程序写的网站用tomcat+jdk来运行...

TaoXu
53分钟前
0
0
TensorFlow,从一个 Android Demo 开始

TensorFlow Android Demo 项目地址 Machine Learning 既然提到了 TensorFlow,那是不是得神经网络、机器学习了解下? 如果你能坚持把 机器学习速成课程 给啃完了,觉得还挺有兴趣的,那可以考...

孟飞阳
55分钟前
0
0
JVM学习笔记二:内存结构规范

1、JVM基本结构图 2、java堆(Heap) 3、方法区(Method Area) 4、程序计数器 5、JAVA栈图解 局部变量表:八大基本类型,还可以存储引用类型 上一篇:JVM学习笔记一:类加载机制介绍...

刘祖鹏
今天
0
0
mui集成微信H5支付(返回白屏问题已经解决)

一.项目需求 因为公司人员缺少,没有专门开发安卓和ios的人员,为了项目尽早上线采用了混合APP开发的方式,我选择了MUI混合开发框架,项目中需要在用户购买VIP会员的时候进行支付,所以需要在项目...

银装素裹
今天
1
0
SpringBoot集成Redis--配置自定义的RedisCacheManager

配置自定义的RedisCacheManager--1自定义键生成规则 默认的键生成器 当不指定缓存的key时,SpringBoot会使用SimpleKeyGenerator生成key。 SimpleKeyGenerator SimpleKey 查看源码可以发现,它...

karma123
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部