3.3.3 窗口的建立 客户需要自己建立窗口,建立后会得到系统返回的窗口句柄(HWND),后继的针对窗口的操作都针对句柄进行。 1.注册窗口类 建立窗口前,需要制定好这个窗口的相关属性,最主要的就是将自己定义的消息处理函数与窗口关联,其他的属性还包括:菜单、图标等等。 这个属性指定步骤是通过指定"窗口类"来完成的。 对于自己建立的窗口,这个"窗口类"需要自己制定,也即自己充一个WNDCLASS结构,然后向系统注册。 对于一些特殊窗口,如按钮等控件,他们的行为是系统制定好了的,所以不需要自己注册,直接使用对应的“窗口类”名称就行了。 2.建立窗口 建立窗口时,注册的"窗口类"名称作为参数传入。这样,当有针对该窗口的消息时,将调用“窗口类”中指定的消息处理函数,在其中得到处理。在应用程序中使用对话框是很方便的,因为对话框可以从模板创建,而模板可以使用可视化资源编译器进行编译,这就大大简化了窗口界面的设计过程。同时为了简化程序设计,Windows在内部也定义了许多窗口类,即常说的字窗口控件,应用程序直接使用这些类名就可以创建子窗口。 4.2 Winsock 接口 Winsock是处理网络的Windows API。许多函数与BSD Unix中使用的Berkeley套接字函数是相同的。 通信的双方要建立连接,这个连接的终端就是套接字。客户端和服务器端都有一个套接字,每个套接字与特定的IP地址和端口号关联。 几乎所有的Winsock函数都在套接字上进行操作,因为套接字是连接的句柄。连接的两端都要使用一贯套接字,它们与平台无关。套接字是双通的,也就是说在同一个套接字上既能够接收也能够发送数据。 套接字主要有两种类型,一种是流套接字(SOCK_STREAM),另外一种是数据报套接字(SOCK_DGRAM)。流套接字是为需要可靠连接的应用程序设计的。这些程序经常使用连续的数据流。用于这种类型套接字的协议是TCP。流套接字最常用,一些众所周知的协议如HTTP、TCP、SMTP、POP3等都使用它。 数据报套接字使用UDP作为下层协议,是无连接的,有一个最大缓冲区大小。它是为那些需要发送小数据包,并且对可靠性要求不高的应用程序设计的。与套接字不同,数据包套接字并不保证数据会到达终端,也不保证他是以正确的顺序到来的。数据报套接字传输效率相当高,他经常用于音频或视频应用程序。对这些程序来说,速度比可靠性更加重要。 |