zoukankan      html  css  js  c++  java
  • Windows API 编程入门

    Windows 工作原理的中心思想就是“动态链接”概念。Windows 自身带有一大套函数,应用程序就是通过调用这些函数

    来实现它的用户界面和在屏幕上显示文本和图形的。这些函数都是在动态链接库里实现的。

    这些文件的名称都带有后缀 .dll,或有时带有 .exe。

    Windows 的 3 个主要子系统:内核(kernel),用户(user),GDI。

    内核 负责操作系统的传统工作:如 内存管理,文件输入/输出 以及任务管理等。

    用户 指的是用户界面,负责所有的窗口管理。

    GDI 就是图形设备接口,负责在屏幕或打印机上显示文本与图形。

    在 Windows 程序中,调用 Windows 函数与调用 C 语言的库函数没有什么两样。

    最主要的区别就是 C 语言库函数的机器代码会直接链接到你的程序代码中去,而 Windows 函数则是放到你的程序之外的 DLL 里。

    Windows 程序运行时,它通过一个叫“动态链接”的进程与 Windows 接口。

    每个 Windows 的 EXE 文件包含它所要用到的各个动态链接库以及库中的函数的引用地址。

    当一个 Windows 程序被装入内存后,程序中的函数调用都被解析 DLL 函数入口的指针,同时这些被调用的函数也被装入内存。

    当链接 Windows 程序以生存可执行文件时,一定得链接你的编程环境所提供的特殊的“导入库”。

    这些导入库包含所有 Windows 函数调用要碰到的动态链接库的名字及引用信息。链接程序利用这些信息构建 EXE 文件中的表格,

    当装入程序的时候,Windows 要靠这些表格来解析 Windows 函数调用。

    另外值得提醒的一点是,MFC 是对 API 的封装,隐藏了许多复杂的情节。

    Windows 的 Hello World!程序:

    #include <windows.h>
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
    {
         MessageBox (NULL, TEXT ("Hello, World!"), TEXT ("HelloMsg"), MB_OKCANCEL) ;    
         return 0 ;
    }

    该程序的 #include<windows.h> 就是像 C 语言的 #include<stdio.h> 一样重要的头文件。

    而 int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)

    就像 C 语言的 int main(void) 一样,都是程序的入口。C 程序的入口是 main,Windows 程序的入口是 WinMain。

    绝大多数的 Windows 程序都遵循“匈牙利标记法”:
    变量名前都有一个短前缀,用以表明该变量的数据类型。

    前缀 数据类型
    c char 或 WCHAR 或 TCHAR
    by BYTE(无符号字符)
    n short(短整型)
    i int(整型)
    x,y int,表示 x 坐标和 y 坐标
    cx,cy int,表示 x 或 y 的长度,c 表示“count”(计数)
    B 或 f BOOL(int); f 表示“flag”
    w WORD(无符号短整型)
    l LONG(长整型)
    dw DWORD(无符号长整型)
    fn 函数
    s 字符串
    sz 以零结束的字符串
    h 句柄
    p 指针

    WinMain的第一个参数叫做"实例句柄"(Instance Handle)。句柄就是一个数值,用它来标识某些东西。

    句柄是一个 4byte 的数值,可用来标识 窗口,按钮,图标,滚动条,输出设备,控件或者文件等等。

    WinMain的第二个参数通常是 NULL。

    WinMain的第三个参数是用来运行程序的命令行(CommandLine)。

     WinMain的第四个参数是用来指明程序最初如何显示。(最大化到全屏,正常显示,最小化到任务栏)。

    MessageBox函数:

     函数原型:int WINAPI MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);

    第一个参数通常是一个窗口句柄

    第二个参数是在信息框里出现的文本字符串。

    第三个参数是标题栏上显示的文本字符串。

    第四个参数是以前缀MB_开头的一些常量组合。用以对话框中的按钮,图标等等。

    函数的调用: MessageBox( hWnd, TEXT("信息框里的内容“), TEXT("标题框里的标题”), MB_OK);

                          该函数一般都如此调用,第四个参数都是 MB_***,以 MB 开头的常量。

     (函数的有些参数设置为 NULL, 或者 0 效果是一样的,因为大多数编译器把 NULL 宏定义为 0)

    (注意:遇到程序在弄懂之后一定要自己去敲,一定要自己去敲,一定要自己去敲)

    (注意:遇到程序在弄懂之后一定要自己去敲,一定要自己去敲,一定要自己去敲)

    (注意:遇到程序在弄懂之后一定要自己去敲,一定要自己去敲,一定要自己去敲)

  • 相关阅读:
    (转)程序员应该知道的10个eclipse调试技巧
    Hibernate缓存
    【转】Hibernate 原汁原味的四种抓取策略
    hibernate 延迟加载和抓取策略
    移动端接口安全
    Thinkphp3.2.3中的RBAC权限验证
    单例模式--工厂模式
    php爬虫入门
    php爬虫入门
    .htaccess使用方法介绍
  • 原文地址:https://www.cnblogs.com/M-Anonymous/p/9291315.html
Copyright © 2011-2022 走看看