当前位置:文档之家› windows编程考试终极复习资料

windows编程考试终极复习资料

windows编程考试终极复习资料
windows编程考试终极复习资料

2.1 windows文件系统

Windows支持4种文件系统。

1)NT文件系统(NTFS)。2)文件分配表(FAT&FAT32)。3)CD-ROM文件系统(CDFS)。4)通用磁盘格式(UDF)。只有NTFS支持安全性。

2.2文件名

目录和文件名不能包含任何ASCII字符在1-31之间的字符或者以下字符:*?”“<>\ /

目录和文件名称不区分大小写,但可以保留大小写。

2.11.2目录管理

创建或者删除目录涉及到一对简单函数:

BOOL CreateDirectory(

LPCTSTR lpPathName,

LPSECURITY_ATTRIBUTES lpSecurityAttributes)

BOOL RemoveDirectory(LPCTSTR lpPathName)

3.9文件处理策略

C库提供了一些不同的优点,包括如下:

1)代码可以移植到非windows平台。2)便捷的面向行和字符的函数,而windows中没有相对应的函数来化简字符串处理。3)C库函数通常比windows函数更易于使用。4)面向行和流字符的函数易于改变以进行普通调用,尽管失去了可移植性特定。5)C库可以在多线程环境下运行。

C库也有一些限制。如下:

1)C库不能管理或遍历目录,也不能获取或设置大多数文件属性。2)C库在fseek函数中使用32位的文件位置,所以在顺序读取巨大文件的同时,却不能根据需要定位巨大文件的任何地方。3)C库中没有高级特性,比如文件安全性、内存映射文件、文件锁、异步I/O和进程间通信。

3.10文件锁定

文件锁可以是只读(共享)或读写(专有)。最重要的是锁属于进程。

最普遍的函数是LockFileEx,其次是LockFile。

在使用文件锁是应考虑以下因素:

1)解锁应该同前面锁定使用完全相同的范围。2)锁不能跟文件现有的锁有重叠,否则会产生冲突。3)锁可以超出文件的长度范围,该方法在进程或线程扩展文件时有用。4)锁不能被新建的进程继承。

3.11注册表

注册表是关于程序和系统配置信息的集中的分层的数据库。对注册表的访问是通过注册关键字来实现的,他跟文件系统目录相似,关键字可以包含其他关键字或名称/值对,他跟文件名称和内容是类似的。

注册表名称/值对包含如下信息:1)操作系统版本号、编译号和注册用户。2)每个正确安装程序的相似信息。3)计算机处理器类型、处理器数量、系统内存等等信息。4)用户特定信息,比如主目录和程序选项。5)安全信息,比如用户账号。6)从文件扩展名刀可执行程序的映射。这些映射在用户点击文件名图标时通过用户界面shell使用。例如.doc扩展名映射到微软的word程序。7)映射网络地址到主机名。

4.1.4 异常处理顺序

读图

4.3错误和异常*

错误可以被当做一个可知位置偶然发生的事件,例如系统调用错误应该能被代码段中的逻辑立即检测和汇报。这样,程序一般包含明确的测试逻辑以判断文件读取操作是否有误,第二章采用ReportError函数来诊断并响应错误。

另一方面,异常可能会在任何地方发生,而要对异常进行测试是不可能或不现实的。例如除以零和内存访问违规就是实际例子。

虽然如此,但是两者的区别有时是模糊的。Windows可以在内存分配过程中使用HeapAlloc 函数产生异常,二档内存不足时使用HeapCreat函数。程序可以通过使用RaiseException函数的程序员定义的异常代码来引起异常。

异常处理器提供了不使用goto或longjmp移交控制权,从而程序控制下的内部程序块或函数中推出的一个便利机制。当程序块访问资源,比如打开文件,内存或同步对像时,这种能力尤其重要,因为处理器可以释放他们,也有可能在异常处理器之后继续程序执行而不是终止程序,另外,当程序块中断退出时,程序可以恢复系统状态,比如浮点掩码。

用户定义异常:

RaiseException函数:

VIOD RaiseException(

DWORD dwExceptionCode,

DWORD dwExceptionFlags,

DWORD cArguments,

CONST DWORD *lpArguments)

4.5终止处理器

终止处理器跟异常处理器的作用是相同的,但是程序当线程由于正常程序流程程序块离开以及异常发生时,他才会执行。另一方面,终止处理器不能诊断异常。

在try-finally语句使用_finally关键字来构建中止处理器。

4.10矢量异常处理

矢量异常处理(VEH)管理跟控制台控制处理器管理是相似的,尽管细节有所不同。可以使用AddVectoredExceptionHandler来增加或注册一个处理器。

PVOID AddVectoredExceptionHandler(

ULONG FirstHandler,

PVECTORED_EXCEPTION_HANDLER VectoredHandler)

5.2堆

Windows以堆得方式来维护内存池。一个进程可以包含多个堆,可以从浙西堆中分配内存。对于不同的数据结构,使用不同堆来分配有时是很方便的,不同堆的有点包括:

1)公平。没有哪个线程可以获得比分配给其堆得内存还要多的内存,特别是由于程序忘记释放不在需要的数据单元而引起的内存泄漏缺点,只影响进程中的某个进程。2)多线程性能。每个线程具有自己的堆,线程之间的抢夺会减少,这充分提高了性能。3)分配效率。在小堆内分配固定大小的数据单元比在巨大的堆内分配许多不同大小单元的效率更高。分段也减少了。而且,每个线程具有唯一的堆简化了同步,所以产生了更高的效率。4)解除分配效率。整个堆及其包含的所有数据结构可以用单个函数调用来释放。该调用同时也释放堆中任何泄漏的内存分配。5)引用局部化的效率。在一个小堆维护数据结构确保单元限制在相对少量的页面中,这无形中减少了数据结构单元处理时的页面错误。

注意:堆没有安全属性,因为他在进程之外是不可以访问的。

要销毁整个堆,使用HeapDestroy。这是CloseHandle函数移除不需要的句柄的规则例外。BOOL CloseHandle(HANDLE hHeap)

5.5内存映射文件

Windows内存映射文件功能也可以将虚拟内存空间直接映射到普通文件。这有几个优点:1)没有必要执行直接的文件I/O(读写)。2)在内存中创建的数据结构将会保存在文件中,以便以后被相同的或不同的程序使用。3)方便而有用的内存算法(排序、查找树、字符串处理等等)可以处理文件数据,即使该文件可能比可用的物理内存要大得多。如果文件比较大,那么性能挥手道页面调度行为的影响。4)文件处理性能在同样情况细也能充分提升。5)没有必要管理缓存及其所含文件数据。操作系统能有效而可靠的完成这一艰巨任务。6)多个进程可以共享内存,通过映射虚拟地址空间到相同的文件或到页面调度文件中(进程间内存共享是映射到页面调度文件的主要原因)。7)没有必要消耗页面调度空间。

5.11DLL入口点

串口化是必须的,因为DllMain必须在没有中断的情况下执行完初始化。

5.12DLL版本管理

DLL的一个主要优点是多个程序可以共享单个实现。然而该能力导致了兼容复杂性,正如下所述:1)新函数会增加,是的隐式连接程序在链接.LIB文件时所假定的偏移量无效。而显式链接则避免了这个问题。2)新版本会改变行为,引发现有未更新的程序问题。3)依赖新DLL函数的程序有时链接着较老的DLL版本。

DLL兼容性问题解决方案:1)使用DLL版本号作为.DLL和.LIB文件名的一个组成部分,通常是作为后缀。例如Utility_3_0.DLL和Utility_3_0.LIB就用于本书web站点和所有跟本书版号相关的项目范例。通过使用隐式或显式链接,程序可以确定版本需求并使用不同的名称来访问文件。改方案常用于UNIX程序。2)微软引入了并行DLL或者汇编和组件概念。该解决方案需要在程序中增加一个用XML编写的声明以定义DLL需求。3).NET架构提供了并行执行的附加支持。

6.2.1指定可执行的映像和命令行

lpApplicationName或lpCommandLine制定了可执行映像名,规则如下:

1)lpApplicationName,如不是NULL,就是可执行映像名称。如果映像名称包括空壳,可以使用引号。2)否则,可执行映像将是lpCommandLine的首个后记。通常当lpApplicationName 为NULL时,只指定lpCommandLine。尽管如此,lpApplicationName仍有许多详细规则:1)如果lpApplicationNamebushi NULL,它指定可执行模块。指定完整路径和文件名或使用部分名称和当前驱动器和路径,无需进一步查找。名称中包含文件扩展名如.EXE或.BA T。2)如果lpApplicationName字符串是NULL,lpCommandLine中第一个空格定界符的标记值是程序名。如果名称中没有完整的目录路径,查找顺序如下:1.当前进程映像的目录。2当前目录。3.windows系统目录,可以通过GetSystemDirectory来获取。4. windows目录,可以通过GetSystemDirectory来获取。5.在环境变量PATH中指定的目录。

新进程可以通过常用的argv机制获取命令行,或用GetCommandLine以单个字符串形式来获取命令行。

注意命令行不是一个常数字符串。这跟主程序的argv参数不是常量是一致的。程序可以修改参数,尽管建议在参数字符串副本中进行修改。

新进程不必使用跟父进程同样的UNICODE定义。各种组合都是可能的。

7.10进程和线程优先级和调度

线程获取跟其进程优先级相关的优先级。通过CreateProcess可以初始设置的进程优先级有四类,而每类具有基本优先级。

IDLE_PRIORITY_CLASS,基本优先级4。

NORMAL_ PRIORITY_CLASS,基本优先级9或者7。

HIGH_ PRIORITY_CLASS,基本优先级13。

REALTIME_ PRIORITY_CLASS,基本优先级24。

线程优先级设置成跟进程基本优先级相关,而在线程创建时优先级被设成进程优先级。线程优先级在进程基本优先级的±2范围内。所产生的五个线程优先级的符号名称如下:THREAD_ PRIORITY_LOWEST

THREAD_ PRIORITY_BELOW_NORMAL

THREAD_ PRIORITY_NORMAL

THREAD_ PRIORITY_ ABOVE_NORMAL

THREAD_ PRIORITY_HIGHEST

这些值来设置或者读取线程的相关优先级。注意使用带符号的整数而不是DWORD。

7.13计时等待

最后的韩式Sleep允许线程放弃处理器,并从运行状态转为在指定时间段(单位为毫秒)处于等待状态。

7.14纤程

纤程是线程中可以被程序而不是被内核调度的执行单元。一个线程可以创建多个纤程,而纤程自身决定了下一个需要执行的线程纤程。纤程具有独立的堆栈,但是完全在线程的环境中运行,而且,纤程管理完全发生在内核玩的用户空间,纤程可以被当做一个轻量级的线程,尽管有许多差别。

使用纤程的主要目的有:1)最重要的是,许多程序,尤其是为UNIX编写的程序使用了专有的线程实现,现在通常过时了,他们被编写成调度自身的线程。纤程使其可以更加容易移植到windows平台上。2)线程不必阻值对文件锁、互斥、命名管道输入或者其他资源的等待。而纤程却可以轮询资源,如果资源不可用,就切换到另一个特定的纤程。3)纤程在线程中运作,访问线程和进程资源。不想线程,纤程不是抢占调度的。Windows的执行程序实际上不知道纤程,纤程是完全在用户空间内的纤程DLL中管理的。4)纤程允许实现写作例程,这样程序可以再互相关联的任务间切换。线程不能允许这点。程序员不能直接控制下一个要执行的线程是哪个。5)主要的软件厂商使用纤程并宣扬其性能优点。

由6个函数组成了纤程API,他们按下列顺序使用:

线程首先必须通过调用CreateThreadToFiber来启动纤程操作。线程包含一个独立的纤程,改纤程被称作主纤程。该调用给纤程数提供了一个指针,他可以像线程参数被用来创建线程的独特数据一样的使用。

1)主纤程或者其他纤程使用CreateFiber来创建另外的纤程。每个纤程有一个开始地址、一个堆栈大小和参数。每个新纤程是通过地址而不是句柄来标识的。

2)一个单独的纤程可以通过调用GetFiberDatal来获取数据,正如CreateFiber中所获取的一样。

3)同理,一个纤程可以通过GetCurrentFiber来获取标识。

4)一个运行的纤程通过调用SwitchToFiber把控制权交给另一个纤程,指出另一纤程的地址。纤程必须明确指出线程内下一个要运行的纤程。

5)DeleteFiber函数删除现有的纤程以及相关数据。

纤程相互调度的两种方式:主辅调度。端到端调度。

8.2线程同步对象

这两种机制用于进程和线程相互同步。

1)进程中线程可以用ExitProcess等待其他进程终止,使用WaiForSingleObject或者WaitForMultipleObject等待进程句柄。纤程可以用同样的方式等待其他线程终止(ExitThread 或者return)。

2)文件锁是专门针对同步文件访问的。

8.3 CRITICAL_SECTION对象

前面所述的关键代码就是同时只能有一个纤程可以执行的代码段。多线程并发执行关键代码段可以导致不可预测的错误结果。

CRITICAL_SECTION(CS)对象可被初始化和删除,但是没有句柄且不能被其它进程共享。CRITICAL_SECTION具有非内核对象的优点,在用户空间中维护。这通可以提供性能提升,但并非是种如此。一旦引入内核同步对象将会讨论性能优点。

8.4保护变量的CRITICAL_SECTION

使用CRITICAL_SECTION是简单的,其常见用法是允许线程访问全局共享变量。5.6.2互斥、CRITICAL_SECTION与死锁

避免死锁的一个方法是“尝试和后退”战略,借此线程调用WaiForSingleObject时存在有限的超时值,当检测到被用哟互斥时,通过让出处理器或者做短时间的休眠来“后退”以等待再次尝试。

8.9回顾:互斥与CRITICAL_SECTION

区别如下:

1)互斥在被终止线程抛弃后悔获得信号,这样其他线程就不会永远受阻。

2)互斥等待可以超时,然而只能探测CS。

3)互斥可以命名并可被不同进程中的线程共享。

4)可以把WaiForSingleObject用于互斥,这既是一个编程便利,同时如果使用得当也是避免死锁的方法。

5)创建互斥的线程可以立即指定所有权。在CS中,几个线程可以抢占CS。

6)CS通常弹不总是比互斥快很多。

8.8事件

事件使用5个函数:CreateEvent,OpenEvent,SetEvent,ResetEvent,PauleEvent.

事件可以分为手动重置和自动重置,这一属性是通过CreateEvent调用来实现的。

可用OpenEvent来打开一个可能来自于其他进程的命名事件。

线程可以使用SetEvent向事件发送信号。

PauleEvent释放所有当前等待手动重置事件的线程,但是随后事件就自动重置。在自动重置事件的情况下,PauleEvent释放单个等待线程。

注意ResetEvent仅在手动重置事件被SetEvent设置成获得信号时才是有用的。

10.1.1同时使用时间和互斥

1)互斥和事件都是与消息块或者其他数据接口相关的。

2)互斥定义了访问数据结构对象的关键代码段。

3)事件用来通知有了新的消息。

4)归纳的得出,互斥确保对象的不变性(或者安全属性),而事件则告知对象的状态发生改变(比如消息被添加或者从消息缓存中删除),也可能编程一种已知的状态(比如在消息缓存中至少有一个信息)。

5)一个线程锁定数据结构,并通过创建新的消息改变对象状态,并设置或发送(pulse)与该新消息相关的事件。

6)至少有一个其他线程等待对象到达所需状态的事件,等待必须发生在关键代码段之外,这样生产者线程就可以访问对象了。

7)消费者线程也可以锁定互斥,测试对象状态,并且在对象已经处于所需状态的情况下避免事件等待。

10.1.2条件变量模型

现在这一切合并到单个代码段中就产生了所谓的条件变量模型(CV模型),他有两类,分别是信号和广播CV模型。

11.3命名管道

命名管道包含如下特征:

1)命名管道是面向消息的,所以读取的进程可以读取由写进程发送的不同长度的信息。2)命名管道是双向的,所以两个进程可以通过同一个管道交互信息。

3)多个独立的管道实例使用一个名称来命名。

4)管道名称可由网络上的系统来访问。无论两个处理器是在同一个机器还是不同机器上,命名管道通信都是一样的。

5)几个简便的连接函数化简了命名管道请求/响应交互和客户端服务器连接。

12.4对比命名管道和套接字

两者是非常相似的,但区别如下:

1)命名管道可以使面向消息的,这可以简化程序设计。

2)命名管道使用ReadFile和WriteFile,而套接字也可以使用send和recv。

3)套接字不像命名管道那样灵活,所以用户可以选择和套接字一起使用协议,,比如TCP

或者UDP。用户也可以根据服务质量和其他因素来选择协议。

4)套接字是基于业界标准的,允许和非windows系统进行互操作。

12.4.1对比命名管道和套接字服务器

当使用套接字时,重复调用accept以连接多个客户端。每次调用反悔不同的连接套接字。注意以下和命名管道相关的区别

1)命名管道需要使用CreateNamedPipe来创建每个命名管道实例和HANDLE,而套接字实例是通过accept来创建。

2)套接字客户端数量没有上限(listen只限制了排队客户端的数量),但是命名管道实例数量却没有限制,由对CreateNamedPipe的第一次调用决定。

3)没有跟TransactNamedPipe相对应的套接字便捷函数。

4)命名管道没有明确的端口号,而是通过名称来区别的。

命名管道服务器需要两个函数(CreateNamedPipe和ConnectNamedPipe)来获取可用的HANDLE,而套接字服务器需要四个函数调用(socket,bind,listen,accept)。

12.12数据报

数据报同邮槽相似,并用于相似的环境中。在发送者和接收者之间没有连接,而且可以有多个接收者。到接收者的数据发送无论是邮槽和数据报都不能确保,而且后续的消息也不必按照他们发送的顺序被接收。

使用数据报的第一步是使用socket函数创建套接字时在type字段中指定SOCK_DGRAM。下一步是使用sendto和recvfrom,他们包含与send和recv相同的参数,但是增加了两个参数;来指明伙伴工作站,这样,sendto函数语法如下:

int sendto(SOCKET s,

LPSTR lpBuffer,

int nBufferLen,

int nFlags,

LPSOCKADDR lpAddr,

int nAddrLen);

lpAddr指向一个地址结构,用来指定特定系统的名称和端口,你也可以把数据报广播到特定系统。

13.1编写windows服务概览

把一个控制台程序比如serverNP或者serverSK转换为一个windows服务,需要三个主要的步骤来将程序置于SCM控制下。

1)创建一个新的main()入口点以在SCM中竹醋服务,提供逻辑服务入口点和名称。

2)转换旧的main()入口点函数为ServerMain(),它注册服务控制处理器并向SCM通知其状态,剩下的代码基本上是现有程序,尽管事件日志命令可以增加。名称ServerMain(),是逻辑服务名称的占位符,并有一个或多个逻辑服务。

3)编写服务控制处理器函数以响应SCM命令。

14.1windows异步I/O概览

有三个技术可以实现windows异步I/O。

1)多线程I/O。某个进程或者某些进程中的每个线程执行通常的同步I/O,但是其他线程可以继续执行。

2)重叠I/O。线程在发生一个读、写或者其他I/O操作指令后继续执行。当线程在继续之前需要I/O结果时,他等待句柄或者指定事件。

3)完成例程(或者扩展I/O)。系统在I/O操作完成时在线程内调用专门的完成例程。Windows 不支持磁盘文件的扩展I/O。

15.2安全概览:安全符描述

安全符描述使用函数InitializeSecurityDescriptor来初始化,而且包括如下内容:

1)属主安全标志(SID)(它处理对象属主)。

2)组SID。

3)任意访问控制列表(DACL)——明确授予或拒绝访问权限的条目列表。没有前缀“D”的术语,“ACL”在讨论中就是DACL。

4)系统ACL(SACL),有时被称为审计访问ACL。

15.2.1访问控制列表

每个ACL是一套访问控制条目(ACE)。有两类ACE:访问允许和访问拒绝。

首先使用InitializeAcl来初始化一个ACL,然后添加ACE。每个ACE包含一个SID和一个访问掩码,它指定授予或者拒绝由SID指定的用户或者组的权限。FILE_GENERIC_READ 和DELETE式文件的典型访问权限。

两个用来向任何ACL添加ACE的函数是AddAccessAllowedAce和AddAccessDeniedAdd。AddAuditAccessAce可以添加SACL,引发对指定SID的访问的审计。

最后,使用DeleteAce来删除ACE,而使用GetAce来检索ACE。

Windows应用程序设计大纲

Windows应用程序设计 学时:总学时54;理论36;实验18 学分:3 适用对象:信息管理与信息系统、计算机科学与技术、软件工程专业 先修课程:《C++程序设计》 考核方式:本课程采用期末考核与平时成绩相结合的方式进行成绩评定,平时成绩占40%,期末考核成绩占60%。平时成绩包括作业、实验报告与上课表现,期末考核为闭卷笔试方式。 一、课程的性质与任务 《Windows应用程序设计》是为计算机科学与信息工程系各专业开设的一门专业基础课。该课程以面向对象程序开发理论为基础,具有较强的理论性、实践性和实用性。该课程的主要任务是讲授利用MFC进行Windows应用程序设计的基本原理和方法,并向学生灌输框架编程的核心思想,从而为今后开发实用性较强的软件系统打下坚实基础。 二、教学目的与基本要求 本课程的目的是使学生深刻理解框架编程的思想,学会MFC的常用类的用法,并能够开发出一般功能的Windows应用程序,进一步提高学生实际编程和用程序解决问题的能力。 教学中要求学生掌握Windows应用程序的基础概念、术语;理解Windows应用程序框架的封装原理;深刻理解VC提供的“文档/视图”结构框架;掌握MFC类库提供的常用类在窗口中绘制图形;熟练掌握鼠标、键盘消息处理的方法;熟练掌握资源的使用方法;掌握MFC的文件处理机制;熟练掌握对话框及控件的编程方法;了解应用程序中进程与线程的管理方法;学会用MFC设计数据库应用程序。 理论教学部分 理论课学时:36 使用教材及主要参考书: 1、使用教材: 任哲等编著,《MFC Windows应用程序设计》,清华大学出版社,2004年 2、主要参考书: 候俊杰,《深入浅出MFC》第二版,华中科技大学出版社,2001年 陈志泊等编著,《Visual C++ 6.0程序设计》,中国铁道出版社,2005年 一、学时分配 章节课程内容学时 1 Windows应用程序基础知识 2 2 Windows应用程序的类封装 2 3 MFC应用程序框架 2

Windows程序设计题

《Windows程序设计》模拟题 一.单项选择题 1. 在VC++中,项目文件的扩展名是(B)。 A)exe B)dsp C)dsw D)cpp 2. 在MFC中,利用ClassWizard不能(D)。 A)建立新类B)进行消息映射 C)增加类的成员变量D)插入资源 3. 当滑块滑动时,滑块条控件将发送滚动消息来通知父窗口,垂直滑动条发送(C)消息。 A)WM_CHAR B)WM_HSCROLL C)WM_VSCROLL D)WM_CHANGE 4. 更新菜单状态的消息是( C )。 A)WM_COMMAND B)UPDATE C)UPDATE_COMMAND_UI D)INVALIDATE 5. 对于消息队列描述正确的是( D ) A)在Windows中只有一个消息系统,即系统消息队列。消息队列是一个系统定义的数据结构,用于临时存储消息。 B)系统可从消息队列将信息直接发给窗口。另外,每个正在Windows下运行的应用程序都有自己的消息队列。 C)系统消息队列中的每个消息最终都要被USER模块传送到应用程序的消息队列中去。 应用程序的消息对列中存储了程序的所有窗口的全部消息。 D)以上都正确 6. 在MFC中,所有的控件都是(B)类的派生类,都可以作为一个特殊的窗口来处理。 A)CView B)CWnd C)CWindow D)CDialog 7. 使用GetDC()获取的设备上下文在退出时,必须调用(A)释放设备上下文。 A)ReleaseDC() B)delete() C)DeleteDC() D)Detach() 8. 希望菜单无效,应该用CCmdUI类的(A)成员函数。 A)Enable B)SetRadio C)SetCheck D)SetText 9. 希望菜单前出现一个“√”,应该用CCmdUI类的(C)成员函数。 A)Enable B)SetRadio C)SetCheck D)SetText 10. 下面(A)不是MFC设备环境类CDC类的派生类。 A)GDI B)CPaintDC C)CClientDC D)CWindowDC 11. 在MFC中,所有的文档类都派生于(C),所有的视图类都派生于(A)。 A)CView B)CWindow C)CDocument D)CFormView 12. 采用C++进行绘图时,(B)用于指定图形的填充样式,(A)用于指定图形的边框样式。

MFC Windows应用程序设计复习题2

第9章MFC的文件处理机制 1) 文档负责将数据存储到磁盘中,存取过程称为(D) 。 A. 文件访问 B. 格式化 C. 文件读写 D. 串行化 2) 一个CArchive 类对象必须与一个( C ) 对象相关联。 A. CObject B. CFileDialog C. CFile类 D. CDocument 3) 不能将Newfile 文件的文件指针定位在文件头的方法是( B ) 。 A. Newfile.Open("MyFile.txt", CFile::modeCreate) B. NewFile::Seek( 0L, CFile::end) C. Newfile.SeekT oBegin() D. Newfile.Seek(0L, CFile::begin) 4)( A )函数用于获取指定文件的文件名。 A. GetFileName() B. GetStatus() C. GetFilePath() D. GetFileTitle() 5) 当应用程序读取或写入文件时,文档对象的( )函数被调用,并将( )对象作为参数传递。 6) ( CArchive )类是一个对象数组类,它可以存放任何从CObject 派生出的对象,还可以根据元素的数量动态地调整自己的大小。 7) 在Visual C++中,数据文件的操作通常按照( 打开) 、( 操作) 、( 关闭) 的步骤进行。 8) 写出以读写方式打开文件student.txt 的语句序列( File.Open(“student.txt”,CFile:modeReadWrite); ) 。 10)什么是序列化? 答:序列化是面向对象程序设计中应对象这种数据的存储和恢复的要求而产生的一种文件读写机制。 第11章对话框 1. 在对话框的编辑器中,最左边的按键的作用是(B )。 A. 激活对话框编辑功能 B. 测试对话框 C. 控件左对齐 D. 控件垂直居中

MFC Windows应用程序设计复习题

MFC Windows应用程序设计 【复习】 第1章Windows应用程序基础知识 1. Windows 程序设计是一种( C ) 的程序设计模式。 A:结构化B:面向对象C:事件驱动方式D:XP 2. 用户从所有可能的操作中任意选择,被选择的操作会产生某些特定的( ) ,这些事件发生后的结果是向程序中的某些对象发出( ),然后这些对象调用相应的( C )来完成特定的操作。 A:消息,事件,程序B:消息,命令,消息处理函数 C:事件,消息,消息处理函数D:事件,消息,程序 3. 消息的组成(C) A:消息名称(UINT) B:消息名称(UINT)和参数(PARAM) C:消息名称(UINT)和两个参数(WPARAM,LPARAM) D:消息名称(UINT)和两个参数(HPARAM,LPARAM) 4. 程序在( B) 对消息进行分析 A:入口函数(WINMAIN)中 B:在窗口过程函数(WNDPROC)中 C:收到消息时 D:消息发生时 5. 一个消息( B ) A:可以不被窗口接受 B:必须由一个窗口接收 C:可以由一个或多个窗口接收 D:必须由多个窗口接收 6. 当没有为某消息编写消息处理时( C ) A:不进行处理 B:程序出错 C:默认的窗口过程进行处理 D:无法发出此消息 7. 应用程序接收到( A )消息时停止接收其他消息

A:WM_QUIT B:WM_DESTORY C:WM_PAINT D:WM_COMMAND 8. 下列Windows数据格式中,代表设备句柄的是(B)。 A. HWND B. HDC C. HINSTANCE D. HFONT 9. 典型的Windows窗口程序的流程为:(A) A. 注册窗口类->创建窗口->显示窗口->更新窗口->消息循环 B. 创建窗口->注册窗口类->显示窗口->更新窗口->消息循环 C. 创建窗口->注册窗口类->显示窗口->更新窗口->消息循环 D. 注册窗口类->创建窗口->更新窗口->显示窗口->消息循环 10. 在WinMain函数的原型中HINSTANCE hInstance 定义的是(A)HINSTANCE hPrevInstance定义的是(B)LPSTR lpCmdLine定义的是(C)int nCmdshow)定义的是(D) A:当前实例句柄B:先前实例句柄 C:指向命令行参数的指针D:窗口的显示状态 11. 以下哪个不是WinMain函数中完成的操作(D) A:注册窗口类B:创建应用程序主窗口 C:进入应用程序消息循环D:调用窗口过程函数 12. 下面说法错误的是(D) A:一个Windows程序可以包含多个窗口过程 B:一个窗口过程总是与调用RegisterClass注册的特定窗口类相关联 C:CreateWindow函数根据特定窗口类创建一个窗口,但基于一个窗口类,可以创建多个窗口 D:窗口过程必须由程序调用,而不是由Windows本身直接调用 13. Windows应用程序中使用了各种Windows API函数声明,宏定义,数据类型定义,(D)是主要的包含文件。 A STDIO.H B WINDEF.H C WINUSER.H D WINDOWS.H 14. 注册窗口类型时,窗口风格各个选项可以用(B)运算符联合表示。 A AND(&) B OR(|) C 逻辑与(&&) D 逻辑或(||) 15. 在函数CreateWindow()调用返回之后,Window内部(B) A:已经创建了这个窗口,但还未分配内存 B:已经创建并分配了内存 C:还未真正创建窗口,等待分配内存 D:还未真正创建窗口,但已经分配内存

实验五Windows应用程序设计

大理学院课程教案 (实验教学) 课程名称: C#面向对象程序设计 课程类型:( 1 )1、必修;2、选修;3、其它 授课对象:计算机科学与技术专业(本、专科) 2013 级1、2班 授课时间: 2014 至 2015 学年第 3 学期 计划学时: 36 学时(其中:理论 36 ,实验: 36 ) 任课教师:杜英国 所属学院:数学与计算机学院 课程管理部门(教研室):软件教研室 大理学院教务处制

课程名称:C#面向对象程序设计 教材:C#程序设计实用教程黄兴荣李昌领李继良编著清华大学出版社 授课人1:杜英国专业技术职务:讲师 学历:研究生学位:硕士 授课人2:专业技术职务: 学历:学位: 实验题目:Windows应用程序设计计划学时:3 实验类型:(4 )1、演示性2、验证性3、综合性4、设计性每组实验的学生人数:1 人 教学目的和要求: 熟悉C#集成开发环境;了解各功能的菜单命令;显示所有的可见窗口和所有工具栏(箱),随后再将上述的窗口和工具栏(箱)进行隐藏;了解工具栏(箱)中有哪些主要控件;了解控件的属性及事件;掌握控制台应用程序的输入输出方法的使用。 实验方法(包括实验中需要注意的问题等): 1.在VS下,创建一个窗体应用程序。 2.在解决方案资源管理其中创建子窗体。 3.在窗体上搭建相关控件。 4.编写代码。 5.注意个窗体之间的数据回传。 实验重点(主要解决的问题和达到的目的):

1.窗体、控件的使用。 2.理解窗体间数据回传。 3.掌握分级信息的处理。 实验难点(预计实验过程中会遇到的问题和解决方案): 1.窗体间数据回传。 2.分级信息的处理。 教学方法(实验前的教学和实验过程中的指导方法): 实验前教师先讲解完9章内容,学生认真复习9章内容;在实验过程中结合实验环境教师可先提示性讲解实验内容,再由学生自己完成实验。如果实验完成情况较差,教师统一辅导。 实验仪器和材料: 计算机,Windows XP, VS2008 实验报告要求和思考题: 教师现场检查评价本次实验。 参考资料: 《C#程序设计项目教程—实验指导与课程设计》黄兴荣编著清华大学出版社

实验一 Windows应用程序设计(实验讲义)

实验一Windows简单程序设计 1、[实验目的] 了解在VC中Windows SDK应用程序的开发,熟悉Win32 Application和Win32 Console Application的程序结构 2、[实验内容] ①编写程序,要求程序能实现对字符串的处理; ②编写一个Win32 Application类型的Windows窗口程序。 3、[实验仪器设备] 操作系统:Windows2000/XP 编程软件:VC++ 4、实验步骤 (1)Win32 Console程序开发 ①运行Microsoft Visual C++ ②创建工程: 选择菜单“File”->“New”,在打开的对话框中,切换到“Projects”标签下,并选择“Win32 Console Application”作为工程类型,分别在Project name和Location文本框中输入工程的名字和位置(可自行定义),单击“OK”完成工程的创建。 ③编写代码实现:输入一串,比较字符串是否为“exit”,是则退出程序,否则输出串长度。循环输入第二个串,重复上述处理。(请给出程序代码) ④形成目标程序 单击菜单栏的“组建(B)”菜单下的“编译”命令,进行编译。在“输出”窗口的“组建”标签页下查看是否存在编译错误,若有,则进行调试。 ⑤运行程序 单击菜单栏的“组建(B)”菜单下的“执行”命令,生成.exe文件。必要时,可在过程中设置断点,以便核查相应指令的运行结果。 (2)Win32 Application窗口应用程序开发 ①程序结构: ●注册窗口类 ●创建窗口 ●显示和更新窗口

●创建消息循环 ●处理消息 ②创建工程: 同上,注意这里要选择“Win32 Application”作为工程类型 ③编写源程序: 程序可参考书上P9~P11,书上源程序存在部分错误,修正如下: ●添加两个头文件: #include #include ●在WinMain函数的实现程序前添加一段代码用于声明过程函数: long FAR PASCAL MainWndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam); ● ●在WinMain函数的实现程序中的变量定义部分增加一个变量申明: HWND ghWndMain; ● ●书上第14行wc.hbrBackground=GetStockObject(WHITE_BRUSH)修改为 wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH) ●在注释“显示窗口”下面增加一行,添加一句更新窗口的代码: UpdateWindow(ghWndMain); ●在MainWndProc函数的实现程序中将窗口显示消息处理部分的代码(这 部分有3行代码)修改如下: case WM_PAINT: //窗口显示消息处理 HDC hDC; PAINTSTRUCT ps; hDC=BeginPaint(hWnd,&ps); TextOut(hDC,0,0,"这是我的第一个windows程序",strlen("这是我的第一个windows程序")); EndPaint(hWnd,&ps); break; ④形成目标程序

基于C++的简单Windows画图程序设计

学校代码 10126 学号 00861003 本科学年论文 题目基于C++的简单Windows画图程序设计 院系内蒙古大学鄂尔多斯学院 专业名称自动化 年级 2008 级 学生姓名宋杰 指导教师金涛 2011年06月20日

学年论文指导教师评阅意见 2

内蒙古大学鄂尔多斯学院2008级自动化专业学年论文 基于C++的简单Windows画图程序设计 摘要 本文简要介绍了基于C++的简单画图程序的实验设计过程。该设计以C++这一高级语言为基础,依托VC++开发环境中的MFC类设计而成,可实现最基本的绘图以及图形的保存与修改等功能。程序开发过程中采用了面向对象技术,易于扩充和维护。通过本次设计对面向对象技术及MFC有更深刻的了解,为今后图形系统的开发及可视化程序的设计提供了一个良好的实践基础。 关键词:VC++,MFC,对象,画图 I

基于C++的简单Windows画图程序设计 00861003 Simple Windows Drawing Program Based On C++ ABSTRACT This article briefly describes the design process for a simple drawing program based on C++.The design based on the C++ language, a high-level language, relying on MFC classes in the VC++ development environment designed, can provide the most basic features such as saving and modifying of the drawing, and graphics.The program using object-oriented technology in the development process, is easy to expand and maintain. Through this design to a more profound understanding of object-oriented technology and MFC for future development and Visual program design of graphic system provides a good basis for practice. KEYWORDS: VC++, MFC, object, drawing II

相关主题
相关文档 最新文档