• Windows API 简介


        操作系统的作用之一就是屏蔽一些复杂的直接对硬件操作,并提供给用户一个简单明确的应用接口,类外对于一些基本的或常用的操作也以API的形式提供给用户,比如内存管理、文件管理等。

    消息传递机制

        消息循环是一个进程(线程)活动的源动力。一个进程(线程)再启动并初始化以后便进入了消息循环,它不断处理传递给它的信息,从而不断推动进程(线程)向前运行。

        Win32应用程序框架中的消息循环部分:

    1 while(GetMessage(&msg, NULL, 0, 0))
    2 {
    3     if(!TranslateAccelerator(msg, hwnd, hAccelTable, &msg))
    4     {
    5         TranslateMessage(&msg);
    6         DispatchMessage(&msg);
    7     }
    8 }

        首先,GetMessage()从进程(其实是进程的主线程)的消息队列中获取一个信息,如果队列中没有消息,则GetMessage()函数将等待一个消息的到来以后才返回。

        然后函数TranslateAccelerator()判断该消息是不是一个按键消息并且是一个加速键消息,如果是,则该函数将把几个按键消息转换为一个加速键消息传递给窗口的回调函数。处理了加速键以后,函数TranslateMessage()将把两个按键消息WM_KEYDOWN和WM_KEYUP转换成一个WM_CHAR,注意:消息WM_KEYDOWM和WM_KEYUP仍将传递给窗口的回调函数。

        在这些处理以后,DispatchMessage()函数将把此消息发送给该消息指定的串口中已设定的回调函数。如果消息为WM_QUIT则GetMessage()函数将返回0,从而退出while循环而结束进程。

    WinMain()函数的前两个参数hInstance和hPrevInstance

    1 // WinMain()函数原型
    2 int WINAPI WinMain(
    3     HINSTANCE hInstance,
    4     HINSTANCE hPrevInstance,
    5     LPSTR     lpCmdLine,
    6     int       nCmdShow);

        WinMain()函数的hInstance是系统为其分配的进程实例句柄,hPrevInstance是该程序在同一地址空间上已装载的实例句柄,由于在Windows 95以及以后的Windows版本都是独立的进程空间,因此它的值总是NULL。

    如何在程序中调用API函数

        在程序中调用一个API函数,需要注意以下几点:

    1) 该API函数是否在用户的系统平台上可用。

    2) 是否声明了(#include)含有该API函数定义的头文件。

    3) 是否告诉链接程序(Link.EXE)链接含有该API实现的库文件。

        另外还要注意该函数特定的一些注意事项,例如一些参数在使用前必须初始化等。

     <参考文献>Windows API程序设计参考大全/求是科技/ISBN 7-115-14167-3

    知识是最好的情人,她永远不会嫌弃你!
  • 相关阅读:
    vscode的插件收集
    关于vue移动端的适配
    Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null objec
    android studio 使用 aidl(三)权限验证
    Android权限级别(protectionLevel)
    android studio 使用 aidl(二)异步回调
    android studio 使用 aidl(一)基础用法
    如何获取Android唯一标识(唯一序列号)
    android studio 生成aar和引用aar
    android studio 编译NDK android studio 生成.so文件
  • 原文地址:https://www.cnblogs.com/Joseph-AMI/p/3515170.html
Copyright © 2020-2023  润新知