《Windows界面编程》PPT课件.ppt

上传人:博****1 文档编号:567714100 上传时间:2024-07-22 格式:PPT 页数:29 大小:211.51KB
返回 下载 相关 举报
《Windows界面编程》PPT课件.ppt_第1页
第1页 / 共29页
《Windows界面编程》PPT课件.ppt_第2页
第2页 / 共29页
《Windows界面编程》PPT课件.ppt_第3页
第3页 / 共29页
《Windows界面编程》PPT课件.ppt_第4页
第4页 / 共29页
《Windows界面编程》PPT课件.ppt_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《《Windows界面编程》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《Windows界面编程》PPT课件.ppt(29页珍藏版)》请在金锄头文库上搜索。

1、第7章 Windows界面编程7.1 7.1 7.1 7.1 文件文件文件文件IOIOIOIO7.2 7.2 7.2 7.2 控制台执行环境控制台执行环境控制台执行环境控制台执行环境7.3 GUI7.3 GUI7.3 GUI7.3 GUI程序执行环境程序执行环境程序执行环境程序执行环境7.4 7.4 7.4 7.4 多线程编程多线程编程多线程编程多线程编程7.1 7.1 文文 件件 I/OI/O 文件是指存放在外部存储介质上的数据集合。文件是指存放在外部存储介质上的数据集合。文件是指存放在外部存储介质上的数据集合。文件是指存放在外部存储介质上的数据集合。每个文件都必须有一个文件名,文件的命名规

2、每个文件都必须有一个文件名,文件的命名规每个文件都必须有一个文件名,文件的命名规每个文件都必须有一个文件名,文件的命名规则由文件系统来确定。则由文件系统来确定。则由文件系统来确定。则由文件系统来确定。 7.1.1 7.1.1 文件及其基本操作文件及其基本操作 根据文件的存储格式,可分为根据文件的存储格式,可分为根据文件的存储格式,可分为根据文件的存储格式,可分为ASCIIASCIIASCIIASCII码文件码文件码文件码文件(又称为文本文件)和二进制文件。(又称为文本文件)和二进制文件。(又称为文本文件)和二进制文件。(又称为文本文件)和二进制文件。 对文件的基本操作有对文件的基本操作有对文件

3、的基本操作有对文件的基本操作有4 4 4 4种,包括打开文件、种,包括打开文件、种,包括打开文件、种,包括打开文件、读文件、写文件、关闭文件。读文件、写文件、关闭文件。读文件、写文件、关闭文件。读文件、写文件、关闭文件。对文件的读或写操作的最小单位是一个字对文件的读或写操作的最小单位是一个字对文件的读或写操作的最小单位是一个字对文件的读或写操作的最小单位是一个字节,一次读或写操作可以传送多个字节。节,一次读或写操作可以传送多个字节。节,一次读或写操作可以传送多个字节。节,一次读或写操作可以传送多个字节。 7.1.2 7.1.2 文件操作的基本函数文件操作的基本函数 C C C C语言提供了一些

4、库函数,用于对文件的打语言提供了一些库函数,用于对文件的打语言提供了一些库函数,用于对文件的打语言提供了一些库函数,用于对文件的打开、读取、写入、关闭等。表开、读取、写入、关闭等。表开、读取、写入、关闭等。表开、读取、写入、关闭等。表7-17-17-17-1列出了常用的列出了常用的列出了常用的列出了常用的一些库函数。在汇编程序中,也可以调用这些库一些库函数。在汇编程序中,也可以调用这些库一些库函数。在汇编程序中,也可以调用这些库一些库函数。在汇编程序中,也可以调用这些库函数。函数。函数。函数。 1. 1. 1. 1. 打开文件打开文件打开文件打开文件在打开文件时,可以选取不同的模式,见下表。在

5、打开文件时,可以选取不同的模式,见下表。在打开文件时,可以选取不同的模式,见下表。在打开文件时,可以选取不同的模式,见下表。 模式模式说说 明明打打开开方方式式r r以只读方式打开文件。不能对该文件执行写操作以只读方式打开文件。不能对该文件执行写操作w w以只写方式打开文件。文件中的原有内容被清除以只写方式打开文件。文件中的原有内容被清除a a以添加方式打开文件。文件中的原有内容被保留,在文以添加方式打开文件。文件中的原有内容被保留,在文件后面添加数据件后面添加数据r+r+以读写方式打开文件。文件必须存在以读写方式打开文件。文件必须存在w+w+以读写方式打开文件。文件中的原有内容被清除以读写方

6、式打开文件。文件中的原有内容被清除a+a+同同“a”a”,可以读文件,可以读文件类类型型t t文件类型为二进制文件文件类型为二进制文件b b文件类型为文本文件文件类型为文本文件2. 2. 文本文件和二进制文件的读写操作文本文件和二进制文件的读写操作 一般来说,对二进制文件的读写操作,使一般来说,对二进制文件的读写操作,使用用freadfread和和fwritefwrite函数,函数,freadfread将文件的内容原将文件的内容原封不动地读入到内存中,封不动地读入到内存中,fwritefwrite将内存的内容将内存的内容写入到文件中。写入到文件中。对文本文件的操作,一般采用对文本文件的操作,一

7、般采用fgetsfgets和和fputsfputs。3. 3. 文件句柄文件句柄 系统为每个打开的文件都在内存中开辟一个系统为每个打开的文件都在内存中开辟一个系统为每个打开的文件都在内存中开辟一个系统为每个打开的文件都在内存中开辟一个区域,用于存放文件的有关信息(如文件名、文区域,用于存放文件的有关信息(如文件名、文区域,用于存放文件的有关信息(如文件名、文区域,用于存放文件的有关信息(如文件名、文件位置等)。这些信息保存在一个结构类型变量件位置等)。这些信息保存在一个结构类型变量件位置等)。这些信息保存在一个结构类型变量件位置等)。这些信息保存在一个结构类型变量中,该结构类型由系统定义,名为

8、中,该结构类型由系统定义,名为中,该结构类型由系统定义,名为中,该结构类型由系统定义,名为FILEFILEFILEFILE。打开文。打开文。打开文。打开文件时,库函数返回一个指向件时,库函数返回一个指向件时,库函数返回一个指向件时,库函数返回一个指向FILEFILEFILEFILE结构的指针,称结构的指针,称结构的指针,称结构的指针,称为文件句柄。为文件句柄。为文件句柄。为文件句柄。 在程序开始运行时,系统中已经定义了在程序开始运行时,系统中已经定义了3 3个标准文件个标准文件stdinstdin、stdoutstdout和和stderrstderr。这。这3 3个个文件不需要打开,可以直接使

9、用。文件不需要打开,可以直接使用。(1 1)stdinstdin(2 2)stdoutstdout(3 3)stderrstderr4. 4. 4. 4. 文件指针文件指针文件指针文件指针 每一个被打开的文件都有一个读写位置指针,每一个被打开的文件都有一个读写位置指针,每一个被打开的文件都有一个读写位置指针,每一个被打开的文件都有一个读写位置指针,指向当前的读写位置。每次读写一个(或一组)指向当前的读写位置。每次读写一个(或一组)指向当前的读写位置。每次读写一个(或一组)指向当前的读写位置。每次读写一个(或一组)数据后,系统自动将位置指针移动到下一个读写数据后,系统自动将位置指针移动到下一个读

10、写数据后,系统自动将位置指针移动到下一个读写数据后,系统自动将位置指针移动到下一个读写位置上。文件指针是一个长整数,表示当前读写位置上。文件指针是一个长整数,表示当前读写位置上。文件指针是一个长整数,表示当前读写位置上。文件指针是一个长整数,表示当前读写位置在整个文件中的偏移。位置在整个文件中的偏移。位置在整个文件中的偏移。位置在整个文件中的偏移。 5. 5. 5. 5. 文件处理实例文件处理实例文件处理实例文件处理实例 对文件可以进行创建、打开、读、写、关闭对文件可以进行创建、打开、读、写、关闭对文件可以进行创建、打开、读、写、关闭对文件可以进行创建、打开、读、写、关闭等操作。灵活运用这些操

11、作,就可以实现高级的等操作。灵活运用这些操作,就可以实现高级的等操作。灵活运用这些操作,就可以实现高级的等操作。灵活运用这些操作,就可以实现高级的功能。功能。功能。功能。例例例例7.1 7.1 7.1 7.1 对文件内容进行加密、解密。对文件内容进行加密、解密。对文件内容进行加密、解密。对文件内容进行加密、解密。 ( ( ( (见课见课见课见课本本本本) ) ) )7.2 7.2 控制台执行环境控制台执行环境 在控制台上执行的程序,属于文本界面,可在控制台上执行的程序,属于文本界面,可在控制台上执行的程序,属于文本界面,可在控制台上执行的程序,属于文本界面,可以对它的输入或输出进行重定向。执行

12、程序时,以对它的输入或输出进行重定向。执行程序时,以对它的输入或输出进行重定向。执行程序时,以对它的输入或输出进行重定向。执行程序时,在命令行上也可以指定一些参数,程序在执行过在命令行上也可以指定一些参数,程序在执行过在命令行上也可以指定一些参数,程序在执行过在命令行上也可以指定一些参数,程序在执行过程中可以获得这些参数。本书前面的实例程序大程中可以获得这些参数。本书前面的实例程序大程中可以获得这些参数。本书前面的实例程序大程中可以获得这些参数。本书前面的实例程序大都采用控制台界面。都采用控制台界面。都采用控制台界面。都采用控制台界面。 7.2.1 7.2.1 输入输入/ /输出重定向输出重定

13、向 1. 1. 1. 1. 输入重定向输入重定向输入重定向输入重定向scanfscanfscanfscanf、getchgetchgetchgetch、getchargetchargetchargetchar等函数从标准输入等函数从标准输入等函数从标准输入等函数从标准输入设备设备设备设备stdinstdinstdinstdin中读取字符。中读取字符。中读取字符。中读取字符。2. 2. 2. 2. 输出重定向输出重定向输出重定向输出重定向对程序的输出,同样在程序名后跟上:对程序的输出,同样在程序名后跟上:对程序的输出,同样在程序名后跟上:对程序的输出,同样在程序名后跟上: 输出文件名输出文件名输

14、出文件名输出文件名这是输出的重定向。程序中用这是输出的重定向。程序中用这是输出的重定向。程序中用这是输出的重定向。程序中用printfprintfprintfprintf输出的结果输出的结果输出的结果输出的结果全部写到该文件中。如果该文件已经存在,则原先的全部写到该文件中。如果该文件已经存在,则原先的全部写到该文件中。如果该文件已经存在,则原先的全部写到该文件中。如果该文件已经存在,则原先的内容被清除掉,执行程序后,文件的内容为该程序的内容被清除掉,执行程序后,文件的内容为该程序的内容被清除掉,执行程序后,文件的内容为该程序的内容被清除掉,执行程序后,文件的内容为该程序的输出。如果要将程序的输

15、出添加到一个文件的末尾,输出。如果要将程序的输出添加到一个文件的末尾,输出。如果要将程序的输出添加到一个文件的末尾,输出。如果要将程序的输出添加到一个文件的末尾,保持该文件原先的内容,可以用保持该文件原先的内容,可以用保持该文件原先的内容,可以用保持该文件原先的内容,可以用“”格式:格式:格式:格式: 输出文件名输出文件名输出文件名输出文件名输入输入输入输入/ / / /输出重定向可以同时使用。输出重定向可以同时使用。输出重定向可以同时使用。输出重定向可以同时使用。 7.2.2 7.2.2 命令行参数及程序返回值命令行参数及程序返回值 1. 1. 命令行参数命令行参数除了重定向文件名等特殊参数

16、外,命令除了重定向文件名等特殊参数外,命令行上的输入作为行上的输入作为mainmain函数的两个参数函数的两个参数argcargc和和argvargv传送到程序中。传送到程序中。 2. 2. 程序返回值程序返回值mainmain函数的返回值,作为整个程序执行函数的返回值,作为整个程序执行的结果。的结果。7.3 GUI7.3 GUI程序执行环境程序执行环境 在在在在GUIGUIGUIGUI(图形用户界面)中,用户与计算机(图形用户界面)中,用户与计算机(图形用户界面)中,用户与计算机(图形用户界面)中,用户与计算机通过图形图像以及文本进行交互。在通过图形图像以及文本进行交互。在通过图形图像以及文

17、本进行交互。在通过图形图像以及文本进行交互。在Windows Windows Windows Windows 系系系系统中,统中,统中,统中,GUIGUIGUIGUI程序显示出特定的窗口、图标、按钮、程序显示出特定的窗口、图标、按钮、程序显示出特定的窗口、图标、按钮、程序显示出特定的窗口、图标、按钮、对话框等对象,而用户通过鼠标或键盘控制、操对话框等对象,而用户通过鼠标或键盘控制、操对话框等对象,而用户通过鼠标或键盘控制、操对话框等对象,而用户通过鼠标或键盘控制、操作这些对象。作这些对象。作这些对象。作这些对象。 7.3.1 7.3.1 窗口窗口 1. 1. 1. 1. 窗口的创建窗口的创建窗

18、口的创建窗口的创建 2. 2. 2. 2. 窗口的销毁窗口的销毁窗口的销毁窗口的销毁 3. 3. 3. 3. 创建、销毁窗口的汇编语言程序创建、销毁窗口的汇编语言程序创建、销毁窗口的汇编语言程序创建、销毁窗口的汇编语言程序 7.3.2 7.3.2 菜单菜单 1. 1. 1. 1. 在资源文件中描述菜单内容在资源文件中描述菜单内容在资源文件中描述菜单内容在资源文件中描述菜单内容 2. 2. 2. 2. 创建窗口类指定菜单名创建窗口类指定菜单名创建窗口类指定菜单名创建窗口类指定菜单名 3. 3. 3. 3. 处理菜单消息处理菜单消息处理菜单消息处理菜单消息 4. 4. 4. 4. 编译连接编译连接

19、编译连接编译连接 7.3.3 7.3.3 对话框对话框 1. 1. 1. 1. 对话框的子窗口控件对话框的子窗口控件对话框的子窗口控件对话框的子窗口控件 2. 2. 2. 2. 子窗口控件之间的控制子窗口控件之间的控制子窗口控件之间的控制子窗口控件之间的控制 3. 3. 3. 3. 消息处理消息处理消息处理消息处理 7.3.4 GDI7.3.4 GDI编程编程 GDIGDIGDIGDI(Graphics Device InterfaceGraphics Device InterfaceGraphics Device InterfaceGraphics Device Interface,图形设备

20、接,图形设备接,图形设备接,图形设备接口)是口)是口)是口)是WindowsWindowsWindowsWindows的一个核心部件,它接受来自的一个核心部件,它接受来自的一个核心部件,它接受来自的一个核心部件,它接受来自WindowsWindowsWindowsWindows应用程序的绘图请求,即应用程序的绘图请求,即应用程序的绘图请求,即应用程序的绘图请求,即GDIGDIGDIGDI函数调用,将这些请求函数调用,将这些请求函数调用,将这些请求函数调用,将这些请求传给相应的设备驱动程序,在硬件上完成特定的输出,传给相应的设备驱动程序,在硬件上完成特定的输出,传给相应的设备驱动程序,在硬件上完

21、成特定的输出,传给相应的设备驱动程序,在硬件上完成特定的输出,例如打印机、屏幕等。例如打印机、屏幕等。例如打印机、屏幕等。例如打印机、屏幕等。GDIGDIGDIGDI可以完成可以完成可以完成可以完成3 3 3 3种类型的图形输出。种类型的图形输出。种类型的图形输出。种类型的图形输出。(1 1 1 1)矢量输出)矢量输出)矢量输出)矢量输出(2 2 2 2)光栅图形输出)光栅图形输出)光栅图形输出)光栅图形输出(3 3 3 3)文本输出)文本输出)文本输出)文本输出1. 1. 1. 1. 设备描述表设备描述表设备描述表设备描述表 2. 2. 2. 2. 画矩形画矩形画矩形画矩形 3. 3. 3.

22、 3. 显示位图显示位图显示位图显示位图4. 4. 4. 4. 显示文本显示文本显示文本显示文本 7.4 7.4 多线程编程多线程编程 运行一个可执行文件时,运行一个可执行文件时,运行一个可执行文件时,运行一个可执行文件时,WindowsWindowsWindowsWindows操作系统会创操作系统会创操作系统会创操作系统会创建一个进程,为该进程生成私有内存地址空间(包建一个进程,为该进程生成私有内存地址空间(包建一个进程,为该进程生成私有内存地址空间(包建一个进程,为该进程生成私有内存地址空间(包括代码区、数据区、堆栈区),把磁盘上的可执行括代码区、数据区、堆栈区),把磁盘上的可执行括代码区

23、、数据区、堆栈区),把磁盘上的可执行括代码区、数据区、堆栈区),把磁盘上的可执行文件映射到该空间上。接着,操作系统自动地为该文件映射到该空间上。接着,操作系统自动地为该文件映射到该空间上。接着,操作系统自动地为该文件映射到该空间上。接着,操作系统自动地为该进程创建一个主线程,主线程通常从可执行文件的进程创建一个主线程,主线程通常从可执行文件的进程创建一个主线程,主线程通常从可执行文件的进程创建一个主线程,主线程通常从可执行文件的第一条指令处开始执行。第一条指令处开始执行。第一条指令处开始执行。第一条指令处开始执行。除了主线程外,在程序中创建新的线程,创建出除了主线程外,在程序中创建新的线程,创

24、建出除了主线程外,在程序中创建新的线程,创建出除了主线程外,在程序中创建新的线程,创建出的线程和主线程在同一个进程环境中执行,共享相的线程和主线程在同一个进程环境中执行,共享相的线程和主线程在同一个进程环境中执行,共享相的线程和主线程在同一个进程环境中执行,共享相同的私有内存地址空间、全局变量、资源、文件句同的私有内存地址空间、全局变量、资源、文件句同的私有内存地址空间、全局变量、资源、文件句同的私有内存地址空间、全局变量、资源、文件句柄等。但是,每一个线程都有一个独立的堆栈。柄等。但是,每一个线程都有一个独立的堆栈。柄等。但是,每一个线程都有一个独立的堆栈。柄等。但是,每一个线程都有一个独立

25、的堆栈。 利用线程能够并发运行的特点,可以将一利用线程能够并发运行的特点,可以将一个应用程序内的具体操作分成若干个线程。个应用程序内的具体操作分成若干个线程。因此,采用多线程能够提高因此,采用多线程能够提高CPUCPU的使用效率,的使用效率,发挥多发挥多CPUCPU、超线程、多核系统的优势。、超线程、多核系统的优势。 7.4.1 7.4.1 线程的创建和终止线程的创建和终止 调用调用调用调用CreateThreadCreateThreadCreateThreadCreateThread函数创建新的线程,其参数如下:函数创建新的线程,其参数如下:函数创建新的线程,其参数如下:函数创建新的线程,其

26、参数如下:CreateThreadCreateThreadCreateThreadCreateThread PROTO PROTO PROTO PROTO lpThreadAttributes:DWORDlpThreadAttributes:DWORDlpThreadAttributes:DWORDlpThreadAttributes:DWORD, , , , dwStackSize:DWORDdwStackSize:DWORDdwStackSize:DWORDdwStackSize:DWORD, , , , lpStartAddress:DWORDlpStartAddress:DWORDlp

27、StartAddress:DWORDlpStartAddress:DWORD, , , , lpParameter:DWORDlpParameter:DWORDlpParameter:DWORDlpParameter:DWORD, , , , dwCreationFlags:DWORDdwCreationFlags:DWORDdwCreationFlags:DWORDdwCreationFlags:DWORD, , , , lpThreadId:DWORDlpThreadId:DWORDlpThreadId:DWORDlpThreadId:DWORD 7.4.2 7.4.2 线程的同步线程的同

28、步 线程能够共享进程的资源,包括数据区中的线程能够共享进程的资源,包括数据区中的线程能够共享进程的资源,包括数据区中的线程能够共享进程的资源,包括数据区中的全局变量。多个线程使用同一个全局变量,必须全局变量。多个线程使用同一个全局变量,必须全局变量。多个线程使用同一个全局变量,必须全局变量。多个线程使用同一个全局变量,必须考虑同步的问题。考虑同步的问题。考虑同步的问题。考虑同步的问题。 例例例例7.9 7.9 7.9 7.9 线程同步示例。线程同步示例。线程同步示例。线程同步示例。 (见课本)(见课本)(见课本)(见课本)7.4.3 7.4.3 互斥锁互斥锁 一个互斥锁可以作为一个一个互斥锁可

29、以作为一个一个互斥锁可以作为一个一个互斥锁可以作为一个“令牌令牌令牌令牌”,每次只,每次只,每次只,每次只允许一个线程访问共享的全局变量。互斥锁用于允许一个线程访问共享的全局变量。互斥锁用于允许一个线程访问共享的全局变量。互斥锁用于允许一个线程访问共享的全局变量。互斥锁用于线程之间的互相排斥:在任何一个时刻,只有一线程之间的互相排斥:在任何一个时刻,只有一线程之间的互相排斥:在任何一个时刻,只有一线程之间的互相排斥:在任何一个时刻,只有一个线程可以个线程可以个线程可以个线程可以“拥有拥有拥有拥有”一个互斥锁。一个互斥锁。一个互斥锁。一个互斥锁。 (1 1)创建互斥锁。)创建互斥锁。(2 2)获取互斥锁。)获取互斥锁。 (3 3)释放互斥锁。)释放互斥锁。 7.4.4 7.4.4 线程同步演示程序线程同步演示程序 例例7.10 7.10 使用互斥锁同步线程对全局变使用互斥锁同步线程对全局变量访问。量访问。 (见课本)(见课本)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号