WEB开发网
开发学院软件开发VC VC初学者入门系列之二:消息循环 阅读

VC初学者入门系列之二:消息循环

 2006-07-20 11:38:19 来源:WEB开发网   
核心提示: 下面我们举个例子:CMyWnd : public CWnd{ …… DECLARE_MESSAGE_MAP()}BEGIN_MESSAGE_MAP(CMyWnd,CWnd) ON_WM_CREATE() ON_WM_PAINT()END_MESSAGE_MAP(

下面我们举个例子:

CMyWnd : public CWnd
{
  ……
  DECLARE_MESSAGE_MAP()
}
BEGIN_MESSAGE_MAP(CMyWnd,CWnd)
   ON_WM_CREATE()
   ON_WM_PAINT()
END_MESSAGE_MAP()

被展开后,代码如下:

CMyWnd:public CWnd
{
  ……
private:
  static const AFX_MSGMAP_ENTRY _messageEntries[];
protected:
  static AFX_DATA const AFX_MSGMAP messageMap;
  virtual const AFX_MSGMAP* GetMessageMap() const;
}
const AFX_MSGMAP* CMyWnd::GetMessageMap() const
{ return &CMyWnd::messageMap;}
AFX_DATADEF const AFX_MSGMAP CMyWnd::messageMap=
{&CWnd::messageMap, &CMyWnd::_messageEntries[0]};
const AFX_MSGMAP_ENTRY CMyWnd::_messageEntries[]=
{
{WM_CREATE,0,0,0,AfxSig_is,
(AFX_PMSG)(AFX_PMSGW)(int(AFX_MSG_CALL CWnd::*)(LPCREATESTRUCT))OnCreate},
{WM_PAINT,0,0,0,AfxSig_vv,
(AFX_PMSG)(AFX_PMSGW)(void (AFX_MSG_CALL CWnd::*)(void))OnPaint},
{0,0,0,0,AfxSig_end,(AFX_PMSG)0}
};

这样 WM_CREATE,WM_PAINT 在消息网中流动,当流到CMyWnd类的 messageMap 结构时,发现有该消息的记录,则调用记录中记载的 OnCreate 和 OnPaint 函数,进行响应消息,从而完成了 Windows 消息驱动机制。 

四、MFC消息的起点

我们已经建立了一张消息流动网络,但是消息是怎样从产生到响应函数收到该消息,而且标准消息需要直流,命令消息还有许多拐弯(在标题二中可以看到)。不要紧张,我们只需要看看MFC是怎样实现的。

上一页  1 2 3 4 5 6  下一页

Tags:VC 初学者 入门

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接