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

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;

}}

你可能感兴趣的:(总结,mfc,知识点,复习题,windows程序设计)