浅谈Windows程序设计
2016-10-24广东东软学院高群霞
广东东软学院 高群霞
浅谈Windows程序设计
广东东软学院高群霞
Windows编程是开发Windows软件、一些桌面应用及游戏的坚实基础,其以友好的图形用户界面和多任务特点备受程序员热爱。文章概述了Windows程序设计的特点和运行机制,介绍了Windows程序开发的两种主流方法——Win32 API应用程序和MFC应用程序的框架和实现方法,论述了两种方法的特点和应用范围。
Windows编程;Win32;API接口;MFC框架
0 引言
Windows编程是开发Windows软件、一些桌面应用及游戏的基础,相比传统的Dos系统,Windows系统以图形化界面和多线程等优点备受软件开发者们热爱。
本文先阐述了Windows程序设计的一些概念,介绍了Windows程序的运行机制和实现方法,然后介绍了Win32 API(Application Programming Interface)编程方法和MFC(Microsoft Foundation Classes)编程方法,最后并比较了两种Windows编程方法的特点和应用范围。
1 windows程序设计概述
Windows编程是一种基于图形用户界面的多任务、多线程编程技术,其实现主要有两种方法:传统的Win32 API应用程序方法和交互式的MFC应用程序设计方法[1]。
Windows程序是基于消息的事件驱动程序,重点是编写事件和消息的处理程序[2]。Windows程序的运行机制如图1所示。程序开始执行时,先定义并初始化一些全局变量,然后进入入口函数WinMain(),在WinMain函数里完成窗口类的定义和注册、创建和显示窗口,并生成消息循环,等待消息队列传来消息。当有消息传来时,先检测是否为退出消息,如果是,则退出循环,结束程序,如果不是,则判断消息类型,调用相应的窗口处理函数WndProc()进行处理,处理完后又回到循环,继续检测消息。
图1 Windows程序运行机制
2 Win32 API应用程序设计
2.1API接口简介
API是Windows操作系统和Windows应用程序之间的标准接口[3]。Win32应用程序采用API接口函数来编写,是一种基于底层的开发模式。
Win32 API程序设计的一般方法是先利用VC++中的Win32应用程序向导生成一个简单的应用程序框架,然后对框架程序中的窗口函数进行修改,并根据需要添加一些头文件、源程序文件及资源文件。
2.2Win32应用程序框架结构
一个典型的Win32应用程序一般由头文件(后缀名为.h)、源文件(后缀名为.c或.cpp)和资源文件(后缀名为.rc)组成。一般一个项目有一个资源文件,资源文件被创建后会自动生成与之对应的头文件Reseouce.h,并预定义每个控件的值。用户可以在资源视图中创建自己想要的资源,如对话框、图标、菜单等,创建好后会自动生成后缀名为.rc的资源文件和Reseouce.h头文件。
同Windows程序的基本结构一样,Win32应用程序一般由入口函数WinMain()和消息响应函数WinProc()两大部分组成。其中,WinMain()函数是程序的入口函数,实现的功能有:设计窗口类、注册窗口类、创建窗口、显示及更新窗口、创建消息循环。WndProc()函数是消息响应函数,负责对接收到的窗口消息进行处理,WndProc()函数一般有一个或多个Switch语句组成,每条case语句对应一种消息处理。
3 MFC应用程序设计
3.1MFC简介
MFC以C++类的形式对API函数进行了封装,并且包含一个应用程序框架,简化了Windows程序设计的难度,减少开发人员的工作量[4]。MFC项目的开发过程一般可分为:创建工程、可视化设计(添加资源和设计图形用户界面)、编写程序代码(添加消息响应函数,编写实现算法)。
MFC应用程序执行过程如图2所示,通过WinMain函数进入AfxWinMain函数,然后初始化线程,调用InitInstance初始化窗口,调用Run函数进入消息循环,等待消息传来。若有消息传来,先判断是否为退出消息,如果是退出消息,则结束进程,如果不是,则分配到对应的消息处理函数处理,处理完后返回循环继续检测消息。
图2 MFC应用程序执行过程
3.2MFC应用程序框架结构
利用MFC向导创建一个基于单文档视图的MFC标准应用程序,程序包含头文件、源文件和资源文件,可通过解决方案管理器查看项目文档结构,通过资源视图查看和编辑资源,通过类视图查看类。
一个最基本的单文档视图的MFC程序,包含C**App(应用类)、C**Doc(文档类)、CMainFrame(主框架类)、和CAboutDlg(关于对话框类)五个类。每个类都对应头文件(**.h文件)和源文件(**.cpp文件)两个文件,头文件中定义了类的各种变量、函数原形,源文件中完成类的实现。
(1)C**App应用类派生于MFC的CWinApp类,作用是初始化应用程序及运行该程序的所需的成员函数。该类中封装了程序的主入口WinMain()函数,WinMain函数调用CWinApp的InitInstrance函数,在这里一个CMainFrame的对象被创建,文档模板被创建,主窗口通过ShowWindow(SW_SHOW)被显示出来。
(2)CMainFrame框架类派生于MFC的CFrameWnd类,负责管理应用程序的菜单、工具栏、状态栏等,同时处理针对窗口操作的信息。该类中包含PreCreateWindow()和OnCreate()两个函数,m_ wndStatusBar(管理状态栏)和m_wndToolBar(管理工具栏)两个对象。
(3)C**Doc文档类派生于MFC的CDocument类,作用是存放应用程序的数据以及文件的保存加载功能。该类中包含三个函数:OnNewDocument()(用于初始化文档)、Serialize()(串行化函数,用于保存和装入文档)、Dump()(用于调试和诊断)。文档类需通过视图类来实现与用户的交互。
(4)C**View视图类派生于MFC的CView类,负责管理视图窗口,实现用户数据的显示和打印。该类中OnDraw()函数可实现视图数据的显示和刷新。
(5)CAboutDlg关于对话框类定义了ABOUT对话框。前四个都是在程序主窗口出现之前被创建的,CAboutDlg是在“关于”对话框弹出时被创建的。
资源文件中包含项目中会使用到的所有资源,其中**.rc文件是可以直接在 VC++ 中进行编辑的所有资源的列表。**.rc2文件包含不在VC++中进行编辑的资源,一般将不可由资源编辑器编辑的所有资源放在此文件中。**.ico文件这是应用程序中使用到的图标文件。**.Bmp文件是项目中使用到的位图文件。用户可根据需要,在创建好的框架中添加自己的对话框和相应的消息处理函数。
4 结语
Windows编程可以极大地方便程序开发用户界面的工作,并使程序的结构合理、模块化程序高。Win32 API和MFC编程方法是Windows程序设计的两种方法。Win32 API直接调用Windows系统函数,是一种基于底层的编程方式,编程得到的代码干净、效率高、扩展性强,是其它所有方式实现的基础。MFC是对win32的封装,同时还供了建立Windows应用程序的框架结构,简化了Windows程序设计的难度,是一种交互式开发方法。由于是封装,所以MFC不可能完全实现Win32所有功能,在个性、特殊化方面还有差距。
两者相比,win32更本质,MFC更抽像。实际编程中,应根据具体情况和任务恰当选择实现方法,有助于提高效率。
[1]Jeffrey Richter(美).黄陇,李虎译.Windows核心编程[M].机械工业出版社,2008,5.
[2]Charles Petzold(美).方敏,张胜梁,路平等译.Windows程序设计[M].清华大学出版社,2010,9.
[3]范文庆,周彬彬,安靖.精通Windows API:函数、接口、编程实例[M].人民邮电出版社,2009,2.
[4]车忠志,孙雪雁.MFC应用程序基本框架分析[J].农业网络信息,2010,9.
高群霞(1987—),四川成都人,硕士,讲师,主要研究方向:计算机科学与技术,网站开发。