WEB开发网
开发学院软件开发VC MFC程序员的WTL指南(3)WTL 界面基类 阅读

MFC程序员的WTL指南(3)WTL 界面基类

 2006-07-22 22:03:45 来源:WEB开发网   
核心提示: 为了能够停止定时器我们还需要响应WM_DESTROY消息,添加消息响应的过程和前面一样,MFC程序员的WTL指南(3)WTL 界面基类(5),MSG_WM_DESTROY宏的定义是这样的:#define MSG_WM_DESTROY(func) \if (uMsg == WM_DESTRO

为了能够停止定时器我们还需要响应WM_DESTROY消息,添加消息响应的过程和前面一样,MSG_WM_DESTROY宏的定义是这样的:

#define MSG_WM_DESTROY(func) \
  if (uMsg == WM_DESTROY) \
  { \
    SetMsgHandled(TRUE); \
    func(); \
    lResult = 0; \
    if(IsMsgHandled()) \
      return TRUE; \
  }

OnDestroy()函数没有参数也没有返回值,CFrameWindowImpl也要处理WM_DESTROY消息,所以还要调用SetMsgHandled(false):

class CMyWindow : public CFrameWindowImpl<CMyWindow>
{
public:
  BEGIN_MSG_MAP_EX(CMyWindow)
    MSG_WM_CREATE(OnCreate)
    MSG_WM_DESTROY(OnDestroy)
    CHAIN_MSG_MAP(CFrameWindowImpl<CMyWindow>)
  END_MSG_MAP()
  void OnDestroy()
  {
    KillTimer(1);
    SetMsgHandled(false);
  }
};

接下来是响应WM_TIMER消息的处理函数,它每秒钟被调用一次。你应该知道怎样使用F12键的窍门了,所以我直接给出响应函数的代码:

class CMyWindow : public CFrameWindowImpl<CMyWindow>
{
public:
  BEGIN_MSG_MAP_EX(CMyWindow)
    MSG_WM_CREATE(OnCreate)
    MSG_WM_DESTROY(OnDestroy)
    MSG_WM_TIMER(OnTimer)
    CHAIN_MSG_MAP(CFrameWindowImpl<CMyWindow>)
  END_MSG_MAP()
  void OnTimer ( UINT uTimerID, TIMERPROC pTimerProc )
  {
    if ( 1 != uTimerID )
      SetMsgHandled(false);
    else
      RedrawWindow();
  }
};

这个响应函数只是在每次定时器触发时重画窗口的客户区。最后我们要响应WM_ERASEBKGND消息,在窗口客户区的左上角显示当前的时间。

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:MFC 程序员 WTL

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