荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Second (石开), 信区: Program
标  题: 1.3 利用Visual C++/MFC开发Windows程序的优势
发信站: 荔园晨风BBS站 (Wed May 30 00:50:56 2001), 转信

1.3 利用Visual C++/MFC开发Windows程序的优势
MFC借助C++的优势为Windows开发开辟了一片新天地,同时也借助ApplicationWizzard使
开发者摆脱离了那些每次都必写基本代码,借助ClassWizard和消息映射使开发者摆脱了
定义消息处理时那种混乱和冗长的代码段。更令人兴奋的是利用C++的封装功能使开发者
摆脱Windows中各种句柄的困扰,只需要面对C++中的对象,这样一来使开发更接近开发
语言而远离系统。(但我个人认为了解系统原理对开发很有帮助)
正因为MFC是建立在C++的基础上,所以我强调C/C++语言基础对开发的重要性。利用C++
的封装性开发者可以更容易理解和操作各种窗口对象;利用C++的派生性开发者可以减少
开发自定义窗口的时间和创造出可重用的代码;利用虚拟性可以在必要时更好的控制窗
口的活动。而且C++本身所具备的超越C语言的特性都可以使开发者编写出更易用,更灵
活的代码。

在MFC中对消息的处理利用了消息映射的方法,该方法的基础是宏定义实现,通过宏定义
将消息分派到不同的成员函数进行处理。下面简单讲述一下这种方法的实现方法:
代码如下
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
 ON_WM_CREATE()
//}}AFX_MSG_MAP
 ON_COMMAND(ID_FONT_DROPDOWN, DoNothing)
END_MESSAGE_MAP()

经过编译后,代码被替换为如下形式(这只是作讲解,实际情况比这复杂得多):
//BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
CMainFrame::newWndProc(...)
{
 switch(...)
 {
  //{{AFX_MSG_MAP(CMainFrame)
  // ON_WM_CREATE()
  case(WM_CREATE):
   OnCreate(...);
  break;
  //}}AFX_MSG_MAP
  // ON_COMMAND(ID_FONT_DROPDOWN, DoNothing)
  case(WM_COMMAND):
   if(HIWORD(wP)==ID_FONT_DROPDOWN)
   {
    DoNothing(...);
   }
  break;
 //END_MESSAGE_MAP()
 }
}
newWndProc就是窗口过程只要是该类的实例生成的窗口都使用该窗口过程。
所以了解了Windows的消息机制在加上对消息映射的理解就很容易了解MFC开发的基本思
路了。

--
                            既然热爱生命
                            那么,
                            一切都在意料之中。

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.28.190]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店