和菜单。应用程序通常通过一段称为事件循环的的代码来响应用户的操作。用户可以使用鼠标或键盘来任意操作屏幕上的对象。例如,用户用鼠标单击一个按钮。用鼠标单击就称为一个事件。事件驱动系统把用户的动作如鼠标单击和键盘操作定义为事件,也把系统操作如更新屏幕定义为事件。 在比较低级的编程(www.cppentry.com)方法中,如用C直接编写Windows API应用程序,代码量是非常大的,因为你所要照顾的细节太多了。例如,你用某种类型的结构来接收单击鼠标事件。你的事件循环中的代码会查看结构中不同域,以确定哪个用户界面对象受到了影响,然后会完成相应的操作。当屏幕上有很多对象时,应用程序会变得很大。只是简单地处理哪个对象被单击和对它需要做些什么要花费大量的代码。 幸运的是,你可以在比较高级的方法来进行编程(www.cppentry.com),这就是使用MFC。在MFC中,几乎所有的低级的细节处理都为你代办了。如果你把某一用户界面对象放在屏幕上,你只需要两行代码来建立它。如果用户单击一个按钮,则按钮自己会完成一切必要的操作,从更新屏幕上的外观到调用你程序中的预处理函数。该函数包含有对该按钮作出相应操作的代码。MFC 为你处理所有的细节:你建立按钮并告知它特定的处理函数,则当它被按下时,它就会调用相应的函数。第四部分介绍了怎样使用消息映射来处理事件。 例子 理解一个典型的 MFC 程序的结构和样式的最好方法是输入一段小程序,然后编译和运行它。下面的程序是一段简单的“hello world”程序。这对很多C程序员都是很熟悉了,让我们看一下如何用MFC方法来实现。如果你是第一次看到这类程序,也许比较难理解。这没关系,我们后面会详细介绍。现在你只要用Visual C++(www.cppentry.com) 环境中建立、编译和运行它就可以了。 //hello.cpp #include // 说明应用程序类 class CHelloApp : public CWinApp { public: virtual BOOL InitInstance(); }; // 建立应用程序类的实例 CHelloApp HelloApp; // 说明主窗口类 class CHelloWindow : public CFrameWnd { CStatic* cs; public: CHelloWindow(); }; // 每当应用程序首次执行时都要调用的初始化函数 BOOL CHelloApp::InitInstance() { m_pMainWnd = new CHelloWindow(); m_pMainWnd->ShowWindow(m_nCmdShow); m_pMainWnd->UpdateWindow(); return TRUE; } // 窗口类的构造函数 CHelloWindow::CHelloWindow() { // 建立窗口本身 Create(NULL, "Hello World!", WS_OVERLAPPEDWINDOW, CRect(0,0,200,200)); // 建立静态标签 cs = new CStatic(); cs->Create("hello world", WS_CHILD|WS_VISIBLE|SS_CENTER, CRect(50,80,150,150), this); } 上面的这段程序如果用C来实现,得需要几页的代码。这个简单的例子做了三件事。第一,它建立了一个应用程序对象。你所编写的每个 MFC 程序都有一个单一的程序对象,它是处理 MFC 和 Windows 的初始细节的。第二,应用程序建立了一个窗口来作为应用程序的主窗口。最后,在应用程序的窗口中建立了一个静态文本标签,它包含有“hello world”几个字。在第二部分中我们会仔细研究这段程序,以理解其结构。 启动 VC++(www.cppentry.com),如果你是刚刚安装好,则你会在屏幕上看到一个带有工具栏的空窗口。如果 VC++(www.cppentry.com) 已经在该机器上使用过了,则所显示的窗口可能有些不同,因为 VC++(www.cppentry.com) 会记忆和自动重新打开上次使用后退出时的项目和文件。我们需要的是它没有装如任何项目和代码。如果程序启动后弹出对话框指示不能打开某些文件,你只要单击“No”即可。在“Window”菜单中选取“Close All”选项关闭所有窗口。在“File”菜单中选取“Close”选项来关闭其它窗口。现在,你就处于开始状态了。如果你安装VC++(www.cppentry.com)后,第一次运行,则屏幕应如下所示: 如果你以后不希望看到“InfoViewer Topic”窗口,你可以用按钮把它关掉。如果以后需要的话,你还可以单击工具栏上的“主页”按钮来打开该窗口。 现在一切都正常了。正如你所看到的,顶部是菜单和几个工具栏。左边的窗口所显示的是在线帮助内容,你可以双击某项标题来浏览其内容。在线帮助的内容是十分丰富的。 现在该做什么了?你所要做的是输入上面的程序,然后便宜并运行它。开始之前,要检查以下你的硬盘上至少要留有5MB的剩余空间。 建立项目和编译代码 为了在 Visual C++(www.cppentry.com) 中编译代码,你必须要建立一个项目。为了这么小的程序来建立一个项目可能有点小题大作,但是,在任何实际的程序中,项目的概念是非常有用的。一个项目主要保存着下面三种不同类型的信息: 它可以记住建立一个可执行程序所需要的所有源程序代码文件。在这个简单的例子中,文件 HELLO.CPP 是唯一的源文件,但是在一个大型的应用程序中,为了便于管理和维护,你可以会有许多个不同的源文件。项目会维护这些不同文件的列表,并当你要建立下一个新的可执行程序时,在必要时编译它们。 它会记住针对你的应用程序所使用的编译器和连接器选项。例如,它会记住把哪个库连接到了执行程序中,你是否预编译了头文件等等。 它会记住你想要建立的项目类型: 一个控制台应用程序,或一个窗口应用程序等等。 如果你已经对项目文件有所了解,则会很容易明白作为机器产生的项目文件的作用。现在,我们来建立一个简单的项目,并用它来编译 HELLO.CPP。 为此,首先从“File”菜单中选择“New”选项。在“Projects”标签中,加单击“Win32 Application”。在“Location”域中输入一个合适的路径名或单击“Browse”按钮来选择一个。在“Project name”中输入“hello”作为项目名称。这时候你会看到“hello”也会出现在“Location”域中。单击“OK”按钮。Visual C++(www.cppentry.com) 会建立一个新的称为HELLO的目录,并把所有的项目文件 HELLO.OPT、HELLO.NCB、HELLO.DSP 和 HELLO.DSW 都放到该目录中。如果你退出,以后再重新打开该项目,则可选择 HELLO.DSW。 现在,在屏幕的左边,出现了三个标签。InfoView 标签仍然在,又新出现了 ClassView 和 FileView 标签。ClassView 标签会把你程序中所有的类都列出来,FileView 标签给出了项目中文件的列表。 现在可以输入程序的代码了。在“File”菜单中选择“New”选项来建立一个编辑窗口。在出现的对话框中,选择“Files”标签和“Text File”。则会出现 Visual C++(www.cppentry.com) 的智能编辑器,你可以用它来输入上面的程序代码。输入代码时,你会发现编辑器会自动把不同类型的文本变成不同的颜色,如注释、关键字字符串等的颜色都不同。如果你要改变其颜色或关闭颜色功能,可选择“T |