幕定义为事件。 在比较低级的编程方法中,如用 C 直接编写 Windows API 应用程序,代码量是非
常大 的,因为你所要照顾的细节太多了。例如,你用某种类型的结构来接收单击鼠标事件。你的 事件循环中的代码会查看结构中不同域, 以确定哪个用户界面对象受到了影响, 然后会完成 相应的操作。当屏幕上有很多对象时,应用程序会变得很大。只是简单地处理哪个对象被单 击和对它需要做些什么要花费大量的代码。 幸运的是,你可以在比较高级的方法来进行编程,这就是使用 MFC。在 MFC 中,几乎 所有的低级的细节处理都为你代办了。 如果你把某一用户界面对象放在屏幕上, 你只需要两 行代码来建立它。如果用户单击一个按钮,则按钮自己会完成一切必要的操作,从更新屏幕 上的外观到调用你程序中的预处理函数。 该函数包含有对该按钮作出相应操作的代码。 MFC 为你处理所有的细节:你建立按钮并告知它特定的处理函数,则当它被按下时,它就会调用 相应的函数。第四部分介绍了怎样使用消息映射来处理事件。
例子
理解一个典型的 MFC 程序的结构和样式的最好方法是输入一段小程序,然后编译和 运行它。下面的程序是一段简单的“hello world”程序。这对很多 C 程序员都是很熟悉了, 让我们看一下如何用 MFC 方法来实现。如果你是第一次看到这类程序,也许比较难理解。 这没关系,我们后面会详细介绍。现在你只要用 Visual C++ 环境中建立、编译和运行它就 可以了。 //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++,如果你是刚刚安装好,则你会在屏幕上看到一个带有
工具栏的空窗口。如 果 VC++ 已经在该机器上使用过了, 则所显示的窗口可能有些不同, 因为 VC++ 会记忆和 自动重新打开上次使用后退出时的项目和文件。我们需要的是它没有装如任何项目和代码。
如果程序启动后弹出对话框指示不能打开某些文件,你只要单击“No”即可。在“Window” 菜单中选取“Close All”选项关闭所有窗口。在“File”菜单中选取“Close”选项来关闭其 它窗口。现在,你就处于开始状态了。如果你安装 VC++后,第一次运行,则屏幕应如下所 示:
如果你以后不希望看到“InfoViewer Topic”窗口,你可以用按钮把它关掉。如果以后需 要的话,你还可以单击工具栏上的“主页”按钮来打开该窗口。 现在一切都正常了。正如你所看到的,顶部是菜单和几个工具栏。左边的窗口所显示的 是在线帮助内容,你可以双击某项标题来浏览其内容。在线帮助的内容是十分丰富的。 现在该做什