zoukankan      html  css  js  c++  java
  • 1、Windows程序运行原理及程序编写流程

    Windows APIWin32 SDK

    操作系统提供了各种方便开发Windows应用程序的编程接口,所的函数都在Windows.h头文件中声明。Win32 SDK(Software Development Kit): Windows 32位平台下的软件开发包,包括API函数,帮助文档,微软提供的一些辅助开发工具。

    1、窗口:桌面也是窗口,消息框和对话框;

    2、句柄:资源(窗口、图标、光标),系统创建资源会为他们分配内存并返回这些资源标识符---句柄

    3、Windows是一种事件驱动方式的程序设计模式,主要基于消息

      消息:Windows中由结构体MSG来表示,

    typedef struct tagMSG{

               HWND hwnd;//消息所属的窗口句柄

    UINT    message;//消息本身标识符,由一数值表示,系统对消息定//义为WM_XXX(WMWindows Message缩写)

                           WPARAM      wParam; //随消息的不同附加信息也不同

                           LPARAM       lParam;          //消息的附加参数

                           DWORD time;              //消息投递的时间

                           POINT           pt;                 //鼠标当前位置

    }

    4、消息队列:操作系统把感知到的事件封装成消息,投到应用程序的消息队列,应用程序从中取出消息并进行响应,每个应用程序都有消息队列

    5、窗口过程:是一个回调函数,专门负责处理消息的函数,由操作系统调用

    6、消息队列问题:OS根据标识把消息投递到各个应用程序的消息队列中

    7、WinMain函数,是windows程序的入口点函数,相当于dos的main函数

    8、

          创建一个完整的Win32程序,该程序实现创建一个窗口,其中主要步骤为

    A.       WinMain函数的定义

    B.        创建一个窗口      创建一个完整的窗口的四个步骤SDK1设计窗口类,2注册窗口类,3创建窗口,4显示窗口

    C.        进行消息循环

    D.       编写窗口过程函数

    回调函数的实现机制:

    (1)      定义一个回调函数

    (2)      提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者

    (3)      当特定的事件或条件发和的时候,调用使用函数指针调用回调函数对事件进行处理

    针对Windows的消息处理机制,窗口过程函数被调用的过程如下:

    A.       在设计窗口类的时候,将窗口赛程函数的地址赋值给lpfnWndProc成员变量

    B.        调用RegisterClass(&wndclass)注册窗口类,那么系统就有了我们所编写的窗口过程函数的地址

    C.        当应用程序接收到某一窗口的消息,调用DispatchMessage(&msg)将消息加值给系统。系统则利用先前注册窗口类时得到函数指针,调用窗口过程函数对消息进行处理。HICON LoadIcon(HINSTANCE hInstance LPCTSTR lpIconName);//加载窗图标,返回系统分配给该图标的句柄, LPCTSTR被定义为CONST CHAR *(指向常量的字符指针),图标的ID是一个常数,要使用MAKEINTRESOUCE宏把资源ID标识转换为需要的LPCTSTR类型

    9、windows应用程序的消息处理机制

    10、C语言指针函数和函数指针的几个例子

         char * const*(*next)();

       void (*signal(int sig,void(*func)(int)))(int);

       char *(* c[10])(int **p);

    11.       什么时候用NULL,什么时候用0。答,对指针赋值时用NULL,对变量赋值时用0

    12.       什么是野指针?答:将指针指向的变量的内存释放后,此指针即变成野指针!如何避免野指针?答:将此指针指向NULL即可。p=NULL;

  • 相关阅读:
    【转】Yeoman自动构建 Angularjs 项目
    【转】jquery的extend和fn.extend
    Centos查看已经安装的软件或者包
    Big Boss
    利用防火墙实现向外网提供内网web和dns服务
    从浏览器控制和管理 Android 及iOS设备 stf
    python 3 解决 ERROR: Could not find a version that satisfies the requirement xxx 的问题
    一直在说高并发,多少QPS才算高并发?
    压力/负载/性能(强度、容量、稳定性)测试之异同
    CPU利用率、内存利用率、磁盘IO、网卡负载解读和学习
  • 原文地址:https://www.cnblogs.com/chester/p/2010696.html
Copyright © 2011-2022 走看看