• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            VC定時(shí)器 SetTimer


            VC定時(shí)器 SetTimer 怎么用阿
            [此問題的推薦答案]
            SetTimer函數(shù)的用法
            1 )用WM_TIMER來設(shè)置定時(shí)器

            先請看SetTimer這個(gè)API函數(shù)的原型

            UINT_PTR SetTimer(
            HWND hWnd, // 窗口句柄
            UINT_PTR nIDEvent, // 定時(shí)器ID,多個(gè)定時(shí)器時(shí),可以通過該ID判斷是哪個(gè)定時(shí)器
            UINT uElapse, // 時(shí)間間隔,單位為毫秒
            TIMERPROC lpTimerFunc // 回調(diào)函數(shù)
            );

            例如
            SetTimer(m_hWnd,1,1000,NULL); //一個(gè)1秒觸發(fā)一次的定時(shí)器
            在MFC程序中SetTimer被封裝在CWnd類中,調(diào)用就不用指定窗口句柄了

            于是SetTimer函數(shù)的原型變?yōu)椋?

            UINT SetTimer(UINT nIDEvent,UINT nElapse,void(CALLBACK EXPORT *lpfnTimer)(HWND,UINT ,YINT ,DWORD))

            當(dāng)使用SetTimer函數(shù)的時(shí)候,就會(huì)生成一個(gè)計(jì)時(shí)器。函數(shù)中nIDEvent指的是計(jì)時(shí)器的標(biāo)識,也就是名字。nElapse指的是時(shí)間間隔,
            也就是每隔多長時(shí)間觸發(fā)一次事件。第三個(gè)參數(shù)是一個(gè)回調(diào)函數(shù),在這個(gè)函數(shù)里,放入你想要做的事情的代碼,你可以將它設(shè)定為NULL,
            也就是使用系統(tǒng)默認(rèn)的回調(diào)函數(shù),系統(tǒng)默認(rèn)認(rèn)的是onTime函數(shù)。這個(gè)函數(shù)怎么生成的呢?你需要在需要計(jì)時(shí)器的類的生成onTime函數(shù):
            在ClassWizard里,選擇需要計(jì)時(shí)器的類,添加WM_TIME消息映射,就自動(dòng)生成onTime函數(shù)了。然后在函數(shù)里添加代碼,讓代碼實(shí)現(xiàn)功能。
            每隔一段時(shí)間就會(huì)自動(dòng)執(zhí)行一次。

            例:

            SetTimer(1,1000,NULL);

            1:計(jì)時(shí)器的名稱;

            1000:時(shí)間間隔,單位是毫秒;

            NULL:使用onTime函數(shù)。

            當(dāng)不需要計(jì)時(shí)器的時(shí)候調(diào)用KillTimer(nIDEvent);

            例如:KillTimer(1);

            2) 調(diào)用回調(diào)函數(shù)

            此方法首先寫一個(gè)如下格式的回調(diào)函數(shù)

            void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime);
            然后再用SetTimer(1,100,TimerProc)函數(shù)來建一個(gè)定時(shí)器,第三個(gè)參數(shù)就是回調(diào)函數(shù)地址。

            二. 或許你會(huì)問,如果我要加入兩個(gè)或者兩個(gè)以上的 timer怎么辦?

            繼續(xù)用SetTimer函數(shù)吧,上次的timer的ID是1,這次可以是2,3,4。。。。

            SetTimer(2,1000,NULL);

            SetTimer(3,500,NULL);

            嗯,WINDOWS會(huì)協(xié)調(diào)他們的。當(dāng)然onTimer函數(shù)體也要發(fā)生變化,要在函數(shù)體內(nèi)添加每一個(gè)timer的處理代碼:

            onTimer(nIDEvent)

            {
            switch(nIDEvent)

            {
            case 1:........;
            break;
            case 2:.......;
            break;
            case 3:......;
            break;
            }
            }
            本貼來自ZDNetChina中文社區(qū) http://bbs.zdnet.com.cn ,本貼地址:http://bbs.zdnet.com.cn/viewthread.php?tid=313294


            VC定時(shí)器 SetTimer 怎么用阿
            Timer事件,即定時(shí)器事件,是在游戲編程中,經(jīng)常使用的一個(gè)事件。借助它可以產(chǎn)生定時(shí)執(zhí)行動(dòng)作的效果。這篇文章,就和大家一起探討一下如何使用SetTimer()函數(shù)。
            1、SetTimer定義在那里?

            SetTimer表示的是定義個(gè)定時(shí)器。根據(jù)定義指定的窗口,在指定的窗口(CWnd)中實(shí)現(xiàn)OnTimer事件,這樣,就可以相應(yīng)事件了。

            SetTimer有兩個(gè)函數(shù)。一個(gè)是全局的函數(shù)::SetTimer()

            UINT SetTimer(
            HWND hWnd, // handle of window for timer messages
            UINT nIDEvent, // timer identifier
            UINT uElapse, // time-out value
            TIMERPROC lpTimerFunc // address of timer procedure
            );

            其中hWnd 是指向CWnd的指針,即處理Timer事件的窗口類。說道窗口類(CWnd),我們有必要來看一下CWnd的繼承情況:CWnd有以下子類:CFrameWnd,CDialog,CView,CControlBar等類。這也意味這些類中都可以定義SetTimer事件。

            同時(shí),SetTimer()在CWnd中也有定義,即SetTimer()是CWnd的一個(gè)成員函數(shù)。CWnd的子類可以調(diào)用該函數(shù),來設(shè)置觸發(fā)器。

            UINT SetTimer( UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD) );

            參數(shù)含義:

            nIDEvent:是指設(shè)置這個(gè)定時(shí)器的iD,即身份標(biāo)志,這樣在OnTimer()事件中,才能根據(jù)不同的定時(shí)器,來做不同的事件響應(yīng)。這個(gè)ID是一個(gè)無符號的整型。

            nElapse

            是指時(shí)間延遲。單位是毫秒。這意味著,每隔nElapse毫秒系統(tǒng)調(diào)用一次Ontimer()。

            void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD)

            Specifies the address of the application-supplied TimerProc callback function that processes the WM_TIMER messages. If this parameter is NULL, the WM_TIMER messages are placed in the application’s message queue and handled by the CWnd object。

            意思是,指定應(yīng)用程序提供的TimerProc回調(diào)函數(shù)的地址,來處里這個(gè)Timer事件。如果是NULL,處理這個(gè)Timer事件的定義這個(gè)Timer的CWnd對象。他將WM_TIMER消息傳遞給這個(gè)對象,通過實(shí)現(xiàn)這個(gè)對象的OnTimer()事件來處理這個(gè)Timer事件。

            所以,一般情況下,我們將這個(gè)值設(shè)為NULL,有設(shè)置該定時(shí)器的對象中的OnTimer()函數(shù)來處理這個(gè)事件。

            同樣的,我們再看看KillTimer()和OnTimer()的定義:

            KillTimer同SetTimer()一樣,他也有兩個(gè),一個(gè)是全局的::KillTimer(),另一個(gè)是CWnd的一個(gè)函數(shù)。他的聲明如下:


            //全局函數(shù)

            BOOL KillTimer(
            HWND hWnd, // handle of window that installed timer
            UINT uIDEvent // timer identifier
            );

            //CWnd函數(shù)

            BOOL KillTimer( int nIDEvent );

            這兩個(gè)函數(shù)表示的意思是將iD為nIDEVENT的定時(shí)器移走。使其不再作用。其用法如同SetTimer()一樣。

            再看看OnTimer()

            CWnd::OnTimer
            afx_msg void OnTimer( UINT nIDEvent );

            ontimer()是響應(yīng)CWnd對象產(chǎn)生的WM_Timer消息。nIDEvent表示要響應(yīng)TIMER事件的ID。

            二、Timer事件的使用:

            由以上的分析,我們應(yīng)該很清楚,如何來使用Timer事件。假定我們在視圖上畫一個(gè)漸變的動(dòng)畫。我們首先在菜單欄上添加一個(gè)菜單項(xiàng),給這個(gè)菜單添加命令響應(yīng):

            pView->SetTimer(1,1000,NULL);//pView是視圖類的指針,這里是在視圖類當(dāng)中設(shè)置一個(gè)定時(shí)器。

            添加完畢,再給視圖類添加一個(gè)WM_Timer事件的相應(yīng)。在OnTimer()函數(shù)中編寫漢書,進(jìn)行相應(yīng)。

            如此,就能做出動(dòng)畫。
            本貼來自ZDNetChina中文社區(qū) http://bbs.zdnet.com.cn ,本貼地址:http://bbs.zdnet.com.cn/viewthread.php?tid=313294

             

             

             

            posted on 2008-10-25 09:02 wrh 閱讀(4069) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            導(dǎo)航

            <2008年12月>
            30123456
            78910111213
            14151617181920
            21222324252627
            28293031123
            45678910

            統(tǒng)計(jì)

            常用鏈接

            留言簿(19)

            隨筆檔案

            文章檔案

            收藏夾

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久综合九色综合欧美就去吻| 色欲久久久天天天综合网精品| 久久婷婷五月综合色高清| 亚洲精品乱码久久久久久中文字幕| 亚洲熟妇无码另类久久久| 狠狠狠色丁香婷婷综合久久俺| 国产精品99久久久久久www| 日本加勒比久久精品| 久久精品a亚洲国产v高清不卡| 久久久久久噜噜精品免费直播| 久久久无码精品亚洲日韩京东传媒 | 91精品国产综合久久久久久| 91性高湖久久久久| 人妻精品久久久久中文字幕69 | 久久久久久一区国产精品| 国产成人久久精品一区二区三区| 国产精品久久久久久搜索| 日韩人妻无码一区二区三区久久99| 精品午夜久久福利大片| 国产色综合久久无码有码| 久久久久久青草大香综合精品| 久久99免费视频| 久久精品国产亚洲AV高清热 | 国内精品免费久久影院| 久久婷婷五月综合色高清| 怡红院日本一道日本久久 | 国产精品成人无码久久久久久| 久久香综合精品久久伊人| 伊色综合久久之综合久久| 欧美久久久久久午夜精品| 久久国产精品久久国产精品| 伊人久久大香线焦AV综合影院 | 久久婷婷五月综合成人D啪| 热RE99久久精品国产66热| 国产成人久久精品麻豆一区| 久久香蕉国产线看观看99 | 亚洲精品tv久久久久| 欧美激情精品久久久久久| 精品久久久久久无码中文野结衣| 成人精品一区二区久久久| 国产精品亚洲综合专区片高清久久久 |