zoukankan      html  css  js  c++  java
  • Windows程序设计(第五版)学习:第一章 起步

    第一章 起步

    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

     

     

  • 相关阅读:
    POJ 2756 Autumn is a Genius 大数加减法
    RoboGuice注入框架简单应用
    Android 从相冊获取近期拍摄的多张照片(获取相机拍照所存储的照片)
    不可不知的DIP、IoC、DI以及IoC容器
    Codeforces Round #156 (Div. 2)---A. Greg&#39;s Workout
    zend framework将zip格式的压缩文件导入并解压到指定文件
    TreeSet排序
    Bee Framework_百度百科
    duck
    anglehack参赛总结
  • 原文地址:https://www.cnblogs.com/xyb930826/p/5305812.html
Copyright © 2011-2022 走看看