• <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來(lái)設(shè)置定時(shí)器

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

            UINT_PTR SetTimer(
            HWND hWnd, // 窗口句柄
            UINT_PTR nIDEvent, // 定時(shí)器ID,多個(gè)定時(shí)器時(shí),可以通過(guò)該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)識(shí),也就是名字。nElapse指的是時(shí)間間隔,
            也就是每隔多長(zhǎng)時(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ù)來(lái)建一個(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;
            }
            }
            本貼來(lái)自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事件的窗口類。說(shuō)道窗口類(CWnd),我們有必要來(lái)看一下CWnd的繼承情況:CWnd有以下子類:CFrameWnd,CDialog,CView,CControlBar等類。這也意味這些類中都可以定義SetTimer事件。

            同時(shí),SetTimer()在CWnd中也有定義,即SetTimer()是CWnd的一個(gè)成員函數(shù)。CWnd的子類可以調(diào)用該函數(shù),來(lái)設(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í)器,來(lái)做不同的事件響應(yīng)。這個(gè)ID是一個(gè)無(wú)符號(hào)的整型。

            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ù)的地址,來(lái)處里這個(gè)Timer事件。如果是NULL,處理這個(gè)Timer事件的定義這個(gè)Timer的CWnd對(duì)象。他將WM_TIMER消息傳遞給這個(gè)對(duì)象,通過(guò)實(shí)現(xiàn)這個(gè)對(duì)象的OnTimer()事件來(lái)處理這個(gè)Timer事件。

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

            同樣的,我們?cè)倏纯碖illTimer()和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對(duì)象產(chǎn)生的WM_Timer消息。nIDEvent表示要響應(yīng)TIMER事件的ID。

            二、Timer事件的使用:

            由以上的分析,我們應(yīng)該很清楚,如何來(lái)使用Timer事件。假定我們?cè)谝晥D上畫一個(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)畫。
            本貼來(lái)自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) 評(píng)論(0)  編輯 收藏 引用


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


            導(dǎo)航

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

            統(tǒng)計(jì)

            常用鏈接

            留言簿(19)

            隨筆檔案

            文章檔案

            收藏夾

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            色偷偷91久久综合噜噜噜噜| 色婷婷综合久久久久中文一区二区| 久久天天躁狠狠躁夜夜网站| 亚洲AV无码久久精品狠狠爱浪潮 | 亚洲AV无码久久精品狠狠爱浪潮| 久久久无码精品亚洲日韩蜜臀浪潮| 久久99久国产麻精品66| 久久精品国产精品青草| 久久久不卡国产精品一区二区| 国内精品综合久久久40p| 91精品国产9l久久久久| 亚洲午夜无码AV毛片久久| 日韩精品久久无码人妻中文字幕| 国产精品欧美久久久久无广告 | 久久国产精品成人免费 | 久久无码国产| 久久国产精品-国产精品| 成人综合久久精品色婷婷| 亚洲一本综合久久| 久久99精品国产麻豆| 久久久久久久波多野结衣高潮| 国产精品欧美亚洲韩国日本久久 | 欧美伊人久久大香线蕉综合69| 国产成人久久AV免费| 久久综合久久美利坚合众国| 久久精品国产一区二区三区不卡| 久久免费精品视频| 久久婷婷成人综合色综合| 丁香久久婷婷国产午夜视频| 亚洲va久久久噜噜噜久久狠狠| 亚洲天堂久久久| 狠狠色丁香久久婷婷综| 国产精品久久久久久五月尺| 国内精品久久久久影院网站| 2021少妇久久久久久久久久| 久久精品国产亚洲av麻豆色欲| 国内精品伊人久久久影院| 亚洲欧洲精品成人久久曰影片| 亚洲精品综合久久| 久久精品国产亚洲AV忘忧草18| 久久人人爽人人爽人人av东京热 |