Windows编程(二)基础整理

1.Windows API是什么?根据其完成的功能可分为几种类型?

  • Windows操作系统应用程序接口(Windows API),有非正式的简称法为WinAPI,是微软对于Windows操作系统中可用的核心应用程序编程接口的称法。它被设计为各种语言的程序调用,也是应用软件与Windows系统最直接的交互方式。大多数驱动程序需要对Windows系统更底层次访问接口,由所用版本的Windows的Native API来提供接口。Windows有一个软件开发包(SDK, software development kit)提供相应的文档和工具,以使程序员开发使用Windows API的软件和利用Windows技术。
  • 基础服务(Base Services)
    图形设备接口(GDI)
    图形化用户界面(GUI)
    通用对话框链接库(Common Dialog Box Library)
    通用控件链接库(Common Control Library)
    Windows外壳(Windows Shell)
    网络服务(Network Services)

Windows编程(二)基础整理_第1张图片

2.什么是句柄?句柄有哪些作用?

  • 整个Windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应用程序中的不同对象和同类中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。应用程序能够通过句柄访问相应的对象的信息,但是句柄不是指针,程序不能利用句柄来直接阅读文件中的信息。如果句柄不在I/O文件中,它是毫无用处的。 句柄是Windows用来标志应用程序中建立的或是使用的唯一整数,Windows大量使用了句柄来标识对象。

Windows编程(二)基础整理_第2张图片

3.Windows编程中窗口的含义是什么?

Windows编程(二)基础整理_第3张图片

  • 在Windows中,一个窗口就是屏幕上的一个矩形区域,它接收用户的输入并以文字或图形的格式显示输出内容。
  • 窗口是Windows应用程序基本的操作单元,是应用程序与用户之间交互的接口,也是系统管理应用程序的基本单位。 

4.Windows系统提供的标准控件有哪些?

  • 控件是Windows 图形用户界面的主要组成部分之一,用户通过操作控件对象完成与应用程序之间的交互。控件的使用集中体现了Windows 系统面向对象的特点。
  • 分类:静态控件,按钮控件,编辑框控件,列表框控件,组合框控件,滚动条控件

5.什么是Visual C++ API 工程?它由哪些类型的文件构成?

  • 在Visual C++ IDE中,把实现程序设计功能的一组相互关联的C++源文件、资源文件以及支撑这些文件的类的集合称为一个项目——Visual C++ API 工程。Visual C++ IDE以项目作为程序开发的基本单位,项目用于管理组成应用程序的所有元素,并由它生成应用程序。
  • 构成文件:源文件、头文件、模块定义文件、资源描述文件、项目文件

6.Windows编程中常用的消息有哪些?应用程序如何响应键盘消息?

  • Windows应用程序的运行需要依靠外部发生的事件来驱动,描述事件发生的信息称为消息(message)。例如,当用户按下键盘的某个键时,系统就会产生一条特定的消息,标识键盘被按下事件的发生。Windows中常用的消息有:窗口管理消息、初始化消息、输入消息、系统消息、剪切板消息、控件处理消息、控件通知消息、滚动条通知消息、非用户区消息、MDI(多文档见面)消息、DDE(动态数据交换)消息,以及应用程序自定义的消息等。
  • Windows操作系统产生和传递键盘消息的过程如下:
  1. 当用户按下某个键时,键盘会检测到这个动作,并通过键盘控制器把扫描码(scan code)传送给Windows的键盘驱动程序。(键盘上的每一个键都对应一个唯一的标识值,我们称之为扫描码。键盘扫描码与具体的硬件有关的,不同厂商对同一个键的扫描码有可能不同。)
  2. 键盘驱动程序把这个扫描码转换为键盘虚拟码,(虚拟码与具体硬件无关,不同厂商的键盘,同一个键的虚拟码都是相同的。)然后,键盘驱动程序把该键盘操作的扫描码和虚拟码以及其它信息传递给操作系统。
  3. Windows操作系统的用户模块将获得的按键信息封装在一个键盘消息中,并把该键盘消息发送到应用程序的消息列队中。
  4. 应用程序接收到消息后,将对消息进行转换并处理。

7.什么是事件驱动的程序执行过程?简要描述Windows的事件驱动程序模型。

  • 事件驱动程序设计是一种全新的程序设计方法,它不是由事件的顺序来控制,而是由事件的发生来控制,而这种事件的发生是随机的、不确定的,并没有预定的顺序,这样就允许程序的用户用各种合理的顺序来安排程序的流程。
  • 对于需要用户交互的应用程序来说,事件驱动的程序设计有着过程驱动方法无法替代的优点。它是一种面向用户的程序设计方法,它在程序设计过程中除了完成所需功能之外,更多的考虑了用户可能的各种输入,并针对性的设计相应的处理程序。它是一种“被动”式程序设计方法,程序开始运行时,处于等待用户输入事件状态,然后取得事件并作出相应反应,处理完毕又返回并处于等待事件状态。
  • 它的框图如图所示: (图形4分)

    Windows编程(二)基础整理_第4张图片

    在图中,输入界面1-3并没有固定的顺序,用户可以随机选取,以任何合理的顺序来输入数据。

8.IP地址和端口号在网络程序设计中有什么作用?

  • 要想使网络中的计算机能够进行通信,必须为每台计算机指定一个标识号,通过这个标识号来指定接受数据的计算机或者发送数据的计算机。 在TCP/IP协议中,这个标识号就是IP地址,它可以唯一标识一台计算机,通过IP地址可以连接到指定计算机,但如果想访问目标计算机中的某个应用程序,还需要指定端口号。在计算机中,不同的应用程序是通过端口号区分的。

9.什么是动态链接库?其作用是什么?

  • 动态链接库(Dynamic Link Library)是一个可以被其它应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源,虽然包含了可执行代码却不能单独执行,而应由Windows应用程序直接或间接调用。动态链接是相对于静态链接而言的。所谓静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分即函数和过程的代码就在程序的exe文件中,该文件包含了运行时所需的全部代码。当多个程序都调用相同函数时,内存中就会存在这个函数的多个拷贝,造成内存资源浪费。而动态链接所调用的函数代码没有被拷贝到应用程序的可执行文件中去,而是在其中加入了所调用函数的描述信息(往往是一些重定位信息)。当应用程序被装入内存开始运行时,在Windows的管理下,才在应用程序与相应的DLL之间建立链接关系。当要执行所调用DLL中的函数时,根据链接产生的重定位信息,Windows才转去执行DLL中相应的函数代码。
  • 作用:(1)
  1. 更加节省内存并减少页面交换;
  2.  DLL文件与EXE文件独立,只要输出接口不变(即名称、参数、返回值类型和调用约定不变),更换DLL文件不会对EXE文件造成任何影响,因而极大地提高了可维护性和可扩展性。
  3. 不同编程语言编写的程序只要按照函数调用约定就可以调用同一个DLL函数;
  4. 适用于大规模的软件开发,使开发过程独立、耦合度小,便于不同开发者和开发组织之间进行开发和测试。
  5. 节约磁盘空间:当应用程序使用动态链接时,多个应用程序可以共享磁盘上单个DLL副本。相比之下,当应用程序使用静态链接库时,每个应用程序要将库代码作为独立的副本链接到可执行镜像中。

10.在Windows API程序设计中,资源的主要作用有哪些?

  • Windowss应用程序可以使用:加速键,位图,光标,对话框,菜单,工具条,字符串等。在Windows的可执行文件中,资源是独立于代码的,使用单独的Resource Compiler来进行编译,并嵌入到可执行文件中,在编程过程中,代码是可复用的,通过资源的导入导出功能来实现资源的可复用。另外,程序的国际化,也是通过资源来实现的。

11.套接字(Socket)连接过程中要用到下列方法,试说明各方法的功能?哪些方法会发生阻塞?Shutdown()、Close()、Bind()、Listen()、Accept()、Send()、Receive()、Connect()

  • 套接字是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。
  • Shutdown():可实现控制套接口禁止接收、禁止发送或禁止收发。在多进程中如果一个进程中shutdown(sfd, SHUT_RDWR)后其它的进程将无法进行通信。
  • close():终止了数据传送的两个方向。关闭本进程的socket id,但链接还是开着的,用这个socket id的其它进程还能用这个链接,能读或写这个socket id,比 如果有多个进程共享一个套接字,close每被调用一次,计数减1,直到计数为0时,也就是所用进程都调用了close,套接字将被释放。
  • Bind():把一个本地协议地址赋予给一个套接字,即套接字绑定。
  • Listen():把一个未连接的套接字转换成一个被动套接字(监听套接字),指示内核应接受指向该套接字的连接请求。
  • Accept():由TCP服务器调用,用于从已完成连接队列队头返回一个已完成连接。如果已完成队列为空,那么进程被投入睡眠(假定套接字为阻塞方式)。
  • Connect():TCP客户用connect函数来建立与TCP服务器的连接。若connect失败,则该套接字不再可用,必须关闭,不能再对这样的套接字再次调用connect函数,并重新调用socket函数。
  • 会发生阻塞的过程:输入操作:receive ()  接受连接:accept() 外出连接:connect()

你可能感兴趣的:(C/C++)