Windows下的硬件中断处理

Windows下的硬件中断处理
Windows下的硬件中断处理

文章编号:1006-1576(2006)01-0083-02

Windows下的硬件中断处理

李永军1,胡昌林1,赵广宁2

(1. 军械工程学院导弹工程系,河北石家庄 050003,2. 271834部队 73分部,河北石家庄 050003)

摘要:Windows下的硬件中断首先从Vhard-wareInt类中派生出一个类,定义构造函数并重载各个信号处理程序。调用类VhardwareInt的构造函数,指定IRQ。再在VxD初始化时,用new动态创建其派生类对象实例,对重载的中断通知处理程序编程。最后调用钩挂函数(hook)中断处理程序。成功钩挂后,还可调用Physical Unmark成员函数,确保允许中断处理。

关键词:硬件中断;中断处理;构造函数;派生类

中图分类号:TP311.11 文献标识码:A

Hardware Interrupt Process in Windows

LI Yong-jun, HU Chang-lin, ZHAO Guang-ning

(1. Dept. of Missile Engineering, Ordnance Engineering College, Shijiazhuang 050003, China;

2. No.73 Department, No. 271834 Army of PLA, Shijiazhuang 050003, China)

Abstract: At first, a species was derived from Vhard-wareInt for the hardware interrupt process in Windows, structure function was defined and each signal processing program was reloaded. The structure function of VhardwareInt-like was called to designate IRQ. Then, the object example of derived species was created by using new dynamic condition. The interrupt process program of reloading interrupt notice was compiled, at last, the hook function was called to interrupt program. After hooking, the Physical Unmark member function was called to make sure the interrupt process.

Keywords: Hardware interrupt; Interrupt process; Structure function; Derived species

1 引言

硬件中断处理是在开发设备驱动程序过程中经常遇到的问题,而Windows虚拟环境下中断的响应过程更让人感到迷惑。Windows将硬件中断转化为能够触发执行的驻留在不同虚拟机中的ISR(中断服务程序)事件,即是一个较好的中断处理方法。

2 Windows下的中断响应过程

Windows下,处理器在不同的状态(V86、实模式和保护模式)下运行。当DOS运行时,处理器运行V86模式。当Windows执行时或当DOS VM 已经切换进保护模式时,处理器运行Ring3保护模式。当VMM(虚拟机管理器)或VXD(虚拟设备驱动程序)执行时,处理器运行在Ring0保护模式。

在Windows环境中,Windows将所有的IDT 入口指向VMM中的一个函数。VMM会判断出来自IDT入口项的调用是作为异常被调用还是作为中断被调用。VMM本身负责处理异常而将所有硬件中断交给一个名为VPICD(虚拟可编程中断控制器设备)的VXD。如果某个VXD已经为某个硬件中断注册了中断处理函数,那么VPICD就将中断传递给该VXD。如果没有,VPICD将把某个中断传递给某个VM,这一过程被称作“中断反射”。

VXD通过调用VPICD的VPICD_Viutualize_ IRQL服务函数为特定的硬件中断注册并将回调函数传递给VPICD。一旦VXD已经为中断注册,它将作为一个真正的中断处理器,为中断设备进行中断服务,同时VXD可能使用另一个VPICD服务函数VPICD_Set_Int_Request来把中断映射到VM,让VM的中断处理函数来提供服务。中断过程如图1。

图1 从IDT到VXD中断处理函数的途径

3 用户使用中断服务要注意的问题

(1) 中断响应时间

为了实现实时操作,一般要求中断响应时间尽可能的短。由于硬件中断的响应过程比较复杂,中断响应时间通常在1ms以上。为了使中断响应时间最短,硬件中断的处理应在VXD中进行。但即使在VXD中进行,VXD也不能保证对硬件中断的实时响应。原因在于ring转换以及VMM和VPICD 之间存在多个层次的联系。

(2) EOI(中断结束)处理

收稿日期:2005-07-16;修回日期:2005-09-07

作者简介:李永军(1972-),男,河北人,1994年毕业于西北工业大学,2003年获军械工程学院硕士,从事自动测试与故障诊断研究。

·83·

在编写中断处理函数时,常见的错误是忘记EOI,导致一个硬件中断仅被调用一次。虽然设备本身能产生更多的中断,但是PIC(可编程中断控制器)不让这些中断到达处理器,并会一直持续到PIC接受到EOI为止。

Windows使用与DOS不同的中断控制器的EOI 机制。VPICD是被中断通知的第一个VXD,然后VPICD立即发送“特定EOI”到控制器。然后VPICD屏蔽控制器上的中断级别。这两个操作使得其他的中断级别可以被识别,包括那些比正在中断的级别低的优先权。当VXD在退出中断处理函数前调用VPICD_Phys_EOI服务函数时,VPICD将清除相同级别上的中断的屏蔽。

(3) 内存管理

处理硬件中断的驱动程序对所有分配的内存有严格的要求。所有在中断期间要访问的代码和数据都必须是固定的、页码锁定的和不可废弃的。这包括中断处理函数本身的代码以及在中断处理过程中要用到的驱动程序代码段、任何动态分配的缓冲区和应用程序分配的要传递给驱动程序的缓冲区。

内存要求必须是固定的。因为内存管理器把中断处理函数要用到的数据段移动了,在一些字节被拷贝后,硬件中断发生,这时硬件中断处理函数被执行。硬件中断处理函数会更新正在移动的数据段中的一些内容,当处理函数结束运行之后,内存管理器接着移动数据段,而这时的数据段已经被处理函数更改过了。内存管理器并不知道处理函数已经改变了数据。而使用该数据段的应用程序就得不到希望得到的数据。

同时内存又要求必须是页面锁定的。假设硬件中断发生了,而内存管理器是在可废弃的代码中,那么就会发生段不在内存中的警告,在此种情况下就有可能发生重入DOS的情况,而DOS代码是不可重入的,所以代码段是不可废弃的。

4 中断处理程序的具体实现

开发虚拟设备驱动程序(VxD)的常规方法是使用设备驱动程序开发工具包DDK(Device Developer Kit)。IRQ虚拟化的VxD开发是基于VTOOLSD提供的VhardwareInt类,具体编程思想是:首先从Vhard-wareInt类中派生出一个类,在派生类中定义构造函数,并重载各个信号处理程序:OnHardwareInt是必须重载的,而其他的信号处理程序,如OnVirtualInt、OnVirtualEOI、OnVirtualRET和OnVirtualMask,可根据需要重载。在派生类构造函数里调用类VhardwareInt的构造函数,并指定IRQ。接着,在VxD的初始化时,如在Vdevice::OnDeviceInt函数里用new动态创建一个派生类对象实例;对重载的中断通知处理程序编程;最后调用钩挂函数(hook)钩挂中断处理程序。在成功钩挂后,还可调用PhysicalUnmark成员函数,确保允许中断处理。

运用WinDriver很容易完成中断处理、访问I/O 端口、物理内存分配、执行DMA操作等工作。它的优点在于开发人员用熟悉的C/C++ 或Delphi语言来编写设备驱动程序,避免了复杂的、难于调试的内核模式代码,这样不但会节省时间,而且会避免犯许多错误。另一方面调试非常方便、配置修改容易。WinDriver提供了一个可视化的代码生成器WinDriverWizard,一个WinDriver发行包。首先从运行WinDriverWizard开始,用它提供的界面生成板卡的配置文件,设置I/O地址信息、板卡的中断号、物理内存地址信息等。WinDriverWizard可以让用户立即接触到硬件。这种便利来自于它的自动检测功能。它会自动地读写设置的I/O地址、内存、侦听中断。在此之后,通过选择“产生代码”(GenerateCode)选项,WinDriverWizard会产生基本的程序代码,接下来需要把生成的代码文件:WinDrvr和CardLib文件链入应用程序中或者封装成动态链接库。WinDriver提供了许多函数供用户使用。与中断处理和I/O读写有关的函数有:

WD-Open() ;打开、初始化板卡

WD-Close() ;关闭板卡

WD-CardRegister() ;板卡注册和资源分配

WD-CardUnRegister() ;板卡的删除和资源释放。

WD-IntEnable() ;开中断。

WD-IntDisable() ;关中断。

WD-IntWait() ;截获中断信号。

5 结束语

在WIN32下,中断接入和I/O访问是一个比较复杂的问题。这里的中断响应过程是Windows 环境下一般的中断处理方法,不同的Windows操作系统版本下会有一些区别。而具体实现方法可使用VTOOLSD和WinDriver。

参考文献:

[1] KAREN HAZZAH. Windows VxD与设备驱动程序权威

指南[M]. 孙喜明, 译. 北京: 中国电力出版社, 2001. [2] 杨强, 李堂秋. Win9X虚拟设备驱动程序编程指南[M].

北京: 清华大学出版社, 1999.

[3] 郑纬民, 汤志忠. 计算机系统结构[M]. 北京: 清华大学

出版社, 1998.

·84·

windows程序设计之扫雷游戏经典之作

WIN32模拟WINDOWS XP扫雷 程序 课程设计目的与要求: 本课程设计是计算机科学与技术专业重要的实践性环节之一,是对本程学习后进行的一次全面而综合的练习。本次课程设计的目的与任务主要有: 1.巩固和加深学生对C和C++语言的基本知识的理解与掌握。 2.掌握C和C++语言编程和调试的基本技能 3.运用C和C++语言对程序的简单设计 4.掌握程序设计说明文档的能力与技巧 5.提高与运用C和C++语言解决能实际问题的能力 一、题目描述: 自行分析Windows XP系统自带扫雷游戏,查找规则并对主要功能进行模仿程序实现,对于实现过程中出现的bug进 行调试解决。 二、使用语言: C和C++ 语言 选用C++语言的原因,简而言之主要是因为C++的设计目标,就是要让C++既具有适合于系统程序设计的C语言所具 有的可适应性和高效性,又能在其程序组织结构方面具有像其 他的语言所支持的程序优势。这即是说,C++所提供的抽象机 制能够被应用于那些对效率和可适应性具有极高要求的程序设 计任务之中。

三、编译以及运行环境: 编译环境:Microsoft Visual C++ 6.0 运行环境:Windows XP或其他兼容兼容系统 四、题目分析: 经过对游戏的初步分析,扫雷游戏含有如下规则: 根据输入的信息,执行相应的挖雷,插旗,疑问标记,自动蔓延开挖等。挖雷过程由计时器计时,由一个计数器统计插旗后雷的剩余个数。如果选择了标记功能,那么单机右键会依次对未知点进行插旗,标记,取消插旗与标记。如果点滴到插旗的如果点击到了未插旗子的雷区,如果是雷,则判定游戏失败,之后对雷区的点击进行屏蔽,不予响应。如果是疑问标记则像正常区域对待。如何判断胜利,如果所有的雷都被插旗或者点击后剩余的雷区, 五、程序运行流程简介以及流程图: 点击程序按默认参数进行初始化,输入,表情对鼠标左右键点击进行变化响应,对于雷区内点击进行规律响应,对雷区点击后果进行统计,判断失败与成功,失败或者成功之后,对于雷区内的输入也就是点击进行屏蔽,对菜单游戏级别、重新开始游戏按钮响应。级别选择,重新游戏时时间归零、雷数显示刷新。如此重复规则,直到点击退出。 程序简要流程图:

windows程序设计学习笔记(一)

Windows程序设计学习笔记 2015年10月4日 一、宽字符wide-character 1、wchar_t: char的双字节(Unicode) 定义:typedef unsigned short wchar_t 示例:wchar_t c=’A’; wchar_t *pw=L”hello!”; //L(代表long)告诉编译器按宽字符保存,即每个字符占两个字节 wchar_t a[]=L”hello!”; 2、宽字符库函数 wcslen( ):计算宽字串符的长度 如:wchar_t *pw=L”hello!”; iLength=wcslen(pw); //字符串长度是6 二、windows头文件类型 1、CHAR和WCHAR typedef char CHAR; //8位 typedef wchar_t WCHAR; //16位变量前面可加wc以说明是一个宽字符 2、字符串指针 (1)8位字符串指针 tpyedef CHAR *PCHAR, *LPCH, *PCH, *NPSTR, *LPSTR, *PSTR; tpyedef CONST CHAR *LPCCH, *PCCH, *LPCSTR, *PCSTR; 前缀N和L表示“near”和“long”,指的是16位windows中两种大小不同的指针,在Win32中near和long指针没有区别 (2)16位字符串指针 tpyedef WCHAR *PWCHAR, *LPWCH, *PWCH, *NWPSTR, *LPWSTR, *PWSTR; tpyedef CONST WCHAR *LPCWCH, *PCWCH, *LPCWSTR, *PCWSTR; 3、WINAPI 定义:#define WINPAI _stdcall 该语句指定了一个调用约定,包括如何生成机器代码以在堆栈中放置函数调用的参数三、Hello程序 /*------------------------------------- HELLO.C--windows下显示Hello,world! 作者:lw 时间:2015年国庆 -------------------------------------*/ #include LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT("HelloWin"); HWND hwnd; MSG msg; WNDCLASS wndclass; wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndProc;

Windows内存管理机制

Windows内存管理机制 在编程中,很多Windows或C++的内存函数不知道有什么区别,更别谈有效使用;根本的原因是,没有清楚的理解操作系统的内存管理机制,本文企图通过简单的总结描述,结合实例来阐明这个机制。 本文目的: 对Windows内存管理机制了解清楚,有效的利用C++内存函数管理和使用内存。 本文内容: 本文一共有六节,由于篇幅较多,故按节发表。其他章节请看本人博客的Windows内存管理及C++内存分配实例(一)(二)(三)(四)和(五)。 1. 进程地址空间 2.内存状态查询函数 3.内存管理机制--虚拟内存 (VM) 4.内存管理机制--内存映射文件 (Map) 5.内存管理机制--堆 (Heap) 使用场合 操作系统为每个线程都建立一个默认堆栈,大小为1M。这个堆栈是供函数调用时使用,线程内函数里的各种静态变量都是从这个默认堆栈里分配的。

堆栈结构 默认1M的线程堆栈空间的结构举例如下,其中,基地址为0x0004 0000,刚开始时,CPU的堆栈指针寄存器保存的是栈顶的第一个页面地址 0x0013 F000。第二页面为保护页面。这两页是已经分配物理存储器的可用页面。 随着函数的调用,系统将需要更多的页面,假设需要另外5页,则给这5页提交内存,删除原来页面的保护页面属性,最后一页赋予保护页面属性。 当分配倒数第二页0x0004 1000时,系统不再将保护属性赋予它,相反,它会产生堆栈溢出异常STATUS_STACK_OVERFLOW,如果程序没有处理它,则线程将退出。最后一页始终处于保留状态,也就是说可用堆栈数是没有1M的,之所以不用,是防止线程破坏栈底下面的内存(通过违规访问异常达到目的)。

windows程序设计

消息驱动运行中发生的各种事件(鼠标键盘输入,各种状态的改变等),以消息的形式通知Windows系统Windows系统接收消息,提交给发生事件的应用程序应用程序的窗口处理函数负责处理响应收到的消息处理完成后继续等待下一个消息API application programming Interface SDK software Development kit 事件是用户对计算机操作的动作或程序中某个对象的状态发生的变化,每个事件对应一个消息,即每个事件发生的效果是产生消息消息是描述事件发生的信息事件驱动程序执行的顺序不是事先规定的,而是由事件的发生来控制在程序执行过程中,当某个对象的状态发生变化,或有外部输入等情况发生,则产生相应的事件当事件产生时,系统会发出特定的消息编写程序时可以对这些消息做出反应,也可以不做出;若要做出反应(即响应消息),则把响应此消息的程序写在与此消息相关联的函数中在程序执行时,一旦产生了一个消息,会调用与此消息相关联的函数窗口是Windows应用程序基本的操作单位,是应用程序与用户之间交互的接口,也是系统管理应用程序的基本单位消息传输事件发生,产生消息消息保存到消息队列分配给应用程序消息队列消息循环提取消息窗口函数响应消息MFC Microsoft foundation class MFC应用程序框架提供了一般应用程序需要的全部面向对象软件组件的集成集合MFC程序结构基于框架窗口的应用程序(早期的MFC)程序运行管理、窗口及数据管理分开两部分,与SDK程序类似基于文档/视图的应用程序单文档应用程序(重点)程序运行管理、窗口管理、交互管理、数据管理分开基于对话框的应用程序程序运行管理、对话框管理分开目前的MFC应用程序都采用文档/视图结构,把原来窗口框架类的工作分开窗口框架类管理窗框视图类(即视窗类)管理数据显示、接收用户输入文档类负责数据管理文档视图架构的思想数据嵌入文档中,利用文档的架构管理文档与视图通信,使数据在视图中显示视图显示数据,并与用户交互视图放入窗口中文档模板类对象管理上述对象协调工作CDocument是负责管理数据的类应用程序中的文档类是这个类的派生类作用数据管理程序员应将用户的实际数据对象内嵌在自己的文档类中需要与自己的视图类通信在程序中实现CDocument的派生类,以便嵌入数据对象,并改写成员函数实现对数据的处理用于派生应用程序的视图类CView 作用处理与用户的交互显示文档类中的数据接收用户输入(例如鼠标操作)通常要改写视图类的成员函数OnDraw或OnPrint,实现数据显示框架自动调用OnDraw函数WM_PAINT消息OnPaint()OnDraw() 菜单及响应利用菜单编辑器修改IDR_MAINFRAME 菜单资源在相应的类中为新菜单项映射消息COMMAND单击或用快捷键选中时生产UPDATE_COMMAND_UI上一级菜单显示前生产用于控制菜单状态编写新菜单项的消息处理函数快捷键在菜单项标题后面加“(&字母)”菜单动态为要添加的菜单项定义一个宏(例如ID_MENU1)用CWnd::GetMenu( )获得指向菜单条的指针(如果在子菜单上添加,应用CMenu::GetSubMenu()获得该菜单的指针)为菜单项手工映射消息处理函数在适当的地方调用InsertMenu或AppendMenu添加菜单项调用CWnd::DrawMenuBar()函数重画菜单动态删除菜单项与上面类似(使用DeleteMenu函数)动态创建菜单项用函数BOOL CreateMenu( );获得新菜单句柄,再用此句柄当作AppendMenu函数的第2个参数(需进行(UTIN)强制类型转换)通常用于创建弹出式菜单的顶级(不需映射消息)快捷菜单建立菜单如果菜单已经存在,且功能齐全,只需确定弹出方式即可也可以另加一个菜单资源,此法可使菜单条中不显示快捷菜单关联类(对于新加菜单)把此菜单资源关联到视图类上选中此菜单资源的情况下打开类向导,选视图类影射消息并编写消息处理函数选择弹出方式可在视图类的WM_CONTEXTMENU消息(鼠标右键单击客户区时产生)处理函数中弹出Windows系统有一个存放消息的队列每个应用程序也有一个消息队列Windows系统先将收到的消息存放在系统队列中,然后再分发到相应的应用程序队列中应用程序则从自身的队列中获取消息并进行处理类的消息响应一个类要响应多种消息对于每一种消息最重要的是知道是哪个消息:消息的标识(ID 身份证)这个消息对应的响应函数是什么(函数的起始地址)解决的办法建立一个结构体数组(消息映射表)一行(一个数组元素)是一个消息的信息每行至少包含消息的标识(ID)指向响应函数的指针消息的响应当收到消息后,根据消息ID在表中查找,找到后调用对应的消息处理函数消息路由当一个类收到消息后,先在自己的消息映射表中搜索,搜索到就执行相应的消息处理函数,然后结束消息处理过程未搜到,则到上一层基类中搜索,依此类推如果都未搜到,则交给系统默认的窗口处理函数去处理消息种类窗口消息命令消息控件通知消息实现消息映射消息映射的要点为每个要响应的消息建立一个处理函数为每个能够响应消息的类建立一个结构类型的数组(消息映射表)并填写这个数组编写每个消息处

Windows端口异常占用的处理

Windows端口异常占用的处理 【来源:小鸟云计算】 Ps.小鸟云,国内专业的云计算服务商 问题现象 服务器应用使用的端口被异常占用导致服务启动失败,例如:Windows上安装的Tomcat 无法启动,TCP 80端口已经被其它应用占用。 问题原因 应用程序需要使用的TCP/UDP端口被其它程序、或者病毒木马占用。 排查方法 使用netstat -ano命令可以找出占用端口的进程ID,而后使用tasklist /svc命令找出对应的进程。 如下给出一例安装Tomcat后,启动Tomcat提示端口被占用的处理过程。 1.使用netstat -ano |find ":80" 看到占用端口的进程ID是4,注:请根据实际情况修改端口 2.使用tasklist /svc| find "4" 看到是系统进程。注:请根据实际情况修改进程ID

3.尝试关闭了IIS ,iisreset /stop 4.但是发现80端口仍然被占用。于是使用curl -I 127.0.0.1 查看返回的server是Microsoft-HTTPAPI/2.0 而不是Server: Microsoft-IIS/7.5 能够使用Microsoft-HTTPAPI/2.0的只能是微软的产品。检查是否有安装SQL SERVER ,如果有尝试关闭SQL Server Reporting Service这个服务。 关闭后再使用curl -I 127.0.0.1 就提示80端口无法连接,说明端口已经被释放。 注意:如果没有安装curl还可以使用telnet 127.0.0.1 80 执行完,ctrl+c终止就会出现下面图片的样子,也可以看到server:Microsoft-HTTPAPI/2.0 ,当然仅靠这个是不能判断

护理不良事件管理详解

非惩罚性护理不良事件报告制度及激励机制 一、不良事件的定义 是指在护理过程中发生的、不在计划内的跌倒、坠床、压疮、用药错误、走失、误吸或窒息、烫伤及其他与患者安全相关的非正常的护理意外事件。 二、不良事件报告的意义 通过报告不良事件,及时发现潜在的不安全因素,可有效避免护理差错与纠纷的发生,保障病人安全,不良事件的全面报告,有利于发现医院安全系统存在的不足,提高医院系统安全水平,促进医院及时发现安全事故隐患,不断提高对错误的识别能力,不良事件报告后的信息共存,可以使相关人员从他人的过失中吸取经验教训,以免重蹈覆辙。 三、护理不良事件的范围 1、患者在住院期间发生压疮、坠床、跌倒、导管滑脱、用药失误、走失、误吸或窒息、烫伤及其他与患者安全相关的护理意外。 2、因护理操作失误导致患者出现严重并发症、住院时间延长或住院费用增加等。 3、严重药物不良反应或输血不良反应。 4、严重院内感染。 四、不良事件报告原则 非惩罚性、主动性报告的原则:护理部鼓励护理人员主动、自愿报告不良事件,包括本人的或本科室的,也可报告其他人或其他科室的,可以实名报告,也可匿名报告,对主动报告的科室和个人的有关信息,护理部将严格保密。 五、上报内容 包括患者一般资料,不良事件发生的时间地点、不良事件项目分类、发生的主要原因、采取的措施、患者损害的严重程度及后果和改进措施。上报形式以个人或科室为上报单位。 六、上报形式 1、口头报告:发生严重不良事件时,护理人员应立即向护士长、科主任、总值班、护理部口头报告事件情况。 2、书面报告:护理人员书面填写《护理不良事件报告单》。 3、网络报告:护理人员登录内网,填写《护理不良事件报告单》电子表格,

Windows事件驱动机制-1

Windows的事件驱动机制 在Windosw系统中,程序的设计围绕事件驱动来进行。当对象有相关的事件发生时(如按下鼠标键),对象产生一条特定的标识事件发生的消息,消息被送入消息队列,或不进入队列而直接发送给处理对象,主程序负责组织消息队列,将消息发 送给相应的处理程序,使相应的处理程序执行相应的动作,做完相应的处理后将控制权交还给主程序。 在这种机制中,对象的请求仅仅是向队列中添加相应的消息,耗时的处理则被分离给处理函数。这种结构的程序中各功能模块界限分明,便于扩充,能充分利用CPU 的处理能力,使系统对外界响应准确而及时。 Windows事件驱动机制 我们当中不少使用VC、Delphi等作为开发语言的程序员是一步步从DOS 下的Basic、C++中走过来的,而且大多在刚开始学习编程时也是先从DOS下的编程环境入手的,因此在习惯了DOS下的过程驱动形式的顺序程序设计方法后,往往在向Windows下的开发环境转型的过程中会对Windows所采取的事件驱动方式感到无法适应。因为DOS和Windows这两种操作系统的运行机制是截然不同的,DOS下的任何程序都是使用顺序的、过程驱动的程序设计方法。这种程序都有一个明显的开始、明显的过程以及一个明显的结束,因此通过程序就能直接控制程序事件或过程的全部顺序。即使是在处理异常时,处理过程也仍然是顺序的、过程驱动的结构。而Windows的驱动方式则是事件驱动的,即程序的流程不是由事件的顺序来控制,而是由事件的发生来控制,所有的事件是无序的,所为一个程序员,在编写程序时,并不知道用户会先按下哪个按纽,也就不知道程序先触发哪个消息。因此我们的主要任务就是对正在开发的应用程序要发出的或要接收的消息进行排序和管理。事件驱动程序设计是密切围绕消息的产生与处理而展开的,一条消息是关于发生的事件的消息。 Windows的消息循环 Windows操作系统为每一个正在运行的应用程序保持有一个消息队列。当有事件发生后,Windows并不是将这个激发事件直接送给应用程序,而是先将其翻译成一个Windows消息,然后再把这个消息加入到这个应用程序的消息队列中去。应用程序需要通过消息循环来接收这些消息。在MFC中使用了对WinAPI进行了很好封装的类库,虽然可以为编程提供一个面向对象的界面,使Windows程序员能够以面象对象的方式进行编程,把那些进行SDK编程时最

异常情况处理制度及流程

山西煤炭运销集团 蒲县昊锦塬煤业有限公司异常情况处理制度为认真贯彻落实国家、省、市关于集中开展安全生产大检查的工作安排要求,加强我矿信息监控系统管理水平,做好矿井生产过程中井下环境参数的有效监控,保障矿井安全生产,加强煤矿安全生产管理水平及抗灾能力,特制定本矿异常情况处理制度如下: 一、值班人员按《中心岗位责任制》规定,浏览查询煤矿安全信息,发现异常情况及时处理,并认真填写《异常情况报告处理表》,传真至县监控中心。 二、监控室值班人员发现系统发出异常报警后,值班人员必须立即通知监控室主任、分管领导,同时立即通知矿井调度部门,由监控室主任或分管领导组织相关人员对本次异常报警进行原因分析,并按规定程序及时报上一级网络中心。处理结果应记录备案。调度值班人员接到报警、断电信息后,应立即向矿值班领导汇报,矿值班领导按规定指挥现场人员停止工作,断电时撤出人员。处理过程应记录备案。当系统显示井下某一区域瓦斯超限并有可能波及其他区域时,矿井有关人员应按瓦斯事故应急预案手动遥控切断瓦斯可能波及区域的电源。值班人员接到网络中心发出的报警处理指令后,要立即处理落实,并将处理结果向网络中心反馈。 当工作面瓦斯浓度达到报警浓度时,值班人员应立即通知矿值班领导及监控室主任,并填写异常情况处理报告表传真上报至

县监控中心

;由分管领导或监控室主任安排相关人员进行原因分析,按照瓦斯超限分析原则:①按人工检测值与甲烷传感器对比分析; ②按报警地点的历史曲线对比分析;③按报警地点上风侧检测值对比分析。根据分析结果立即将处理措施下达至矿调度中心按处理措施严格执行。报警期间要采取安全措施,报警消除后将报警的起止时间、分析报告、采取措施和处理结果上报县监控室并存档备案。 三、当煤矿通讯中断、无数据显示时,值班人员要通过传真(或电话)向县监控中心报告,并查明原因,恢复通讯。情况紧急的,由值班人员立即向矿领导汇报,对因故造成通讯中断未及时上报的,要通过电话联系移动公司或长途线务局进行抢修。

Windows程序设计复习资料(完整答案)

一、单项选择题: 1.WinMain()函数的工作。 WinMain()函数是Windows程序的入口点 在WinMain中进行:注册窗体类、建立窗体、显示窗体、更新窗体、建立消息循环2.非MFC的Windows程序中,不是处理WM_PAINT消息的时候怎样获得客户区的设备环境句柄。 BeginPaint ----------EndPaint GetDC---------------ReleaseDC(成对出现) 利用GetDC()函数获取设备环境句柄 3.句柄的含义。 句柄是一个(通常为32位的)无符号整数(unsigned int),它代表一个内核对象内核对象在应用层的表示 4.在MM_TEXT映射模式下,什么情况下客户坐标和逻辑坐标可能不同。 当窗口客户区有滚动条时客户坐标和逻辑坐标可能不同 5.Windows程序的控制流程。 Windows程序没有固定的控制流程,事件驱动程序控制流程 6.事件驱动、消息驱动的概念。 事件驱动程序设计是一种全新的程序设计方法,它不是由事件的顺序来控制,而是由事件的发生来控制,而这种事件的发生是随机的、不确定的,并没有预定的顺序,这样就允许程序的的用户用各种合理的顺序来安排程序的流程。 消息是事件到达Windows内部后的称呼 7.对话框、控件的作用。 对话框是程序与用户之间进行交互,接收用户输入、并把数据显示出来的一个窗口; 控件是用户可与之交互以输入或操作数据的对象。控件通常出现在对话框中或工具栏上。 8.MFC中怎样处理WM_PAINT消息。 在OnDraw()函数中处理该消息 9.GetMessage()函数在什么情况下返回0,从而导致消息循环终止,程序结束。 在接收到WM_QUIT消息时返回0 10.Windows中,应用程序的输出是怎样进行的。 通过设备描述表DC(Device Context)来进行应用程序与物理设备之间的交互11.MFC中,大多数类的基类都是什么。 CObject类 12.一个MFC应用程序必须有且只能有一个从哪个类派生的全局应用程序对象,此对象在运行时刻控制应用程序中所有其他对象的活动。 CWinApp类 13.每次当窗口客户区需要重新绘制时,应用程序框架怎么处理。 发送WM_PAINT消息,调用OnDraw()函数进行重绘 14.CDC类的作用。 CDC是设备描述表类的基类,除了一般的窗口显示外,还用于基于桌面的全屏幕绘制和非屏幕显示的打印机输出。 15.当程序中某个函数改变了数据而需要重新绘制客户区时,OnDraw()函数不会被自动调

Windows错误代码解释大全

遇到什么错误了就找找,应该会有帮助的。 6001 0x1771 指定的文件无法解密。 6002 0x1772 指定的文件已加密,而且用户没有能力解密。 6003 0x1773 这个系统没有有效的加密恢复策略配置。 6004 0x1774 所需的加密驱动程序并未加载到系统中。 6005 0x1775 文件加密所使用的加密驱动程序与目前加载的加密驱动程序不同。 6006 0x1776 没有为用户定义EFS 关键字。 6007 0x1777 指定的文件并未加密。 6008 0x1778 指定的文件不是定义的EFS 导出格式。 6009 0x1779 指定的文件是只读文件。 6010 0x177A 已为加密而停用目录。 6011 0x177B 不信任服务器来进行远程加密操作。 6012 0x177C 为此系统配置的恢复策略包含无效恢复证书。 6013 0x177D 用在此源文件上的加密算法需要比目标文件上更大的密钥缓冲区。 6014 0x177E 磁盘分区不支持文件加密。 6015 0x177F 这台机器已为文件加密而停用。 6016 0x1780 需要一个更新的系统来解密此加密文件。 6118 0x17E6 此工作组的服务器列表当前无法使用 6200 0x1838 要正常运行,任务计划程序服务的配置必须在系统帐户中运行。单独的任务可以被配 置成在其他帐户中运行。 6600 0x19C8 日志服务遇到无效日志扇区。 6601 0x19C9 日志服务遇到块校验无效的日志扇区。 6602 0x19CA 日志服务遇到重映射的日志扇区。 6603 0x19CB 日志服务遇到部分或未完成的日志块。 6604 0x19CC 日志服务遇到错误,原因:试图访问活动日志范围外的数据。 6605 0x19CD 日志服务用户排列缓冲区已用尽。 6606 0x19CE 日志服务遇到错误,原因:试图从读取上下文无效的排列区读取。 6607 0x19CF 日志服务遇到无效日志重新启动区域。 6608 0x19D0 日志服务遇到无效日志块版本。 6609 0x19D1 日志服务遇到无效日志块。 6610 0x19D2 日志服务遇到错误,原因:试图以无效读取模式读取。 6611 0x19D3 日志服务遇到错误,原因:日志流没有重启动区。 6612 0x19D4 日志服务遇到损坏的元数据文件。 6613 0x19D5 日志服务遇到无法由日志文件系统创建的元数据文件。 6614 0x19D6 日志服务遇到数据不一致的元数据文件。 6615 0x19D7 日志服务遇到错误,原因:试图分配和排列保留空间。 6616 0x19D8 BITS 报告计划下载已经失败了%2 次。原因是: %1。日志服务无法删除日志文件或 文件系统容器。 6617 0x19D9 日志已经达到允许分配给日志文件的容器的上限。 6618 0x19DA 日志服务试图读取或写入日志开始之前的位置。

Windows错误代码大全

Windows错误代码大全 3001 0x0BB9 指定的打印机驱动程序当前正在使用。 3002 0x0BBA 找不到缓冲文件。 3003 0x0BBB 未发送StartDocPrinter 调用。 3004 0x0BBC 未发送AddJob 调用。 3005 0x0BBD 指定的打印处理器已经安装。 3006 0x0BBE 指定的打印监视器已经安装。 3007 0x0BBF 该指定的打印监视器不具备所要求的功能。 3008 0x0BC0 该指定的打印监视器正在使用中。 3009 0x0BC1 当打印机有作业排队时此操作请求是不允许的。 3010 0x0BC2 请求的操作成功。直到重新启动系统前更改将不会生效。 3011 0x0BC3 请求的操作成功。直到重新启动服务前更改将不会生效。 3012 0x0BC4 找不到打印机。 3013 0x0BC5 已知打印机驱动程序不可靠。 3014 0x0BC6 已知打印机驱动程序会伤害系统。 3020 0x0BCC 在%1 上检测到电源中断。服务器已经暂停。 3021 0x0BCD 在%1 的时候恢复供电。服务器恢复操作。 3022 0x0BCE 因为电池快没电,所以UPS 服务会在%1 关机。 3023 0x0BCF 用户指定的关机命令文件的配置有问题。不过UPS 服务已经启动。 3025 0x0BD1 已经替换驱动器%1 上损坏的扇区(即时修复)。没有丢失数据。您应该尽早运行 CHKDSK,以便完全还原性能,并补充卷的备用扇区池。即时修复是在处理远程请求时进行的。3026 0x0BD2 驱动器%1 的HPFS 卷上发生磁盘错误。错误是在处理远程请求时发生的。 3027 0x0BD3 用户帐户数据库(NET.ACC) 已损坏。本地安全系统正在用在%2 的%1 上备份来替换损坏的NET.ACC。此刻之后对数据库的任何更改会全部丢失。 3028 0x0BD4 找不到用户帐户数据库(NET.ACC)。本地安全系统正在还原%2 的%1 上创建的备用数据库。此刻之后对数据库的任何更改会全部丢失。 3029 0x0BD5 因为用户帐户数据库(NET.ACC) 找不到或损坏,而且也没有可用的备份数据库,

安全生产异常信息报告、收集、分析处理制度(试行)

*********矿井 安全生产异常信息报告、收集、分析处置制度(试行) 第一章总则 第一条为规范矿井安全生产异常信息管理,建立安全生产异常信息报告、收集和分析处置的工作机制,实现安全管理关口前移、超前预警、超前处理,真正做到将事故消灭在萌芽状态,结合矿井现状,特制定本制度。 第二章安全生产异常信息界定 第二条本制度所称的安全生产异常信息,是指事故发生前的异常征兆,必须进行停产撤人。 第三条异常信息内容: 1.地表水无法控制,向井下溃水的; 2.井下发生突水或井下涌水量出现突增等异常情况,危及职工生命及矿井安全的; 3.井下发生瓦斯、煤尘、火灾、水灾等事故危险征兆的; 4.供电系统发生故障,不能保证矿井安全供电的; 5.主要通风机发生故障或通风系统遭到破坏,不能保证矿井正常通风的; 6.监测监控系统出现报警,情况不明的; 7.有害气体指标超限或发现有明火的; 8.井下工作地点瓦斯浓度超过规定的; 9.采掘工作面有冒顶征兆,采取措施不能有效控制的;

10.其他异常情况可能引起停产撤人的。 第三章安全生产异常信息报告、收集、分析处理制度 第四条为有效、果断处置异常信息,超前防范各类事故,成立安全生产异常信息领导小组。 组长:矿长 副组长:安全矿长、技术矿长、生产矿长、机电矿长 成员:各专业副总工程师和专业科室负责负责人 领导小组下设办公室,调度室主任兼任办公室主任,具体负责异常信息报告、收集和分析处理等有关工作。 第五条安全生产异常信息报告 任何人员一旦发现本制度规定的安全生产异常信息,必须及时向调度室报告,调度室值班人员接到安全生产异常信息的报告后,必须立即通知受到安全威胁的人员撤离危险区域,同时通知安全生产异常信息领导小组所有人员到调度室集合。 第六条安全生产异常信息收集 矿井值班、带班领导、区队跟班队长、班组长、安监员、调度员、瓦检员及其他安全管理人员,均为安全生产异常信息收集者,在矿井生产过程中,当发现本制度规定的安全生产异常信息时,必须第一时间发出停产撤人的命令,指挥现场人员撤到安全地点,同时向矿调度室汇报,调度室做好安全生产异常信息的收集记录工作。

Windows程序设计题(含简答题答案)剖析

《Windows程序设计》模拟题 一.单项选择题 1. 在VC++中,项目文件的扩展名是(B)。 A)exe B)dsp C)d sw D)cpp 2. 在MFC中,利用ClassWizard不能(D)。 A)建立新类B)进行消息映射 C)增加类的成员变量D)插入资源 3. 当滑块滑动时,滑块条控件将发送滚动消息来通知父窗口,垂直滑动条发送(C)消息。 A)WM_CHAR B)WM_HSCROLL C)W M_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)C Window D)CDialog 7. 使用GetDC()获取的设备上下文在退出时,必须调用(A)释放设备上下文。 A)ReleaseDC() B)delete() C)D eleteDC() D)Detach() 8. 希望菜单无效,应该用CCmdUI类的(A)成员函数。 A)Enable B)SetRadio C)S etCheck D)SetText 9. 希望菜单前出现一个“√”,应该用CCmdUI类的(C)成员函数。 A)Enable B)SetRadio C)SetCheck D)SetText 10. 下面(A)不是MFC设备环境类CDC类的派生类。 A)GDI B)CPaintDC C)C ClientDC D)CWindowDC 11. 在MFC中,所有的文档类都派生于(C),所有的视图类都派生于(A)。 A)CView B)CWindow C)CDocument D)CFormView

Windows编程基础-期末考试试卷头期末-A卷答案

北华航天工业学院2013—2014学年第二学期 Windows编程基础课程考试卷(A、B) 考核形式:开卷闭卷班级:姓名:学号: 一、填空题(每空1分,共10分) 1. 用户可以通过项目工作区窗口的ResourceView 视图来查看资源。 2. 一个单文档的MFC 应用程序框架一般包括5个类:应用程序类、框架窗口类、 视图类、文档类和文档模板类。 3. 改变菜单项文本是使用CCmdUI 类的SetText 成员函数。 4. 滚动条类CScrollBar的成员函数规定了滚动条的操作。设置滚动条的范围使用SetRange 函数,设置滚动块的位置使用SetScrollPos 函数,获取滚动块的当前位置使用GetScrollPos 函数。 5. 对话框默认标识符前缀是IDD 。 二、选择题(每空2分,共40分) 1.MFC类库中的类按层次关系可知,CStatic的直接父类为(B )。 A、CObject B、CWnd C、CCmdTarget D、CFrameWnd 2. 以下控件中,( C )没有Caption属性。 A、按钮 B、群组框 C、编辑控件 D、静态控件 3. 列表框ClistBox类的成员函数( A )用来向列表框增加列表项,成员函数( C )用来清除列表项所有项目,成员函数( F )用来返回列表框的列表项的总数。 A、AddString B、DeleteString C、ResetContent D、FindString E、GetCurSel F、GetCount 4. 假定AB为一个类,则执行“”AB a(4),b(3),*p[2];”语句时,自动调用该类构造函数的次数为( A )。 A、2 B、3 C、4 D、5 5.在类外定义类的成员函数时,应当使用( B )来标识该函数为特定类的成员。A、:B、::C、-> D、this

Windows异常处理流程

Windows异常处理流程 作者:SoBeIt 出处:https://www.360docs.net/doc/b32235559.html,/articles/200412/761.html 日期:2005-01-06 先来说说异常和中断的区别。中断可在任何时候发生,与CPU正在执行什么指令无关,中断主要由I/O设备、处理器时钟或定时器等硬件引发,可以被允许或取消。而异常是由于CPU执行了某些指令引起的,可以包括存储器存取违规、除0或者特定调试指令等,内核也将系统服务视为异常。中断和异常更底层的区别是当广义上的中断(包括异常和硬件中断)发生时如果没有设置在服务寄存器(用命令号0xb向8259-1中断控制器0x20端口读出在服务寄存器1,用0xb向8259-2中断控制器的0xa0端口读出在服务寄存器2)相关的在服务位(每个在服务寄存器有8位,共对应IRQ 0-15)则为CPU的异常,否则为硬件中断。 下面是WINDOWS2000根据INTEL x86处理器的定义,将IDT中的前几项注册为对应的异常处理程序(不同的操作系统对此的实现标准是不一样的,这里给出的和其它一些资料不一样是因为这是windows的具体实现): 中断号名字原因 0x0 除法错误1、DIV和IDIV指令除0 2、除法结果溢出 0x1 调试陷阱1、EFLAG的TF位置位 2、执行到调试寄存器(DR0-DR4)设置的断点 3、执行INT 1指令 0x2 NMI中断将CPU的NMI输入引脚置位(该异常为硬件发生非屏蔽中断而保留) 0x3 断点执行INT 3指令 0x4 整数溢出执行INTO指令且OF位置位 0x5 BOUND边界检查错误BOUND指令比较的值在给定范围外 0x6 无效操作码指令无法识别 0x7 协处理器不可用1、CR0的EM位置位时执行任何协处理器指令 2、协处理器工作时执行了环境切换 0x8 双重异常处理异常时发生另一个异常 0x9 协处理器段超限浮点指令引用内存超过段尾 0xA 无效任务段任务段包含的描述符无效(windows不 使用TSS进行环境切换,所以发生该异常说明有其它问题) 0xB 段不存在被引用的段被换出内存 0xC 堆栈错误1、被引用内存超出堆栈段限制 2、加载入SS寄存器的描述符的present位置0 0xD 一般保护性错误所有其它异常处理例程无法处理的异常 0xE 页面错误1、访问的地址未被换入内存 2、访问操作违反页保护规则 0x10 协处理器出错CR0的EM位置位时执行W AIT或ESCape指令 0x11 对齐检查错误对齐检查开启时(EFLAG对齐位置位)访问未对齐数据

生产异常处理机制

广东樱雪有限公司文件组装车间异常工时责任追究考核管理办法(修订版)为了确保制造部月度产量目标达成,确保公司生产经营紧张有序,生产压力在各生产支持主责模块间有效传递与分解,实现不停线、不断线、不下线,及时暴露生产异常并进行有效责任追究,经公司研究决定特制定本考核管理办法。一、总装车间生产支持主责模块及必须有效支持的项目

二、主要生产异常类型与主责模块责任界定

三、各类生产异常情况责任人分解 四、生产异常情况异常工时责任追究执行标准

五、生产异常责任追究运作模式 1、组装车间在生产过程中出现异常情况时由生产线线长、物料调度(指仓管 的方式通知主责模块第一责任 人,相关责任人收到异常信息后应立即(要求在接到信息的 现场进行处理和确认,如果不到现场处理和确认则视同默认车间反馈的异常事件及处理异常对车间生产影响的时间; 2、的形式通知主责模块第一责任 人(责任人到达现场除外),同时将异常工时与责任模块第一负责人进行口头初步确认; 3、的异常情况,由生产线线长(指发泡总装线)、物料 调度(指仓管员)在填写《异常工时责任追究反馈表》在上交车间主任审核,车间主任审核完后在各生产部部长审批; 4、《异常工时责任追究反馈表》审批流程:生产线线长、仓管员(填写)→ 车间主任(审核)→各生产部部长(审批); 5、各生产部部长将审批完后的《异常工时责任追究反馈表》在 的形式发送至相关责任人处进行公示; 6、相关责任人在收到《异常工时责任追究反馈表》后默认视同接受,如果有

各生产部部长进行沟通反馈,各生产部部长收到异议反馈后组织异议调查最终将以事实依据作为最终裁定; 7、最终裁定的《异常工时责任追究反馈表》将在事件发生日的 8、生产副总助理汇总上月所有异常工时责任追究统计表输出《异 常工时责任追究月度处罚明细表》,经制生产副总(审核)、总经理(审批)后报送行政部(执行扣罚); 9、异常工时责任追究月度处罚金额在责任人当月工资中扣除; 10、各班组负责人根据本班组异常工时产生的罚款额度以 形式提交申请,经各制造部部长(一审)、生产副总(二审),生产副总(批准)后报送各生产部车间统计员将罚款额度纳入受影响班组的当月工资总额; 六、其他事项 1、本考核管理办法由生产部负责起草、修订、解释、执行; 2、本考核管理办法从2013年*月*日起试行考核; 3、为了提高各主责模块对异常工时改进的重视程度,要求各主责模块每月收 到正式版《异常工时责任追究月度处罚明细表》后的三个工作日向生产部提交《异常工时改进方案》; 4、各主责模块提交的《异常工时改进方案》,要求要对产生的异常工时进行数 据分析、原因总结、明确改进措施、落实责任人与改善进度; 5、生产部对各部门的《异常工时改进方案》进行收集、审核、评价; 6、行政部对各主责模块《异常工时改进方案》的评价结果纳入部门月度绩效 考核,根据改进的效果对责任部门实行扣分或加分;

windows异常处理机制

Windows异常处理机制 在windows操作系统下,异常处理机制与调试机制息息相关。理解异常处理机制对于 程序的调试有很大帮助。下文将尝试从异常的产生,异常的分发,异常的处理几个角度进行 探讨,辅以多种异常处理的示例代码进行分析,以期学习更加灵活的调试技巧。 异常的产生 异常和中断非常相似但又有区别。中断可在任何时候发生,与CPU正在执行什么指令 无关,中断主要由I/O设备、处理器时钟或定时器等硬件引发,可以被允许或取消。而异常 是由于CPU执行了某些指令引起的,可以包括存储器存取违规、除0或者特定调试指令等, 内核也将系统服务视为异常。 异常发生时,cpu无法继续运行。此时它将当前线程状态保存,并从中断向量表中根据 异常原因取出对应的异常处理入口,将控制权交给异常处理程序。下表为中断向量表中的异 常原因及对应intel保留的中断号 名字原因 中断 号 0x0 除法错误1、DIV和IDIV指令除0.2、除法结果溢出 0x1 调试陷阱1、EFLAG的TF位置位2、执行到调试寄存器(DR0-DR4)设置的断点3、执行INT1指令 0x2 NMI中断将CPU的NMI输入引脚置位(该异常为硬件发生非屏蔽中断而保留) 0x3 断点执行INT3指令 0x4 整数溢出执行INTO指令且OF位置位 BOUND指令比较的值在给定范围外 0x5 BOUND边界检查 错误 0x6 无效操作码指令无法识别 0x7 协处理器不可用1、CR0的EM位置位时执行任何协处理器指令2、协处理器工作时执行了环境切换 0x8 双重异常处理异常时发生另一个异常 0x9 协处理器段超限浮点指令引用内存超过段尾 0xA 无效任务段任务段包含的描述符无效(windows不使用TSS进行环境切换,所以发生该异常说明有其它问题) 0xB 段不存在被引用的段被换出内存 0xC 堆栈错误1、被引用内存超出堆栈段限制2、加载入SS寄存器的描述符的present位置0 0xD 一般保护性错误所有其它异常处理例程无法处理的异常 0xE 页面错误1、访问的地址未被换入内存2、访问操作违反页保护规则 0x10 协处理器出错CR0的EM位置位时执行WAIT或ESCape指令 0x11 对齐检查错误对齐检查开启时(EFLAG对齐位置位)访问未对齐数据

Windows程序设计

一单项选择题 试题1 满分值:4.0分状态:已答 应用程序可以使用GDI创建3种类型的图形输出,不包括【】位图 矢量图形 光栅图形 文本 [我的答案] 光栅图形 试题2 满分值:4.0分状态:已答 关于工具栏、菜单和加速键的关系,正确的说法是【】 工具按钮与菜单必须一一对应 工具栏与加速键一一对应 工具按钮不必与菜单一一对应 菜单与加速键一一对应 [我的答案] 工具按钮不必与菜单一一对应 试题3 满分值:4.0分状态:已答 【】函数用于在指定位置输出字符串: Print TextOut Scanf

[我的答案] Print 试题4 满分值:4.0分状态:已答 下列【】不是MFC消息映射机制有关的宏: DECLARE_MESSAGE_MAP BEGIN_MESSAGE_MAP DECLARE_SERIAL END_MESSAGE_MAP [我的答案] DECLARE_SERIAL 试题5 满分值:4.0分状态:已答 在视图类中获得文档类对象指针用函数【】: GetDocument UpdateAllViews OnUpdate SetModifiedFlag [我的答案] GetDocument 试题6 满分值:4.0分状态:已答 能间接调用视图类的OnDraw函数的是【】OnTimer LButtonDown

Invalidate [我的答案] Invalidate 试题7 满分值:4.0分状态:已答实心画刷只需要定义【】 填充样式 填充颜色 填充模式 填充图案 [我的答案] 填充颜色 试题8 满分值:4.0分状态:已答【】设置进度条的当前位置SetRange SetStep SetPos StepIt [我的答案] SetPos 试题9 满分值:4.0分状态:已答常见的菜单类型不包括【】。 自动菜单

相关文档
最新文档