第一章 起步

1,windows主要的三个动态库:

kernel32.dll负责操作系统的传统工作,包括内存管理、文件输入以及任务管理等。

user32.dll负责用户界面的操作,即所有窗口的管理

gdi32.dll为图形设备接口,负责在屏幕或者打印机上显示文本与图形

 

2,当windows程序运行的时候,通过一个叫做"动态链接(dynamic linking)"的进程与Windows接口。每个Windows的exe文件包含它所要用到的各个动态链接库以及库中的函数的引用地址,当一个Windows程序被装入内存之后,程序中的函数调用都被解析成dll函数入口的指针,同时这些被调用的函数也被装入内存中。

当链接Windows程序以生成执行文件时,一定得链接编程环境所提供的特殊"导入库"。这些导入库包含所有Windows函数调用要碰到的动态链接库的名字以及引用信息。链接程序利用这些信息构建exe文件中的表格,当装入程序的时候,Windows要靠这些表格来解析Windows函数的调用。

有关导入库:参考:http://www.cnblogs.com/sosoman/archive/2012/06/04/2533457.html

 

3,Windows程序解析:

windows的HelloWorld程序:

helloworld.c

/*-----------------------------------------

helloworld.c

    Displays "Hello, World." in a messagebox

------------------------------------------*/

 

#include <windows.h>

 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,

                 LPSTR lpCmdLine, int nShowCmd)

{

 

    MessageBox(NULL, TEXT("Hello World."), TEXT("HelloMsg"), MB_OKCANCEL);

 

    return 0;

}

使用gcc可编译链接源代码:

gcc ./helloworld.c –o ./helloworld.exe -mwindows

(1),头文件

windows.h是最重要的一个头文件,它囊括了若干其它Windows头文件,其中的某些头文件又包含了另外的一些头文件,其中最重要也是最基本的头文件为:

windef.h    基本数据类型定义

winnt.h    支持unicode的类型定义

winbase.h    内核函数

winuser.h    用户界面函数

wingdi.h        图形设备接口函数

这些头文件定义了Windows的所有数据类型、函数调用、数据结构以及常量标识符。

具体引入哪个Windows sdk版本对应的头文件由Visual Studio相应版本确定。

(2),程序入口

WinMain函数的定义在winbase.h中。

WINAPI: #define WINAPI __stdcall    //在winbase.h中定义

这条语句规定了一种函数调用约定,表明如何生成在堆栈中放置函数调用的机器代码。

被这个关键字修饰的函数,其参数都是从右向左通过堆栈传递的,函数调用在返回前要由被调用者清理堆栈。

HINSTANCE为实例句柄(Instance Handle)。在windows程序中,句柄为一个整数值,程序里用它来标识某些东西。第一个hinstance标识了这个应用程序。

在早期的Windows程序中,当多路并发运行同一个程序时,就需要为那个程序创建多个实例。同一程序的所有实例都共享代码以及只读存储(菜单及对话框之类的资源)。一个程序可以查看hPrevInstance参数从而知道是否有它的其它实例正在运行。他也就可以因此跳过某些零散杂物步骤,把一些数据从前一个实例搬到自己的数据区来。在32位Windows中,这一概念已不再使用。因此WinMain的第二个参数总是NULL(0)。

第三个参数是用来运行程序的命令行。第四个参数用来指明程序最初如何显示,或正常显示,或最大化到全屏,或最小化显示在任务栏上。

(3)MessageBox函数

第一个参数为窗口句柄

第二个参数为信息框中的文本字符串,使用TEXT宏便于不同编码项目设置,第三个参数为消息框标题,第四个参数为定义消息框按钮等样式

第四个参数可选:

MB_OK

MB_OKCANCEL

MB_YESNOCANCEL

默认值:
MB_DEFBUTTON1

MB_DEFBUTTON2

MB_DEFBUTTON3

MB_DEFBUTTON4

图标:

MB_ICONHAND

等。。

MessageBox也有各种返回值:IDOK,ISYES,等等

参考:https://msdn.microsoft.com/en-us/library/windows/desktop/ms645505(v=vs.85).aspx

附:

Microsoft Windows SDK:

https://en.wikipedia.org/wiki/Microsoft_Windows_SDK

 

 

Windows程序设计(第五版)学习:第一章 起步的更多相关文章

  1. Windows程序设计(第五版)学习:第四章 文本输出

    第四章 文本输出 1,客户区:整个应用程序窗口中没有被标题栏.边框.菜单栏.工具栏.状态栏和滚动条占用的区域.简而言之,客户区就是窗口中程序可以在上面绘制并向用户传达可视化信息的区域.   2,大多数 ...

  2. Windows程序设计(第五版)学习:第二章 Unicode简介

    第二章 Unicode简介 1,Windows通过双字节技术DBCS解决这个问题,代码页定义不同的字符集,称为ANSI字符集,比如日文为CP932,韩文为CP949,繁体中文为CP950,简体中文为C ...

  3. Windows程序设计(第五版)学习:第三章 窗口与消息

        第三章 窗口与消息 1,windows窗口过程:应用程序所创建的每一个窗口都有一个与之关联的窗口过程,用于处理传递给窗口的消息. 2,窗口依据窗口类来创建.窗口类标识了用于处理传递给窗口的消息 ...

  4. C#高级编程 (第六版) 学习 第一章:.Net体系结构

    第一章 .Net体系结构 1,公共语言运行库(Common Language Runtime, CLR) .Net Framework的核心是其运行库的执行环境,称为公共语言运行库,或.Net运行库. ...

  5. 《Windows程序设计第5版》学习进度备忘

    书签:另外跳过的内容有待跟进 __________________学习资源: <Windows程序设计第5版珍藏版> __________________知识基础支持: _________ ...

  6. Java程序设计(2021春)——第一章续笔记与思考

    Java程序设计(2021春)--第一章续笔记与思考 目录 Java程序设计(2021春)--第一章续笔记与思考 Java数据类型 基本数据类型 引用类型 基本数据类型--整数类型的细节 基本数据类型 ...

  7. Java程序设计(2021春)——第一章课后题(选择题+编程题)答案与详解

    Java程序设计(2021春)--第一章课后题(选择题+编程题)答案与详解 目录 Java程序设计(2021春)--第一章课后题(选择题+编程题)答案与详解 第一章选择题 1.1 Java与面向对象程 ...

  8. web学习第一章

    web学习第一章   我是大概9月10日开始走上IT之路的,一开始学习了小段时间的自动化办公软件, 昨天我开始学习客户端网页编程,我了解什么是WEB,一些比较老古董的计算模式和发展历史,印象最让我深刻 ...

  9. oracle学习 第一章 简单的查询语句 ——03

    1.1最简单的查询语句 例 1-1 SQL> select * from emp; 例 1-1 结果 这里的 * 号表示全部的列.它与在select 之后列出全部的列名是一样的.查询语句以分号( ...

随机推荐

  1. OpenSSL - RSA非对称加密实现

    非对称加密:即两端使用一对不同的密钥进行加密. 在非对称加密中,需要两对密钥,公钥和私钥. 公钥个私钥属于对立关系,一把加密后,只有另一把才可以进行解密. 公钥数据加密 数字证书内包含了公钥,在进行会 ...

  2. HDU 1209

    http://acm.hdu.edu.cn/showproblem.php?pid=1209 水题,按五个时针分针成的锐角从小到大排序,角度相同时间从早到晚,输出中间的那个 时针一小时走30度,一分钟 ...

  3. Java开发环境的配置

    为了能够在计算机上开发Java程序和运行Java程序,就需要在Windows操作系统上配置Java开发环境. 首先,安装JDK: 1.在Oracle官网上下载JavaSE: 2.在Download下载 ...

  4. RSS(Residual Sum of Squares)的自由度为什么是n-1呢

    [转载请注明出处]http://www.cnblogs.com/mashiqi 在回归问题中,偶尔我们会遇到求方差的估计的情况.举了例子,我们常常通过Gaussian分布${\cal N}(\mu , ...

  5. Map/Reduce 工作机制分析 --- 错误处理机制

    前言 对于Hadoop集群来说,节点损坏是非常常见的现象. 而Hadoop一个很大的特点就是某个节点的损坏,不会影响到整个分布式任务的运行. 下面就来分析Hadoop平台是如何做到的. 硬件故障 硬件 ...

  6. Eclipse Java 调试基本技巧

    前言 这一部分是Eclipse中最为重要的部分.调试的重要性想必大家都清楚. 调试无疑是做项目最苦比的事情,但优秀的编码习惯,良好的调试方式能让这没那么苦,甚至还有点乐趣:). 本文讲解使用Eclip ...

  7. vi 编辑器命令 (share)

    转自:http://man.ddvip.com/soft/vieditor/vi.html 一.Unix编辑器概述 编辑器是使用计算机的重要工具之一,在各种操作系统中,编辑器都是必不可少的部件.Uni ...

  8. kallisto:Near-optimal RNA-Seq quantification

    Near-optimal RNA-Seq quantification https://pachterlab.github.io/kallisto 文章标题:   Pseudoalignment fo ...

  9. ping不通 www.baidu.com 163.com

    可以试试这个命令:netsh winsock reset ping不通,但是可以上网,原因有以下几个: 1.远程主机禁止ping 2.firewall禁止ping,icmp 3.dns解析有问题 fr ...

  10. python3_phantomJS_test

    phantomJS和selenium差不多,几乎不相上下,使用会麻烦一点,但是比selenium快很多: # !/usr/bin/python3.4 # -*- coding: utf-8 -*- f ...