精华内容
下载资源
问答
  • Windows程序设计之基本介绍

    千次阅读 2019-03-07 14:39:27
    其主要内容包括:SDK程序设计、MFC程序设计及ODBC数据库应用程序设计windows核心编程。 SDK程序设计包括: windows图形界面基础,主要是windows图形界面应用程序的结构以及windows消息响应机制。 GDI绘图,主要是...

    window程序设计是计算机专业学生的基本技能,也是计算机专业必须掌握的基本技术。其主要内容包括:SDK程序设计、MFC程序设计及ODBC数据库应用程序设计、windows核心编程。

    SDK程序设计包括: windows图形界面基础,主要是windows图形界面应用程序的结构以及windows消息响应机制。 GDI绘图,主要是windows设备上下文及绘图。 windows的消息处理,包括键盘消息处理、鼠标消息处理、菜单消息处理、定时计数器消息处理、控件消息处理。这些消息处理的方式对于理解MFC的消息映射至关重要。SDK下的对话框应用程序设计,包括模态和非模态对话框的启动、对话框中的控件。理解并学会了SDK下的对话框应用程序设计,再去学习MFC下的对话框应用程序设计就会觉得事半功倍、水到渠成了。

    MFC应用程序设计及ODBC数据库应用程序设计:了解到MFC应用程序的创建方法及文档视图类应用程序的框架。重点是MFC编程的基础,以及windows对象和MFC对象的关系。这是MFC应用程序设计中最需要理解的部分,只有充分理解了windows对象和MFC对象的关系才能轻松掌握MFC应用程序设计的方法。另外、还必须了解MFC应用程序设计的向导的使用方法。 MFC消息映射与消息处理。重点是关于MFC的消息映射机制、windows标准系统消息的处理、控件消息处理、命令消息处理(菜单)、自定义消息处理、反射消息处理。这也是MFC的精华,希望同学们在学习的过程中一定要加倍关注。线程消息的处理,这一部分放在后面的线程部分讲解。 MFC文档类应用程序设计。在这一部分重点讲解了文档的串行化。 MFC的对话框应用程序设计。重点是关于控件变量关联的问题,包括是给控件关联一个值变量还是关联一个控件类变量。这两种变量之间的区别和应用环境。然后讲解几个常用的控件的使用方法。ODBC数据库应用程序设计。主要是关于CDataBase类和CRecordset类的使用方法,并涉及到多年来在项目中封装的ODBC数据类。在此基础之上讲解了一个数据库应用程序的例子。

    windows核心编程:这是Windows程序设计中的难点部分,需要较强的编程能力,可以实现下列基本功能:

    1》为32位和64位Windows系统构建和实现应用程序;

    2》新建和处理进程与作业;

    3》调度.管理、同步和销毁线程;

    4》通过I/O完成端口执行同步和异步设备I/O操作;

    5》使用虚拟内存、内存映射文件和堆之类的各种技术来分配内存;

    6》处理默认调拨的线程栈物理存储;

    7》为延迟加载、API拦截和进程注入构建DLL;

    8》使用结构化异常处理、Windows错误恢复和应用程序重启等机制。

    展开全文
  • Windows程序设计》复习题

    万次阅读 多人点赞 2016-05-24 13:37:35
    Windows程序设计》复习题,包含windows程序设计和MFC程序设计的众多知识点。

    《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 )用于指定图形的边框样式。

    A)画笔        B)画刷         C)区域         D)位图

    13. (C )包括键盘和鼠标的输入。这一类消息首先放在系统消息队列中,然后由Windows将它们送入应用程序消息队列中,由程序来处理消息。

    A)系统消息                               B)用户消息

    C)输入消息                                  D)控制消息

    14.项目文件的扩展名是(B)。 

    A)exe  B)dsp  C)dsw  D)cpp

    15. 在MFC中,文档负责将数据存储到永久存储介质中,通常是磁盘文件或数据库,存取过程称为(B)。

          A)文件访问    B)串行化     C)文件读写    D)格式化

    16. 在VC++ 6.0在编程环境中,运行程序的快捷键是(A)。

    A)Ctrl+F5           B)F7     C)Ctrl+F7              D)F5

    17. 在VC++ 6.0在编程环境中,设置和取消断点的快捷键都是(A)。

    A)F9                  B)F5      C)F11                  D)F10

    18. 在MFC中,在编辑某菜单项时,若要指明该菜单项是一个弹出式子菜单,必须选择属性对话框中的(B)。

    A)Separator                B)Pop-up     C)Inactive              D)Grayed

    19. 使用GetWindowDC()GetDC( )获取的设备上下文在退出时,必须调用(C)释放设备上下文。

          ADeleteDC()    Bdelete( )    CReleaseDC( )    DDetach()

    20.  在MFC中,(B)代表窗口客户区的显示设备上下文,(C)代表整个窗口的显示设备上下文。

    A)CPaintDC    B)CClientDC   C)CWindowDC    D)CMetaFileDC

    21. 对话框的功能被封装在(B)类中。

    A)CWnd                                         B)CDialog

    C) CObject                                       D)CCmdTarget

    22. C)包括键盘和鼠标的输入。这一类消息首先放在系统消息队列中,然后由Windows将它们送入应用程序消息队列中,由程序来处理消息;

          (D)用来与Windows的控制对象,如列表框、按钮、复选框等进行双向通信。当用户在列表框中改动当前选择或改变了复选框的状态时发出此类消息。

    A)系统消息     B)用户消息    C)输入消息     D)控制消息

    23.   生成1个只具有确定和取消按钮的消息框,其参数为( C )。  

    A) MB_OK            B)MB_YESNO

    C) MB_OKCANCEL   D)MB_RETRYCANCEL

    24. 在Windows程序设计中如果加入了滚动条。设置滚动条的范围使用(C)函数,设置滚动条的位置使用(E)函数,获得滚动块的当前位置使用(F )函数。

    A)SetPos()                               B)SetRange()

    C)SetScrollRange()                    D)GetPos()

    E)SetScrollPos()                       F)GetScrollPos()

    G)GetScrollRange()

    25. 消息循环的处理过程如下:

       (A)函数不断侦察应用程序的消息队列,若队列为空,该函数一直运行,不返回;一旦发现队列不为空,便取出一条消息,把它拷贝到msg结构变量中,同时该函数返回TRUE;得到消息msg后,

       (B)把来自键盘的命令翻译成WM_XXX消息命令形式。

       (E)函数通知Windows把每个消息分发给相应的窗口函数。应用程序并不直接调用窗口函数,而由Windows根据消息去调用窗口函数,因此,窗口函数经常被称为回调函数。

    A)GetMessage( )    B)translateMessage( )     C)PostMessage( )

    D)SendMessage( )   E)DispatchMessage( )

    26.   如果要严格按照匈牙利命名法命名1个局部窗口句柄,以下变量命名正确的是( B )。

    A) g_hWnd    B)m_hWnd    C)      g_pWnd   D)   m_pWnd

    27.   在Windows编程约定中,应用程序接口的英文缩写是( A )。

    A)API    B)SDI   C)GDI    D)MDI

    28.   在Windows编程约定中,软件开发包的英文缩写是( C  )。

    A) API   B)    SDI   C)    SDK   D)   MDI

    29.   在Windows编程约定中,图像设备接口的英文缩写是( C )。

    A) API   B)    SDI   C)    GDI   D)    MDI

    30.   以下对应于unsignedlong 的数据类型为:( B )

    A) WORD   B)DWORD   C)INT   D) BYTE

    31.   下列选项中,不属于匈牙利命名法属性部分的是( D )。

    A) g_    B)     m_    C)    c_    D)d_

    32.   如果要严格按照匈牙利命名法命名1个全局窗口句柄,以下变量命名正确的是( A )。

    A) g_hWnd    B)m_hWnd   C)      g_pWnd    D)   m_pWnd

    33.   下列Windows数据格式中,代表设备句柄的是( B )。

    A) HWND   B)HDC    C) HINSTANCE  D)HFONT      

    34.   "在一个窗口的正常运行的Windows程序中,把主窗口创建语句做如下改动:

    hWnd =CreateWindow(NULL, szTitle, WS_OVERLAPPEDWINDOW,

    CW_USEDEFAULT,0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

    则下列说法正确的是( C )。" 

    A) 程序仍然正常运行,与改动前相比没有变化

    B) 程序出现编译错误

    C) 程序编译通过,但没有窗口显示

    D) 程序正常运行,窗口标题变为NULL

    35.   典型的Windows窗口程序的流程为:( A )  

    A) 注册窗口类->创建窗口->显示窗口->更新窗口->消息循环

    B) 创建窗口->注册窗口类->显示窗口->更新窗口->消息循环

    C) 创建窗口->注册窗口类->显示窗口->更新窗口->消息循环

    D) 注册窗口类->创建窗口->更新窗口->显示窗口->消息循环

    36.   菜单编辑器中,如果要设置某个项为分隔线,那么这个项的哪个属性为true。(  D  )

    A) Visible    B)Grayed   C)  Enable  D)       Separator

    37.   在Windows消息机制中,菜单消息类型是:( B )

    A) WM_PAINT     B) WM_COMMAND

    C) WM_CREATE   D) WM_CLOSE

    38.   在Windows编程中,代表键盘的"↑"键的虚拟键值是( A  )。

    A) VK_UP          B) WM_KEYDOWN

    C) WM_KEYUP    D) VK_DOWN

    39.   在Windows编程中,响应键盘按键按下消息的Windows消息是( B )。

    A) VK_UP          B) WM_KEYDOWN

    C) WM_KEYUP    D) VK_DOWN

    40.   在Windows编程中,按下键盘的"A"键后,返回的Windows消息是( B )。

    A) VK_A          B)   WM_KEYDOWN

    C) A              D)  DIK_A

    41.   在Windows编程中,按下鼠标左键产生的Windows消息是(B )。

    A) WM_KEYDOWN     B)WM_LBUTTONDOWN

    C) WM_LEFT           D)WM_RBUTTONDOWN

    42.   下列哪个缩写是微软提供的C++语言的帮助库?( B )

    A) MFC      B)MSDN       C)API       D)SDK

    43.   Windows编程中,定时器消息是( B )

    A) WM_TIME         B)WM_TIMER

    C) WM_ON_TIME     D)WM_COMMAND     

    44.   GDI环境中,窗口的坐标系是如何构成的?( D )

    A) 左上角为原点,x轴正方向为水平向右,y轴正方向为竖直朝上

    B) 中间为原点,x轴正方向为水平向右,y轴正方向为竖直朝上

    C) 左下角为原点,x轴正方向为水平向右,y轴正方向为竖直朝下

    D) 左上角为原点,x轴正方向为水平向右,y轴正方向为竖直向下

    45.   以下选项中,GDI不能支持的是:( B )      

    A) 位图         B)Flash动画

    C) 直线和曲线    D)文字

    46.   设备环境DC的全称为:    ( B )

    A) DeviceContent        B) DeviceContexts

    C) DeviceConfig         D)       DeviceConter

    47.   InvalidateRect的作用是       (B )

    A) 删除一个矩形     B)使一个矩行区域变为无效,从而可以重绘

    C) 使一个矩形区域变为无效,从而释放部分GDI资源

    D) 擦除一个矩形区域


    48.   "已知窗口为缺省状态,有如下代码:

    HDC hdc =GetDC( hWnd );

    HPEN hpen= CreatePen( 1, 1, RGB(255,0,0) );

    SelectObject(hdc, hpen );

    Ellipse(hdc, 050, 50, 200, 200 );

    则这段代码的执行效果是( B )。" 

    A) 绘制1个黑色的椭圆形边框,无填充颜色

    B) 绘制1个红色的椭圆形边框,无填充颜色

    C) 绘制1个黑色的椭圆形,填充为黑色,无边框

    D) 绘制1个红色的椭圆形,填充为红色,无边框


    49.   "已知有如下代码:

    HDC hDC =GetDC(hWnd);

    LineTo(hDC,100,100);

    则这段代码的执行效果是( A )。" 

    A) 从窗口的左上角至坐标(100,100)绘制1条直线

    B) 没有绘制任何图形

    C) 从窗口的任意一点开始至坐标(100,100)绘制1条直线

    D) 从鼠标在窗口的位置至坐标(100,100)绘制一条直线


    50.   以下函数中不受画刷影响的函数是:( C )  

    A) Rectangle          B)Ellipse

    C) LineTo            D)Polygon


    51.   如果要创建一个宋体字体,那么字体描述中哪个属性为“宋体”?( C

    A lfCharSet          BlfQuality

    C lfFaceName        DlfStrikeOut


    52.   在Windows编程约定中,位图句柄为( B )。     

    A) HGDI           B)HBITMAP

    C) HDC            D)HPEN

    53.   下面哪个步骤能实现透明贴图(模板位图为单色的1位位图)?( A ) 

    A) 位图和背景像素作异或操作->使用模板位图作与操作->原位图与背景作异或操作

    B) 使用模板位图作与操作->原位图与背景作异或操作->位图和背景像素作异或操作

    C) 位图和背景像素作异或操作->原位图与背景作异或操作->使用模板位图作与操作

    D) 位图与背景作异或操作->位图和背景像素作异或操作->使用模板位图作与操作


    54.   在BitBlt函数中进行光栅化处理方式中,哪1个值说明是要进行或运算? (D )

    A) SRCAND         B)SRCCOPY

    C) SRCINVERT     D)SRCPAINT


    55.   动态链接库文件的后缀名为( B )。      

    A) lib       B)dll    C)  exe    D)obj


    二.     多选题

    1.    已知严格按照匈牙利命名法命名的变量m_pTemp,则以下说法正确的是( BC )。

    A)   该变量是1个全局变量     B) 该变量是1个类成员变量

    C)    该变量是1个指针变量     D)       该变量一定是1个私有变量


    2     下列哪种情况下系统可能向窗口发送WM_PAINT消息?( ABCD )     

    A)   窗口最初创建时

    B)    窗口移动后部分区域由不可见变为可见

    C)    窗口大小改变后

    D)   滚动条滚动后


    3.  在注册窗口类中,不需要进行的操作是( BC )。

    A)   载入图标             B)  确定窗口大小

    C)    确定窗口标题         D)  确定窗口类名称


    4.    关于PeekMessage和GetMessage的说法正确的是( AB )  

    A)   PeekMessage立即返回

    B)    GetMessage将会等待消息到来

    C)    PeekMessage等待消息到来

    D)   GetMessage立即返回


    5.    关于动态菜单,以下说法正确的是( BD )。

    A)   函数LoadMenu可以弹出菜单

    B)    函数CreatMenu用于建立空菜单

    C)    函数DeleteMenu用于删除整个菜单

    D)   函数InsertMenu用于在菜单中插入1个菜单项


    6.    以下关于Windows的鼠标消息,说法正确的是( BD )。   

    A)   鼠标的按键消息种类可以从wParam中得到

    B)    鼠标的按键消息种类可以从message中得到

    C)    鼠标的位置信息可以从wParam中得到

    D)   鼠标的位置信息可以从lParam中得到


    7.    已知语句SetTimer(NULL,1,100,NULL),则以下说法正确的是( AD )。 

    A)   设置了一个定时器,该定时器不能正常起作用

    B)    设置一个定时器,能够正常起作用

    C)    设置了一个定时器,时间间隔为1秒

    D)   设置了一个定时器,时间间隔为100毫秒


    8.    下列选项中属于Windows GDI资源的是( ABC )。    

    A)   位图     B)  画笔    C)    字体    D)   窗口


    9.    能用于绘制直线的函数为:( AB )

    A)   LineTo   B) Polyline   C) Arc    D)     PolyBezier     


    10.   画笔的线型包括:( ABD )

    A)   实线     B)  点划线     C)     波浪线   D)  虚线      


    11.   创建画刷的函数有:    (ABC )

    A)   CreateHatchBrush     B)    CreateSolidBrush

    C)    CreatePatternBrush    D)    CreateLogicBrush  


    12.   在Windows消息机制中,消息系统3大关键要素是( ABC )。 

    A)   消息队列         B)  消息循环

    C)    消息处理函数     D)  消息映射


    13.下列哪种情况下系统可能向窗口发送WM_PAINT消息?( BCD  )
    A)窗口最初创建时
    B)窗口移动后部分区域由不可见变为可见
    C)窗口大小改变后
    D)滚动条滚动后


    14.匈牙利表示法的变量一般分为哪几个部分?(ABC)
    A)属性(例如g_)      B)类型
    C)描述              D)后缀


    15.下列选项中,可以用Windows句柄标识的有( ABD  )。
    A)窗口   B)文件    C)消息    D)字体


    16.关于Windows句柄,下列说法正确的是( AD  )。
    A)每个运行着的Windows程序都有对应的Windows实例句柄
    B)同1个Windows程序打开多次时,对应同1个实例句柄
    C)1个Windows实例句柄只能对应1个窗口句柄
    D)1个Windows实例句柄可以对应多个窗口句柄

     

    三、名词解释

    1、事件:可能触发计算机程序做出相应反应的刺激

    2、句柄:为了区别于普通变量的标识,Windows把这种复杂对象的标识叫做句柄

    3、消息:为了描述事件的各种信息(例如,何时何地发生了何种事件等),Windows定义了一个结构,这个结构就叫做”消息”

    4、Windows的API函数:由操作系统提供的,用户可以使用的函数就叫做API

    5、Windows SDK程序:使用软件开发工具包开发出来的Windows应用程序

    6、资源:资源就是一种可供Windows应用程序利用,可单独编辑,并可动态加载的数据

    7、图象设备接口(GDI):Windows把用于改变DC属性的操作,即与绘图相关的操作都制作成函数,这些函数的集合就叫做图形设备接口

    8、CDC类:在面向对象程序设计思想中,把DC和GDI函数封装到一起形成CDC类  

    9、回调函数:系统调用用户编写的函数过程叫做“回调”,所以这种被系统调用的函数也叫做“回调函数”

    10、无效显示区:在有效提高拆分窗口显示更新效率的方法中,程序只重绘必须重绘的区域

    11、控件:Windows设计了一些具有图形外观的程序实体,这些程序实体在鼠标或键盘的作用下会使程序出现不同的响应,这些可以接收或者产生事件的程序实体就叫做控件

    12、类信息表:MFC程序在不同的场合下还经常用到类的其他信息,于是MFC就把这些信息统统都放在映射表项中,并把它叫做类消息表

    13、消息循环:while(GetMessage(&msg,NULL,NULL,NULL))

    {TranslateMessage(&msg);

    DispatchMessage(&msg);}


    四.填空题

    1、   在MFC中,用户可以通过项目工作区窗口的ResourceView视图来查看资源。

    2、   一个单文档的MFC应用程序框架一般包括5个类:应用程序类、框架窗口类、视图类、文档类和文档模板类。

    3、   Windows是一个基于消息的消息驱动系统。

    4、   项目工作区文件的扩展名是dsw。

    5、   MessageBox函数弹出一个小的对话框向用户显示短信息,并将用户最终的选择返回给调用者。

    6、   在通常情况下,视图派生类的成员函数中通过调用GetDocument函数得到当前文档对象的指针。

    7、   Windows程序中的消息有窗口消息、命令消息和控件通知消息三种类型。

    8、   MFC中的集合类包括数组、列表(链表)、映射(顺序可变)。

    9、   在进行绘图时,画刷用于指定图形的填充样式,画笔用于指定图形的边框样式。

    10、用户按下键盘按键并放开的过程中,将产生至少三条消息:WM_KEYDOWN,WM_CHAR,WM_KEYUP。

    11、Windows API中API的中文译文是应用程序接口 。

    12、MFC的中文译文是微软基础类库

    13、GDI的中文译文是图形设备接口。

    14、全局函数AfxGetApp()可以得到CWinApp应用类指针。

    15、MFC中可自动重绘的绘图代码一般位于项目的视图类的OnDraw()函数中。

    16、在视图中,GetDocument()函数可得到对应的文档对象指针。

    17、在文档中,GetFirstviewPosition()和GetNextview()配合可用来遍历所有和文档关联的视图。

    18、在MFC中,用CRect类来描述一个矩形区域的大小 。

    19、在任何时刻设备环境中必须有一支画笔,并且只能有一支。因此在使用自己定义的画笔时,要使用CDC的函数把默认画笔替换为自己定义的画笔,这个函数是SelectObject() 。

    20、MFC的缺省的映射模式是MM_TEXT,对应的单位为像素。

    21、在视图类中为了访问与视图关联的文档对象中数据,应该先调用GetDocument()       函数得到 相关联文档对象指针 。

    22、利用MFCAppWizard可以生成SDI界面、MDI界面和基于对话框界面的程序。

    23、在框架窗口中,GetActiveDocument()函数可得到当前活动文档指针,      GetActiveView()函数可得到当前活动视指针。

    24.MFC对话框类的基类是CDialog ,用户自定义对话框类都是从它派生而来。

    25.Windows系统是一个消息响应事件驱动的操作系统,消息是应用程序与操作系统交互的手段。

    26.GetMessage( )被用来从消息队列获取消息,

    27.函数TranslateMessage()用来把键盘消息转换为字符消息,函数DispatchMessage( )用来向系统派送消息。


    五、选择填空题(每空1分,共15分)

    1、  B  代表窗口客户区的显示设备上下文,  C  代表整个窗口的显示设备上下文。

    A、CPaintDC    B、CClientDC   C、CWindowDC    D、CMetaFileDC


    2、消息循环的处理过程如下:

       A  函数不断侦察应用程序的消息队列,若队列为空,该函数一直运行,不返回;一旦发现队列不为空,便取出一条消息,把它拷贝到msg结构变量中,同时该函数返回TRUE;得到消息msg后,  B   把来自键盘的命令翻译成WM_XXX消息命令形式。  E   函数通知Windows把每个消息分发给相应的窗口函数。应用程序并不直接调用窗口函数,而由Windows根据消息去调用窗口函数,因此,窗口函数经常被称为回调函数。

    A、GetMessage( )    B、translateMessage()     C、PostMessage( )

    D、SendMessage( )   E、DispatchMessage( )


    3、滚动条类CScrollBar的成员函数规定了滚动条的操作。设置滚动条的范围使用      C     函数,设置滚动块的位置使用   E   函数,获取滚动块的当前位置使用  F   函数。

    A、SetPos     B、SetRange     C、SetScrollRange  D、GetPos

    E、SetScrollPos F、GetScrollPos  G、GetScrollRange

    4、所有的文档类都派生于  C  ,所有的视图类都派生于  A 

    A、CView    B、CWindow   C、CDocument    D、CFormView


    5、    C  包括键盘和鼠标的输入。这一类消息首先放在系统消息队列中,然后由Windows将它们送入应用程序消息队列中,由程序来处理消息;     D   用来与Windows的控制对象,如列表框、按钮、复选框等进行双向通信。当用户在列表框中改动当前选择或改变了复选框的状态时发出此类消息。

    A、系统消息      B、用户消息    C、输入消息     D、控制消息


    6、使用   B     获取的设备上下文在退出时,必须调用ReleaseDC( )释放设备上下文。

      A、GetWindowRect()      B、GetDC()    

    C、BeginPaint()         D、GetClientRect( )


    六.判断题

    1.    所谓的WindowsAPI就是独立于C语言的一套全新的程序设计语言。(× )

    2.    在Windows编程约定中,CHAR数据类型和TCHAR数据类型是相同的。( × )

    3.    匈牙利命名法是所有程序都必须遵循的一个规则,变量的命名必须按照规则进行。( × )

    4.    在Windows编程约定中,代表窗口句柄的数据类型是HWND。( √ )

    5.    在Windows编程中,使用窗口句柄来操作具体的窗口。( √ )

    6.    在Windows的消息结构中,键盘的按键字符信息被保存在lParam中。( × )

    7.    在Windows消息机制中,WM_TIMER消息表示创建了1个定时器。( × )

    8.    所有的Windows程序,其入口函数必须名为WinMain。( × )

    9.    PostMessage和SendMessage的区别在于前者投递消息到队列,而后者直接调用消息响应函数。( √ )

    10.   在Windows编程中,AppendMenu可以在菜单的任意位置插入新的菜单项。( × )

    11.   在Windows编程中,菜单可以在资源视图中设计,一旦载入程序,就不能再被更改。( × )

    12.   在Windows编程中,键盘按键弹起时,会返回消息WM_KEYDOWN。( × )

    13.   在Windows编程中,鼠标消息中不包含任何键盘信息。( × )

    14.   在Windows编程中,1个程序中只允许设置一个定时器。(× )

    15.   画笔颜色构成是0x00BBGGRR,其中B、G、R分别代表1位16进制数表示蓝、绿和红色分量的大小。( √ )

    16.   对于GDI点阵字体和GDI笔划字体,Windows都可以合成粗体、斜体、加底线和加删除线,而不需要为每种属性另外储存字体。( √ )

    17.   FillRect中指定的画刷是用于画矩形本身和边框,FrameRect中指定的画刷是用于画矩形的边框。( × )

    18.   Win32 API可以直接读取所有的图像格式。(× )

    19.打开一个项目,只需打开对应的项目工作区文件。                                             (

    20.基于对话框的应用程序,也有文档类和视图类。                                              (×

    21.所有的Windows应用程序都是消息驱动的。                                                    ( )

    22.COMMAND是更新命令用户接口消息。                                                          (×

    23.删除CPen对象可调用CPen对象的DeleteObject函数。                                 (×

    24.CBrush是GDI对象。                                                                                      ( )

    25.Windows应用程序的入口也是main函数。                                                       (×


    七.简答题

    1.Windows应用程序的主函数有哪三个主要任务

    答注册窗口类、创建应用程序的窗口和建立消息循环。


    2.运行程序后单击鼠标右键弹出对话框提示“您按下了鼠标右键”对话框。简要说明设计步骤。

    参考答案:

    1)新建基于单文档的应用程序;  2)用类向导映射鼠标右键消息;

    3)在消息函数中添加代码:MessageBox(“您按下了鼠标右键”);


    3、.利用AppWizard生成默认的SDI应用程序My时,向导自动生成的哪四个类?及其相应的功能。

    参考答案:

    CMainFrame(构建应用程序,显示窗架)

    CMyApp(整个应用程序)

    CMyDoc(管理数据)

    CMyView(显示数据)


    4.创建窗口的五个步骤:

    参考答案:

    1)定义窗口  2)注册窗口  3)创建窗口 4)显示窗口  5)消息循环


    5.如何显示和更新窗口?

    答:调用函数ShowWindow显示窗口,调用函数UpdateWindows更新窗口。


    6.什么是消息循环?

    答:在创建了窗口的应用程序中,应用程序将不断地从消息队列中获取消息,并将消息指派给指定的窗口处理函数来处理,然后再回来从消息队列获取消息,这个不断重复的工作过程叫做消息循环。


    7.说明Windows应用程序的主函数、窗口函数与Windows系统之间的关系。

    答:Windows应用程序的主函数和窗口函数都是系统调用的函数,主函数是在应用程序启动时由系统首先调用的函数,而窗口函数是主函数在消息循环中获得消息并把消息派送给系统之后,由系统调用的用来处理消息的函数。


    8.文档类的成员函数UpdateAllViews的作用是什么?

    答:通知文档所对应的所有窗口同时进行重绘。


    9.MFC应用程序的界面有哪三种方式?

    答:(1)单文档界面;(2)多文档界面;(3)基于对话框界面。


    10.WinMain()函数的工作。

    WinMain()函数是Windows程序的入口点在WinMain中进行注册窗体类、建立窗体、显示窗体、更新窗体、建立消息循环


    11.非MFC的Windows程序中,在WM_PAINT消息中怎样获得客户区的设备环境句柄。和不是WM_PAINT消息中怎样获得客户区的设备环境句柄。

    BeginPaint----------EndPaint GetDC---------------ReleaseDC(成对出现)

    利用GetDC函数获取设备环境句柄


    12.句柄的含义。

    句柄是一个通常为32位的无符号整数(unsigned int),它代表一个内核对象,是内核对象在应用层的表示。


    13.在MM_TEXT映射模式下,什么情况下客户坐标和逻辑坐标可能不同。

    当窗口客户区有滚动条时客户坐标和逻辑坐标可能不同


    14.GetMessage()函数在什么情况下返回0从而导致消息循环终止程序结束。

    在接收到WM_QUIT消息时返回0


    15.Windows中应用程序的输出是怎样进行的。

    通过设备描述表DC(Device Context)来进行应用程序与物理设备之间的交互


    16.当程序中某个函数改变了数据而需要重新绘制客户区时WM_PAINT不会被自动调用,这时需要怎样间接调用它。

     使用InvalidateRect()调用


    17.键盘消息处理函数OnKeyDown(UINT nChar,UINT nRepCnt,UINTnFlags)中的主要参数。

    参数UINTnChar指按下按键的虚拟键码;nRepCnt 按键按下的次数; nFlags有没有其他键同时被按下;如shift、ctrl、Alt


    18.DC中的SetROP2()的作用。

    设定绘图模式


    19.扩展名为.rc的文件是什么。

    资源文件


    20.GDI绘图函数所使用的参数。

    GDI绘图函数使用的逻辑坐标


    21.当用户按下某个字母键时消息发生的顺序。

    WM_KEYDOWN->TranslateMessage()->WM_CHAR


    22.常用的客户区鼠标消息有哪些

    答WM_LBUTTONDBCLK双击鼠标左键 WM_LBUTTONDOWN 按下鼠标左键WM_LBUTTONUP 释放鼠标左键 WM_MOUSEMOVE 移动鼠标 WM_RBUTTONDBCLK 双击鼠标右键 WM_RBUTTONDOWN 按下鼠标右键 WM_RBUTTONUP 释放鼠标右键


    23.什么样的窗口才能接收键盘消息

    答在Windows中有时会同时打开多个窗口。在这些窗口中只有一个是活动窗口这个窗口一般是屏幕上位置最靠前的窗口它的特征是其标题栏被点亮的而不是灰色的。只有活动窗口才具有输入焦点而Windows中规定只有具有输入焦点的窗口才能接收键盘消息也就是说只有活动窗口才能接收键盘消息。


    24.键盘消息分为哪几类哪些键只产生按键消息不产生字符消息

    答键盘消息可以分成按键消息和字符消息两类。按键消息分为系统按键消息(WM_KEYDOWN,WM_KEYUP)和非系统按键消息WM_SYSKEYDOWN,WM_SYSKEYUP。字符消息也同样分为系统字符消息WM_CHAR,WM_DEADCHAR和非系统字符消息WM_SYSCHAR,WM_SYSDEADCHAR。值得注意的是系统按键消息只能产生系统字符消息非系统按键消息只能产生非系统的字符消息。在Windows中一些键是只产生按键消息而不产生字符消息的这些键包括Shift键、Ctrl键、功能键、光标移动键、特殊字符键。


    25.在程序中如何确定窗口何时具有输入焦点何时失去输入焦点。

    答当应用程序的窗口获得输入焦点时会发出WM_SETFOCUS消息而当窗口失去输入焦点时会发出WM_KILLFOCUS消息。如果一个窗口获得了输入焦点便可以用键盘对这个窗口进行操作。


    26.在 WNDCLASSEX 结构类型中,各个成员所代表的含义是什么?

        WNDCLASSEX 结构类型定义如下:

     typedef struct _WNDCLASSEX 

      {UINT      cbSize; ;//扩展窗口类变量的大小

      UINT      style; ;//窗口类的式样,式样决定窗口的行为,此项把式样告诉Windows

      WNDPROC   lpfnWndProc; ;// 指向依此窗口类所建窗口的窗口函数的指针

      int       cbClsExtra; //附加项

      int       cbWndExtra; //附加项

      HINSTANCE hInstance; // 指向应用程序实例的代号

      HICON     hIcon; // 指向依此窗口类所建窗口中要引入的图标

      HCURSOR   hCursor; // 指向依此窗口类所建窗口中要引入的鼠标光标

      HBRUSH    hbrBackground; // 指向依此窗口类所建窗口的底色

      LPCTSTR   lpszMenuName; // 指向依此窗口类所建窗口相关联的菜单名称

      LPCTSTR   lpszClassName; //窗口类名称

      HICON     hIconSm; // 指向依此窗口类所建窗口压引入的小图标

      }WNDCLASSEX


    27.在 CreateWindowEx()函数中,各成员所代表的含义是什么?

     CreateWindowEx()函数定义如下:

      HWNDCreateWindowEx(DWORD dwExStyle, //窗口的扩展风格

                          LPCTSTR   lpClassName, //指向注册类名的指针

                          LPCTSTR   lpWindowName,//指向窗口名称的指针

                          DWORD     dwStyle,  //窗口风格

                          int       x,     //窗口的水平位置

                          int       y,  //窗口的垂直位置

                          int       nWidth,  //窗口的宽度

                          int       nHeight,   //窗口的高度

                          HWND      hWndParent,  //父窗口的句柄

                          HMENU     hMenu,  //菜单的句柄或子窗口的标识符

                          HINSTANCE hInstance,   //应用程序实例的句柄

                          LPVOID    lpParam);  //指向窗口的创建数据

     

    28.UpdateWindow()函数的功能什么?

     UpdateWindow()函数定义如下:

      BOOLUpdateWindow(HWND hWnd);

          如果窗口更新的区域不为空,UpdateWindow函数通过发送一个WM_PAINT消息来更新指定窗口的客户区。函数绕过应用程序的消息队列,直接发送WM_PAINT消息给指定窗口的窗口过程,如果更新区域为空,则不发送消息。


    29.在 MSG 结构类型中,各个成员所代表的含义是什么?

      MSG 结构类型定义如下:

     typedef struct tagMSG

      {HWND   hwnd;    //消息发向窗口的句柄

       UINT   message;    //消息标识符

       WPARAM wParam;     //32位消息参数,其含义和数值根据消息的不同而不同

       LPARAM lParam;     //32位消息参数,其值与消息无关

       DWORD  time;     //消息进入消息队列的时间

      POINT  pt;     //消息进入消息队列时鼠标的坐标

      } MSG,*PMSG;


    30.DefWindowProc()函数的功能什么?

     DefWindowProc()函数定义如下:

     LRESULT DefWindowProc(HWND hWnd,

                            UINT Msg,

                            WPARAM wParam,

                            LPARAM lParam);

       DefWindowProc这个函数是默认的窗口处理函数,我们可以把不关心的消息都丢给它来处理。这个函数在处理关闭窗口消息WM_CLOSE时,是调用DestroyWindow函数关闭窗口并且发WM_DESTROY消息给应用程序;而它对WM_DESTROY这个消息是不处理的(考虑为什么?);我们在应用程序中对这个消息的处理是发出WM_QUIT消息。因此WM_CLOSE、WM_DESTROY、WM_QUIT这三个消息是先后产生的。


    31. 讲匈牙利命名惯例的约定,还要记住那些习惯用法?

    (1)标识符以一个或者几个小写字母开始,这些小写字母表示标识符的数据类型。

    (2)大小写混杂写,使得标识符具有一定的含义,便于理解,增强可读性

    例如WPARAM和LPARAM 是习惯用法。


    32  消息循环从应用程序消息队列取得窗口消息是怎样送給窗口消息处理程序?

     消息循环以GetMessage()调用开始,它请求Windows从消息队列中取出一个消息来填充消息结构体的各个字段。TranslateMessage() 将msg结构体传给Windows,进行一些键盘转换。DispatchMessage ()  又将msg结构体回传给Windows。然后,Windows将该消息发送给适当的窗口消息处理函数,让它进行处理。这也就是说,Windows将调用窗口消息处理函数。


    33. 主程序WinMain和WndProc是如何联系的?

    wndclass.lpfnWndProc = WndProc ; // 窗口消息处理程序地址

    WinMain是windows程序的入口

    WinProc窗口处理函数是一个回调函数,它是用来处理消息的,是由Windows调用的。

    在注册窗口类的时候指定了窗口处理函数的入口地址,应用程序获得的消息都交给此入口地址对应的窗口处理函数来处理。


    34.解释下面函数申明中的每一个单词

    int WINAPI WinMain(

    HINSTANCE hInstance,   //程序当前运行的实例的句柄

    HINSTANCEhPrevInstance,  //当前实例的前一个实例的句柄

    LPSTR lpCmdLine,   //指定传递给应用程序的命令行参数

    int nShowCmd     //指定程序的窗口应该如何显示

     ) ;


    35. 窗口类结构中常用的有那几个载入函数?它们的用法如何?

    HICON  WINAPI LoadIcon(

                    HINSTANCE hInstance,

                    LPCSTR lpIconName

                    );

     

    HANDLE LoadImage(

      HINSTANCE hinst,   //

      LPCTSTR lpszName,  //

      UINT uType,        //

      int cxDesired,     //

      int cyDesired,     //

      UINT fuLoad        //

    );

     

    HCURSOR LoadCursor(

      HINSTANCE hInstance,  //

      LPCTSTR lpCursorName  //

    );


    36、有哪两种方法获得屏幕的hDC?

    利用GetDC(hWnd)取得窗口hDC.

    处理WM_PAINT消息期间用BeginPaint获得hDC的方法。


    37、BeginPaint和EndPaint在什么情况下使用,为什么要成对出现?

    需要处理WM_PAINT消息进行窗口重绘时使用BeginPaint和EndPaint函数来准备和完成客户区的绘画。BeginPaint返回一个用来绘画的客户区的显示设备内容的HANDLE,EndPaint终止绘画请求,并释放设备内容。


    38、InvalidateRect所决定的重绘区和BeginPaint所决定的重绘区有什么区别? InvalidateRect最后一个参数的作用是什么?

    程序调用BeginPaint时,在大多数情况下,fErase被标志为FALSE(0),这意味着Windows已经擦除了无效矩形的背景。在调用BeginPaint后PAINTSTRUCT结构的fErase条款将成为TRUE(非零)。

    而程序通过调用InvalidateRect函数使客户区中的矩形失效,则该函数的最后一个参数会指示是否擦除背景。如果这个参数为FALSE,则执行InvalidateRect时Windows将不擦除背景,反之,则会擦除背景。

    InvalidateRect最后一个参数的作用是表示是否擦除背景


    39、GetSystemMetrics函数的用处是什么? GetTextMetrics函数的用处是什么?为了存储它们所获得的信息,预先定义一个结构是什么?

    GetSystemMetrics函数用于得到被定义的系统数据或者系统配置信息,GetTextMetrics函数把程序当前的字体信息,存放到TEXTMETRIC中。定义的结构体为typedefstruct tagTEXTMETRIC

    {

        LONG tmHeight ;

        LONG tmAscent ;

        LONG tmDescent ; 

        LONG tmInternalLeading ;

        LONG tmExternalLeading ;

        LONG tmAveCharWidth ;

        LONG tmMaxCharWidth ;

                其他结构条款

    }TEXTMETRIC


    40、什么情况下产生WM_CREATE窗口消息?什么情况下产生WM_PAINT窗口消息?

    产生WM_CREATE窗口消息:执行CreateWindow函数时

    产生WM_PAINT窗口消息:

    执行UpdateWindow函数时

    在使用者移动窗口或显示窗口时,窗口中先前被隐藏的区域重新可见。

    使用者改变窗口的大小(如果窗口类别样式有着CS_HREDRAW和CS_VREDRAW位旗标的设定)。

    程序使用ScrollWindow或ScrollDC函数滚动显示区域的一部分。

    程序使用InvalidateRect或InvalidateRgn函数刻意产生WM_PAINT消息。

    Windows擦除覆盖了部分窗口的对话框或消息框。

    (可能)菜单下拉出来,然后被释放。 (可能)显示工具提示消息。


    41、为什么WM_SIZE窗口消息后必然跟着一个WM_PAINT窗口消息?

    因为我们定义窗口类的时候制定了类风格 CS_HREDRAW|CS_VREDRAW,在窗口发生改变的时候,windows给窗口过程发送一个WM_SIZE消息,然后将重绘应用程序窗口。


    42、如果用户希望立即更新无效区域,可以在调用InvalidateRect之后调用什么函数?

    UpdateWindow

    43.按照产生的按键消息分,按键分成那两类?

    分为系统按键消息和非系统按键消息


    44.按键消息有哪四种形式?系统按键消息有何特点?它在哪里处理?那些不是系统按键消息?

    四种形式:

    WM_KEYDOWN WM_SYSKEYDOWN     WM_KEYUP WM_SYSKEYUP

    特点:系统按键可能是一个按键也可能是几个按键的组合键,系统按键对Windows系统起作用。

    由默认分支DefWindowProc处理系统键盘消息。

    WM_KEYDOWN WM_KEYUP

    45.  数字和字母的虚拟键码是怎样定义的?

    数字、字母的虚拟键码是用ASCII码定义的


    46.  窗口函数中WM_KEYDOWN消息处理分支中的wParam和SendMessage函数第三个参数wParam有什么不同?

    消息处理分支中的wParam它是判断虚拟键盘的。

    而SendMessage中的wParam它是存放鼠标通知码。

    48、鼠标是一种“必须要的选择设备”,如何应用GetSystemMetrics函数确认鼠标是否存在?写出程序代码。

    fMouse = GetSystemMetrics(SM_MOUSEPRESENT);

     

     

    简答题

    1、在文档/视图结构的应用程序中,视图类对象是如何获取文档类对象中数据的

     答: 视图对象调用GetDocument访问文档


    2、假设建立一个工程名为MyPrj的工程,利用MFCAppWizard生成文档/视图结构应用程序框架的4个MFC派生类,简述这四个类名和它们的功能。

    答:

    1、MyPrjView:视图类,负责人机交互,数据的显示。

    2、yPrjDoc:文档类,负责应用程序数据的存储修改管理。

    3、yPrjApp:应用程序类,负责程序的初始化及结束处理。

    4、ainFrame:主窗口类,主要用于主窗口的创建显示以及消息的派发。 


    3、在Windows程序设计中,如何显示和更新窗口?

    答:调用ShowWindow()函数可以显示窗口,刷新窗口可以使用UpdateWindow()函数


    4、试说明以下是什么句柄?

    (1)HWND

    (2)HINSTANCE

    (3)HDC

    答:HWND是窗口句柄

    HINSTANCE是当前程序应用实例句柄

    HDC是设备上下文句柄

    5、Windows应用程序的主要函数有哪3个主要任务?

    答:注册窗口类、创建应用程序的窗口和建立消息循环。

    6、在窗口类CFrameWnd中需要封装哪些成员?

    答:

    数据成员:窗口句柄 HWND hwnd

    成员函数:注册窗口 RegisterWindow()

    创建窗口Create()

    显示窗口 ShowWindow()

    刷新窗口 UpdateWindow()


    7、应用程序类CWinApp应该具备哪些主要功能?

    答:一是调用成员函数InitInstance()来完成窗口的设计注册、创建与显示工作;二是调用成员函数run()来实现消息循环


    8、在MFC中CDC的派生类有哪几个?试说出它们的作用?

    答:CPaintDC类:相当于BeginPaint和EndPaint,主要用于视图类的OnDraw()函数中;

    CclientDC类:相当于GetDC和ReleaseDC,用于除OnDraw()函数之外的任何地方;

    CWindowDC类:相当于GetWindowDC和ReleaseDC,CWindowDC类所封装的设备上下文表示的是整个窗口。

    CMetaFileDC类:负责图元文件的存储读取及绘制。


    9、在CDC中,如何把自己建立的绘图工具载入设备描述环境?

    答:调用SelectObject()函数,参数为绘图工具引用。


    10、如何使用CDC类提供的绘图方法绘图?

    答:调用CDC的成员函数可以进行所有的绘图操作,在构造函数里通过BeginPaint()或GetDC来获取相关的设备上下文,使用完对象后,调用DeleteDC()或ReleaseDC()来释放对象。

     

    11、在MFC中,应用程序的界面有哪3种方式?

    答:单文档界面、多文档界面和基本对话框


    12、分别说明什么是SDI界面的程序和什么是MDI界面的程序?

    答:在SDI界面的程序中,只能打开一个文档,打开其他文档时会自动关闭当前文档,若文档修改后没有保存,关闭时会提示是否保存。

            在MDI界面的程序中,可以打开多个文档,可以通过切换活动窗口激活相应的文档进行编辑。与SDI程序不同的是,它会提供一个关闭菜单项,用于关闭当前打开文档。 


    13、文档类的成员函数UpdateAllViews的作用是什么?

    答:通知文档所对应的所有窗口同时进行重绘。

    14、常用的客户区鼠标消息有哪些?(注意:只考虑鼠标两键情况,即只有鼠标左键和右键)

    答:

    WM_LBUTTONDOWN 在客户区按下鼠标左键

    WM_LBUTTONUP 在客户区释放鼠标左键

    WM_LBUTTONDBCLK 在客户区双击鼠标左键

    WM_RBUTTONDOWN 在客户区按下鼠标右键

    WM_RBUTTONUP 在客户区释放鼠标右键

    WM_RBUTTONDBCLK 在客户区双击鼠标右键

    15、程序运行时,用户选中一个菜单项,会发出啊种消息?根据什么来判断消息源?

    答:WM_COMMAND消息。

    根据菜单项的ID标识来判断消息源。

    15、为什么在Windows应用程序中不直接使用键盘的扫描码而使用与键盘无关的虚拟码,怎样理解Windows中设备无关性这个概念,设备无关性对编写应用程序有什么作用。

    答:1、不同键盘的扫描码可能是不一样的,跟硬件有关,而虚拟码与硬件无关,不同键盘的扫描码对应的虚拟码是一样的。

            2、用户编程时用的是逻辑设备名称,从而使用户和物理设备独立开来。

     

    17、在 MSG 结构类型中,第一个成员所代表的含义是什么?

      MSG 结构类型定义如下:

     typedef struct tagMSG

      {HWND   hwnd; //接收消息的窗口句柄

       UINT   message;

       WPARAM wParam;

       LPARAM lParam;

       DWORD  time;

      POINT  pt;

      } MSG, *PMSG

    18、简述在MFC中使用位图资源的步骤?

    答:

    1、导入位图资源文件;

    2、构建CBitmap类对象

    3、CBitmap类对象调用函数LoadBitmap(位图资源ID)加载图像。

    4、构造设备上下文对象:CDC dc;

    5、创建与pDC指针兼容的设备上下文:dc.CreateCompatibleDC(pDC);

    6、将位图选入设备上下文dc.SelectObject(&bm);

    7、pDC调用成员函数绘图。

     

    19、GetMessage()函数在什么情况下返回0,从而导致消息循环终止程序结束。

    答:在接收到WM_QUIT消息时返回0


    20、在 WNDCLASSEX 结构类型中,各个成员所代表的含义是什么?

        WNDCLASSEX 结构类型定义如下:

     typedef struct _WNDCLASSEX 

      {UINT      cbSize;

      UINT      style;   //用于指定窗口样式,一般设置为0

      WNDPROC   lpfnWndProc; //表示指向窗口函数的指针

      int       cbClsExtra; //表示窗口类附加字节,为该类窗口共享,一般设置为0

      int       cbWndExtra; //表示窗口类字节,一般设为0

      HINSTANCE hInstance; //表示当前应用程序实例句柄

      HICON     hIcon; //用于指定窗口的图标

      HCURSOR   hCursor; //用于指定窗口的光标

      HBRUSH    hbrBackground; //用于指定窗口的背景颜色

      LPCTSTR   lpszMenuName; //用于指定窗口的菜单资源名

      LPCTSTR   lpszClassName; //用于指定窗口类的名称

      HICON     hIconSm;

      }WNDCLASSEX

    21、简述自定义消息的步骤?

    答:1、在头文件中定义消息,如#define WM_MYMSG (WM_USER+100)

    2、在类中声明消息响应函数。如:afx_msg int OnCreate(……)

    3、添加消息映射,在类的CPP文件中添加消息映射

    4、实现消息响应函数


    22、简述模态对话框与非模态对话框的区别?

    答: 1、模态对话框由CDialog::DoModal()函数创建,非模态对话框由CDialog::Create()函数来创建

             2、CDialog::DoModal()函数负责显示其所创建的模态对话框,而非模态对话框需要调用CDialog::ShowWindow()函数来显示对话框

             3、CDialog::DoModal()函数负责销毁其所创建的模态对话框,而非模态对话框必须调用CDialog::DestoryWindow()函数来关闭对话框 

     

    八、程序设计题

    2、为学员信息设计一个类CStudent,包含:学号、姓名、出生日期、家庭住址、班级,并使该类可以实现串行化。请写出可以实现要求的CStudent.h和CStudent.cpp文件的内容

     //CStudent.h

    class CStudent publicCObject  {       

    public:

    CString Num

    CString Name;

    CTime Birth;

    CString Address;

    CString Grade;   

     

              DECLARE_SERIAL(CStudent)

            virtual void Serialize( CArchive &ar );

    };

     

    // CStudent.cpp

    IMPLEMENT_SERIAL(CStudent ,CObject,0)

    voidCStudent:Serialize(CArchive & ar)

    {      CObject::Serialize(ar);

           if ( ar.IsStoring() )

           {      ar<<Num<<Name<<Birth <<Address<<Grade;

           }

           else

           {  ar>>Num>>Name>> Birth >>Address>>Grade;

           }

    }

    3、创建一个记录通讯录内容的新类Caddrlist,包含:姓名、住址、电话、出生日期,并使该类可以实现串行化。请写出可以实现要求的CAddrlist.h和CAddrlist.cpp文件的内容

    //Addrlist.h文件内容:

    classCAddrlist : public CObject  {

    public:

           CString Name;

           CString Address;

           CString Tel;

           CTime Birth;

           CAddrlist();

          

           DECLARE_SERIAL(CAddrlist) 

        virtual void Serialize( CArchive & ar);

    };

     

    // Addrlist.cpp文件内容:

    IMPLEMENT_SERIAL(CAddrlist,CObject,0) 

    voidCAddrlist::Serialize(CArchive & ar)     

    {      CObject::Serialize(ar);

           if ( ar.IsStoring() )

           {      ar<<Name<<Tel<<Address<<Birth;

           }

           else

           {  ar>>Name>>Tel>>Address>>Birth;    1    }

    }

     

    4、为学员信息设计一个类CWorker,包含:编号、姓名、出生日期、家庭住址、手机号,并使该类可以实现串行化。请写出可以实现要求的CWorker.h和CWorker.cpp文件的内容。

    //CWorker.h

    classCWorkerpublic CObject  {      

    public:

    CStringNum//  char Num[10];

    CStringName;

    CTimeBirth;

    CStringAddress;

    CStringTel;                      

     

             DECLARE_SERIAL(CWorker) // 使对象可串行化    

            virtual void Serialize( CArchive &ar ); //重载串行化函数

              CWorker(){。。。。。}

    };

    CWorker.cpp

     

    MPLEMENT_SERIAL(CWorker,CObject,0)  

    void CWorker::Serialize(CArchive &ar)

    {      CObject::Serialize(ar);                       

           if( ar.IsStoring() )                            

           {      ar<<Num<<Name<< Birth<<Address<< Tel;

           }

           else

           {   ar>>Num>>Name>> Birth>>Address>>Tel;  

           }

     

    #include<windows.h>

    #include<stdio.h>

    LRESULTCALLBACK WinSunProc(

      HWND hwnd,      // handle to window

      UINT uMsg,      // message identifier

      WPARAM wParam,  // first message parameter

      LPARAM lParam   // second message parameter

    );

    intWINAPI WinMain(

      HINSTANCE hInstance,      // handle to current instance

      HINSTANCE hPrevInstance,  // handle to previous instance

      LPSTR lpCmdLine,          // command line

      int nCmdShow              // show state

    )

    {     WNDCLASS wndcls;

           wndcls.cbClsExtra=0;

           wndcls.cbWndExtra=0;

           wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);

           wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);

           wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);

           wndcls.hInstance=hInstance;

           wndcls.lpfnWndProc=WinSunProc;

           wndcls.lpszClassName="Computer2009";

           wndcls.lpszMenuName=NULL;

           wndcls.style=CS_HREDRAW | CS_VREDRAW;

           RegisterClass(&wndcls);

           HWND hwnd;

           hwnd=CreateWindow("Computer2009","桂林电子科技大学应用科技学院",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);

           ShowWindow(hwnd,SW_SHOWNORMAL);

           UpdateWindow(hwnd);

           MSG msg;

           while(GetMessage(&msg,NULL,0,0))

           {

                  TranslateMessage(&msg);

                  DispatchMessage(&msg);

           }

           return 0;

    }

    LRESULTCALLBACK WinSunProc(

      HWNDhwnd,      // handle to window

      UINT uMsg,      // message identifier

      WPARAM wParam,  // first message parameter

      LPARAM lParam   // second message parameter

    )

    {     switch(uMsg)

           {

           case WM_CHAR:

                  char szChar[20];

                  sprintf(szChar,"char is%d",wParam);

                  MessageBox(hwnd,szChar,"weixin",0);

                  break;

           case WM_LBUTTONDOWN:

                  MessageBox(hwnd,"mouseclicked","weixin",0);

                  HDC hdc;

                  hdc=GetDC(hwnd);

                  TextOut(hdc,0,50,"Widows程序设计实验",strlen("Widows程序设计实验"));

                  ReleaseDC(hwnd,hdc);

                  break;

           case WM_PAINT:

                  HDC hDC;

                  PAINTSTRUCT ps;

                  hDC=BeginPaint(hwnd,&ps);

                  TextOut(hDC,0,0," 程序设计实验",strlen("程序设计实验"));

                  EndPaint(hwnd,&ps);

                  break;

           case WM_CLOSE:

                  if(IDYES==MessageBox(hwnd,"是否真的结束?","Compuer",MB_YESNO))

                  {

                         DestroyWindow(hwnd);

                  }

                  break;

           case WM_DESTROY:

                  PostQuitMessage(0);

                  break;

           default:

                  returnDefWindowProc(hwnd,uMsg,wParam,lParam);

           }

           return 0;

    }}

    展开全文
  • Windows程序设计基础知识

    千次阅读 2019-07-08 15:55:50
    Win32 API可认为是一个程序库,提供各式各样的与windows系统服务有关的函数。 Win32 API是最底层的服务,可调用Windows的各种服务。 通常所说的SDK编程就是直接调用API函数进行编程。 Win32 API是指编制32位应用...

    Win32 API(Application Programming Interface)

    Win32 API可认为是一个程序库,提供各式各样的与windows系统服务有关的函数。

    Win32 API是最底层的服务,可调用Windows的各种服务。

    通常所说的SDK编程就是直接调用API函数进行编程。

    Win32 API是指编制32位应用程序时用的一组函数、结构、宏定义。在Win32的环境下,任何语言都是建立在Win32 API基础上的。C#等软件API隐藏的较深。

    大多数API位于三个核心的DLL中

    kernel32.dll、user32.dll、GDI32.dll

    采用其开发windows应用程序过于繁琐。

    API&MFC


    1、kernel

    在Win32中库名为KERNEL32.DLL,主要用于产生与操作系统之间的关联。

    程序加载

    上下文选择

    文件输入输出

    内存管理

    例如:GlobalMemoryStatus函数就是包括当前物理内存及虚拟内存的使用信息。

    2、user

    这个类库在Win32中名叫USER32.DLL

    它允许管理全部的用户接口。例如

    窗口

    菜单

    对话框

    图标等。

    例如,DrawIcon函数将在指定的设备关联上“画”出图标或者鼠标。

    3、GDI(Graphical Device Interface)

    它在Win32中的库名为GDI32.dll,它是图形输出库,使用GDI Windows "画"出窗口、菜单以及对话框等;

    它能创建图形输出

    它也能保存图形文件。

    例如,CreateBitmap 函数就能通过指定的长、宽、颜色创建一个位图。

    4、API&MFC

    API:一套用来控制Windows的各个部件(从桌面的外观到为一个新进程分配的内存)的外观和行为的一套预先定义的Windows函数。

    MFC:是对Windows API的封装,是Win API与C++的结合,MFC就是挂在它之上的一个辅助软件开发包。

    MFC的主包含文件为"Afxwin.h"

    API的主包含文件为"windows.h"

    API 函数的调用方法

    1、C++调用过程

    (1)包含要调用函数的声明文件

    windows.h包含其他头文件

    windef.h基本类型定义

    winnt.h支持Unicode的类型定义

    winbase.h内核函数

    winuser.h用户接口函数

    wingdi.h图形设备接口函数

    winsock.h网络编程函数

    (2)连接到指定的库文件

    kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib 

    显式设置 #pragma comment(lib,"WS2_32.lib")

    (3)在API函数前加"::"表示这是一个全局函数,以与C++类的成员函数区分。

    调用API例子(C++)

    #include "stdafx.h"			// 这是VC自动添加的头文件,主要是加快编译速度
    #include <windows.h>		// 包含MessageBox函数声明的头文件
    
    int main(int argc,char *argv[])
    {
    	// 调用API函数MessageBox
    	int nSelect = ::MessageBox(
    	NULL,
    	"Hello,Windows",
    	"Greeting",
    	MB_OKCANCEL);
    	
    	if(nSelect == IDOK)
    		printf("用户选择了“确定"按钮\n");
    	else
    		printf("用户选择了“取消"按钮\n");
    	return 0;
    }

     

    展开全文
  • Windows程序设计 VC++6.0开发环境熟悉

    千次阅读 2016-03-27 18:11:55
    熟悉Visual C++ 6.0开发环境,掌握VC6中建立、维护、运行工程项目的方法,掌握VC6中调试的方法。 熟悉Visual C++ 6.0开发环境,如AppWizard、ClassWizard、工具栏、编译、运行普通的C++应用程序等,并能编写一个简单...

    一、 实验目的

    熟悉Visual C++ 6.0开发环境,掌握VC6中建立、维护、运行工程项目的方法,掌握VC6中调试的方法。

    二、 实验内容

    熟悉Visual C++ 6.0开发环境,如AppWizardClassWizard、工具栏、编译、运行普通的C++应用程序等,并能编写一个简单C++应用程序。熟悉调试过程。

    三、 实验要求

    1、按下图建立一个C++程序,实现菜单选择,可以实现两个整数的加减。 

    要求:

    [1]、建立工程;

    [2]、程序调试通过;

    [3]、菜单和功能用一个类来实现。

    源代码如下:

    #include<iostream>
    #include<process.h>
    #include<stdio.h>
    using namespace std;
    
    class OBJECT
    {
    	public:
    		void Display();
    		void Add();
    		void Sub();
    		void Quit();
    	private:
    		int Num1,Num2;	
    };
    
    void OBJECT::Display()
    {
    	system("cls");<span style="white-space:pre">	</span>//清空屏幕
    	cout<<"*** Calculator ***"<<endl;
    	cout<<" ** [0].quit **"<<endl;
    	cout<<" ** [1].add **"<<endl;
    	cout<<" ** [2].sub **"<<endl;
    	cout<<"choose: ";
    
    }
    void OBJECT::Add()
    {
    	cout<<"Please enter the two operands: ";
    	cin>>Num1>>Num2;
    	cout<<"Num1+Num2= "<<Num1+Num2<<endl;
    } 
    void OBJECT::Sub()
    {
    	cout<<"Please enter the two operands: ";
    	cin>>Num1>>Num2;
    	cout<<"Num1-Num2= "<<Num1-Num2<<endl;
    }
    
    int main()
    {
    	system("COLOR f0");<span style="white-space:pre">	</span>//修改命令行背景色和前景色
    
    	OBJECT	obj;
    	char type;
    	
    	while(1)
    	{
    		obj.Display();
    		cin>>type;
    		
    		switch(type)
    		{
    			case '0': return 0;
    				break;
    			case '1': obj.Add();	
    				break;
    			case '2': obj.Sub();
    				break;
    			default : cout<<"Input Error!"<<endl;
    				break;		
    		}
    		system("pause");
    	}	
    	return 0;
    } 


    VC++6.0中的运行截图:



    一些小窍门

            1)  有时候,你可能在编译的时候,计算机突然非法关机了(可能某人不小心碰了电源或你的内存不稳定等原因)。当你重启机器后打开刚才的项目,重新进行编译,发现VC会崩掉。

    你或许以为你的VC编译器坏了,其实不然(你试试编译其它项目,还是好的!),你只要将项目的.ncb.opt.aps.clw文件以及DebugRelease目录下的所有文件都删掉,然后重新编译就行了。

            2) 如果你想与别人共享你的源代码项目,但是把整个项目做拷贝又太大。你完全可以删掉以下文件:.dsw.ncb.opt.aps.clw. plg文件以及DebugRelease目录下的所有文件。

            3) 当你的Workspace中包含多个Project的时候,你可能不能直观地、一眼看出来哪个是当前项目。可以如下设置:Tools->Options->Format,然后在Category中选择Workspace window

    改变其默认的字体(比如设成Fixedsys)就行了。

            4) 如何给已有的Project改名字?将该Project关掉。然后以文本格式打开.dsp文件,替换原来的Project名字即可。

           5) VC6对类成员的智能提示功能很有用,但有时候会失灵。你可以先关掉项目,将.clw.ncb删掉,然后重新打开项目,点击菜单项View->ClassWizard,在弹出的对话框中按一下“Add All”按钮;重新Rebuild All。应该可以解决问题。

     

    注:修改命令行背景色和前景色的方法,参见博客:   http://blog.csdn.net/rl529014/article/details/50973199

    展开全文
  • 实验9 windows程序设计

    千次阅读 2013-05-19 22:24:18
    掌握MFC消息映射和命令传递内部机制和学会使用消息映射处理方法的使用;掌握MFC应用程序框架中各种文件的组成和功能用法;对话框和控件的综合应用。 2. 实验内容: (1)编写一个简单绘图程序MyDraw,要求实现下列...
  • Windows程序设计_Chap03_窗口与消息_学习笔记 ――By: Neicole(2013.06.07) 01. 开篇    《Windows程序设计》的第3章,讲述了在Windows编程中很基础同时也是很重要的内容,第一个是Windows窗口是什么,...
  • 最近在学习windows程序设计的创建窗口这方面的知识,有一些收获,现在将我所学到的内容记录下来,供大家参考。 本例将做一个类似txt文档窗口,可以对用户的键盘输入打印到该窗口上,并且有菜单栏可以单击菜单栏中的...
  • Windows程序设计-文本输出

    千次阅读 2016-07-30 22:21:35
    大多数Windows程序在WinMain中进入消息循环之前的初始化期间都要调用函数UpdataWindow。Windows利用这一机会给窗口过程发送第一个WM_PAINT消息。  1.窗口过程会接收到一个WM_PAINT消息的事件: 用户移动窗口...
  •  Windows1.0到3.0中使用分段内存模式,在分段内存模式下,内存地址分为两部分—— 一个16位段指针和一个16为偏移指针。其中带来了long或far指针(包括段地址和偏移量地址)和short或near指针
  • Windows程序设计--文本输出(一)

    万次阅读 2015-10-21 23:10:45
    之前就写过,windows是一个消息驱动的系统,有两种方式把各种事件通知给应用程序:1是把消息放在应用程序的消息队列中;2是向适当的窗口过程直接发送消息。 这里主要讨论的是WM_PAINT消息 ,以下任何一个事件发送,...
  • c#windows窗体程序设计

    万次阅读 多人点赞 2013-04-12 12:08:47
    一:windows窗体程序设计 (1)窗体创建的几种方式 using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; namespace WindowsFormsApplication1 { static ...
  •  本书《Windows程序设计第6版》是一本编写Windows8应用的入门书籍。在写这本电子书的时候(2012.8.1)Windows8还没有完成,这本实体书也并没有完成。你现在看到的电子书书是一个实体书的预览版本。本书基于2012年5月...
  • Windows窗体应用程序设计小一

    千次阅读 2019-01-07 23:50:06
    一,windows 窗体应用程序是由控件组成的,控件是可以重复使用的类或组件 MessageBoxButtons枚举值及其说明 成员名称 说明 MessageBoxButtons.AbortRetryIgore 消息框包含“终止”,“重试”,...
  • 共两个代码,借鉴了《Windows程序设计(第五版)》P34页代码 第一步在项目中添加两个代码,LogUtil.cpp 和 LogUtil.h LogUtil.cpp 如下 #include &lt;windows.h&gt; #include &lt;tchar.h&gt; #...
  • Windows应用程序设计的特点

    千次阅读 2007-10-15 16:45:00
    Windows应用程序设计的特点 一、事件驱动的程序设计 1/传统的MS-DOS程序主要采用顺序的、关联的、过程驱动的程序设计方法。一个程序是一系列预先定义好的操作序列的组合,它具有一定的开头、中间过程和结束。程序...
  • windows程序提权方法

    万次阅读 2015-02-04 12:03:06
    Windows下应用程序如果需要做一些系统管理或进程管理之类的工作,经常需要将本进程提权(获取权限令牌); 而通常windows下提权方法有两种,主要的方法是: 1)win32API——AdjustTokenPrivileges; 2)ntdll.dll...
  • windows程序设计(6):基本画图

    千次阅读 2012-05-17 16:01:57
    windows程序画图,大体上有3种方法: (1)你告诉系统点的坐标和颜色,系统通过SetPixel来画。类似的,通过GetPixel来获取某一点像素值。 (2)使用MoveToEx、LineTo来划线,MoveToEx设置起点坐标,LineTo设置终点...
  • 以下内容来自大名鼎鼎的《Windows程序设计(第五版)》 大多数Windows程序在WinMain中进入消息循环之前的初始化期间都要呼叫函数UpdateWindow。Windows利用这个机会给窗口消息处理程序发送第一个WM_PAINT消息。这个...
  • 关于windows程序设计的心得体会

    千次阅读 2002-04-23 09:21:00
    Windows程序设计心得体会////////////////////////////////////小序: 大家好,我叫竹本陈,“竹本”就是“笨”的意思,我的女朋友经常这样叫我,久而久之也就真的笨了(嘿嘿...
  • 不用Windows自带的画椭圆函数画椭圆方法参考 代码如下: //画一个椭圆中点算法 void CGraphicsView::midleEllipse(int xCenter, int yCenter, int Rx, int Ry, HDC dc) { int Rx2 = Rx*Rx; int Ry2 = Ry*Ry; int...
  • 学习本书的方法  在写这本书的时候,我曾经对读者们做出很多设想。我假设你们C#比较熟练。如果没有,你可能要恶补一下C#的基础知识。如果你是从C或是C++转到C#的,推荐你看看我的免费的电子书《.NET Book Zero》:C...
  • c# Windows窗体应用程序设计(四)

    千次阅读 2020-04-21 10:52:17
    c# Windows窗体应用程序设计(四) 上次介绍的简单应用其中第二个窗体运行结果如下: 我相信肯定有比我做得更好的小伙伴,关于上次第二个窗体设计有疑问的可以在下方留言,欢迎讨论。 今天来介绍两个简单应用,树...
  • Windows 2000内核模式驱动程序设计

    千次阅读 2007-07-04 09:27:00
    Windows 2000中,微软公司在Windows NT4.0的驱动程序结构基础上,同时引入了Windows9X的即插即入特性,推出了新的驱动程序结构模式(WDM)。WDM通过提供一种灵活的方式来简化驱动程序的开发,在实现对新硬件支持...
  • 本来想自己写点心得呢,不过不小心发现这个帖子,还是这么来吧 <br />【热布克hbk】超经典(转):Windows编程书评 “前言”  大约八、九年前我开始学习程序设计时,编程方面的书籍十分缺乏,...
  • 一、HELLOWIN程序 建立一个视窗首先...处理视窗消息对每个Windows程序都带来了些负担。源代码如下:HELLOWIN.C/*------------------------------------------------------------------------ HELLOWIN.C -- Display
  • Windows程序执行过程是应用程序与操作系统相互通信对话的过程,和消息事件密切相关。 何谓动态链接?何谓静态链接?动态链接库文件的后缀是什么? 动态链接:建立动态链接库让相同的部分只要一个备份...
  • 安装好后再安装程序开发人员的字典MSDN,VS2013的MSDN和经典的VC++6.0的安装方法略有不同,这里提供一种在线的安装方法 ①打开vs2013后,点击“帮助”菜单栏->"添加和移除帮助内容",来到如何所示的界面 ②在需要...
  • Windows Sockets程序设计 3.1 Windows Sockets简介3.1.1 什么是Windows Sockets Sockets最初只是UNIX系统中最流行的网络通信接口之一,它不支持微机DOS环境和Microsoft Windows环境。Sockets在UNIX中成功的应用...
  • 《MFC windows程序设计(第二版)》是一本介绍使用MFC(而不是win32 API),进行32位Windows应用程序设计的经典书籍。作者Jeff Prosise,被誉为MFC领域的Petzold。作者在前言中写道:“我的目标就是为C++程序员写出...
  • Windows程序设计(3):程序启动器(CreateProcess) 再说一遍需求:写一个程序A,去启动一个指定的程序B,设置它的窗口大小并把它放到指定位置。 既然CreateProcess指定的程序启动参数,对于GUI程序...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 381,079
精华内容 152,431
关键字:

windows的程序设计方法