一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

VC++實現非窗口類中使用定時器的方法

 9loong 2010-09-24
http://www./dev/vc/2009-11-15/a09119886.shtml

VC++實現非窗口類中使用定時器的方法(圖)

更新時間:2009-11-15 02:31:36

   定時器在Windows 的程序中的作用不可忽略,也隨處可見。設定一個時間間隔每0.5秒或者1秒鐘刷新一次時鐘,這樣就可以完成一個簡單的電子鐘程序。在不同的編程工具中定時器的用法也不同,Visual C++中也給我們提供了實現這種功能的方法,而且方法不只一種。在窗口類中是使用定時器比較很簡單,用SetTimer()設置了定時器之后,并在Class Wizard中添加了WM_TIMER消息映射后,您就可以在映射函數OnTimer()中添加代碼實現,來定時完成您的任務,而且還支持任意多個定時器,這種方法大家可能都會用。但是在非窗口的類中,使用定時器就沒那么簡單了,在類消息映射中就找不到OnTimer()方法了,類中也沒有hWnd這個屬性,SetTimer()也不能象原來那樣使用了,下面給出了一種既不破壞類的完整性的同時又能巧妙的使用定時器的方法。程序運行后的界面效果如圖一所示:


圖一、定時器界面效果圖

  實現方法

  在非窗口類中使用定時器,需要了解的知識比較多。首先非窗口類中沒有消息映射,也沒有象CWnd類具有的SetTimer()方法來設置定時器。沒有消息映射,就只能靠我們自己定義的回調函數來處理定時器的消息,因此大家有必要了解一下回調函數的概念。因為回調函數只能用全局函數或者靜態(tài)成員函數來實現,而為了維持類的完整性,又要求使用類的靜態(tài)成員函數來作為回調函數。又因為定時器是在我們的程序中產生的,這又需要來管理定時器,所以又用到了映射表類CMap。

      程序代碼
            CMyTimer,該類的作用是每隔一段時間提醒我們做某件事情,然后用這個類創(chuàng)建N個實例,每個實例以不同的時間間隔提醒我們做不同的事情。
/////////////////////////////////////////// MyTimer.h: interface for the CMyTimer class.
#if !defined(AFX_MYTIMER_H__D97674D1_B221_49CD_9637_4CBA8C3180CE__INCLUDED_)
#define AFX_MYTIMER_H__D97674D1_B221_49CD_9637_4CBA8C3180CE__INCLUDED_
#include <afxtempl.h>
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CMyTimer;
typedef CMap<UINT,UINT,CMyTimer*,CMyTimer*> CTimerMap;
class CMyTimer
{
 public:
  //設置定時器,nElapse表示時間間隔,sz表示要提示的內容
  void SetMyTimer(UINT nElapse,CString sz);
  //銷毀該實例的定時器
  void KillMyTimer();
  //保存該實例的定時器標志值
  UINT m_nTimerID;
  //靜態(tài)數據成員要提示的內容
  CString szContent;
  //靜態(tài)數據成員,映射表類,用于保存所有的定時器信息
  static CTimerMap m_sTimeMap;
  //靜態(tài)成員函數,用于處理定時器的消息
  static void CALLBACK MyTimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime);

  CMyTimer();
  virtual ~CMyTimer();
};
#endif

///////////////////////////////////// MyTimer.cpp: implementation of the CMyTimer class.
#include "stdafx.h"
#include "TimerDemo.h"
#include "MyTimer.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
CTimerMap CMyTimer::m_sTimeMap;

CMyTimer::CMyTimer()
{
 m_nTimerID = 0;
}

CMyTimer::~CMyTimer()
{}

void CALLBACK CMyTimer::MyTimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime)
{
 CString sz;
 sz.Format("%d號定時器:%s",idEvent,m_sTimeMap[idEvent]->szContent);
 AfxMessageBox(sz);
}

void CMyTimer::SetMyTimer(UINT nElapse,CString sz)
{
 szContent = sz;
 m_nTimerID = SetTimer(NULL,NULL,nElapse,MyTimerProc);
 m_sTimeMap[m_nTimerID] = this;
}

void CMyTimer::KillMyTimer()
{
 KillTimer(NULL,m_nTimerID);
 m_sTimeMap.RemoveKey(m_nTimerID);
}



(#)

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    美女黄片大全在线观看| 中文字幕日韩欧美亚洲午夜| 特黄大片性高水多欧美一级| 97人摸人人澡人人人超碰| 中文字幕精品人妻一区| 高清一区二区三区不卡免费| 日本二区三区在线播放| 日本本亚洲三级在线播放| 国产精品刮毛视频不卡| 日韩欧美国产精品自拍| 韩日黄片在线免费观看| 色一情一伦一区二区三| 中文字幕日韩欧美一区| 99精品国产自在现线观看| 国产性色精品福利在线观看| 欧美三级不卡在线观线看| 日韩精品一区二区毛片| 欧美人妻一区二区三区| 精品推荐国产麻豆剧传媒| 日本最新不卡免费一区二区| 日韩视频在线观看成人| 日本高清不卡一二三区| 大尺度剧情国产在线视频| 俄罗斯胖女人性生活视频| 东京热一二三区在线免| 国内九一激情白浆发布| 欧美日韩视频中文字幕| 中国少妇精品偷拍视频| 午夜精品国产一区在线观看| 国产成人精品国内自产拍| 国产精品一区二区视频| 国产又粗又长又爽又猛的视频| 日本丰满大奶熟女一区二区| 91熟女大屁股偷偷对白| 99久久人妻中文字幕| 91精品视频全国免费| 少妇一区二区三区精品| 日本女人亚洲国产性高潮视频| 欧美熟妇喷浆一区二区| 精品日韩中文字幕视频在线| 夜夜躁狠狠躁日日躁视频黑人|