• <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>

            如何在應(yīng)用程序忙碌時(shí)探測用戶的按健

            這個(gè)問題在論壇中的出現(xiàn)頻率很高。在解決這個(gè)問題時(shí),首先要明確Windows處理用戶輸入的方法完全不同于Dos操作系統(tǒng)。當(dāng)用戶按鍵后,Dos應(yīng)用向操作系統(tǒng)提出請(qǐng)求,而在Windows中,當(dāng)用戶事件發(fā)生時(shí),是由Windows請(qǐng)求調(diào)用相應(yīng)的代碼,代碼實(shí)現(xiàn)自己必須的處理,最后將控制返回到操作系統(tǒng)。

                當(dāng)你從Dos操作系統(tǒng)編程轉(zhuǎn)向Windows的時(shí)候,你會(huì)很不習(xí)慣Windows的面向事件與消息的處理模式,但是面向?qū)ο蟮奶幚矸椒ㄔ赪indows中非常靈活實(shí)用。

                本文要討論的問題是如何在應(yīng)用程序中實(shí)現(xiàn)用戶事件的輪詢。例如,當(dāng)你的應(yīng)用程序在忙碌狀態(tài)時(shí),如何探測用戶按鍵(Escape)來終止正在進(jìn)行的處理或操作。

                當(dāng)用戶按鍵或移動(dòng)鼠標(biāo)導(dǎo)致系統(tǒng)事件發(fā)生時(shí),操作系統(tǒng)將這些事件存儲(chǔ)在相應(yīng)的應(yīng)用程序消息隊(duì)列中,事件會(huì)一直以消息的形式存儲(chǔ)在消息隊(duì)列中直到應(yīng)用程序完消息并將控制返回到Windows,這時(shí)Windows將把消息隊(duì)列中的下一條消息發(fā)送到應(yīng)用程序。

               所以,為了確定是否用戶已經(jīng)按下了某一個(gè)按鍵,應(yīng)用程序需要確定某一按鍵的消息當(dāng)前是否在消息隊(duì)列中。為此可以調(diào)用PeekMessage函數(shù),例如:

            MSG msg;
            // 檢查是否按下 Escape 鍵
            if (::PeekMessage(&msg, m_hWnd, WM_KEYFIRST,
            WM_KEYLAST, PM_REMOVE)) {
            if (msg.message == WM_KEYDOWN && msg.wParam 
            == VK_ESCAPE)
            // 退出循環(huán)或者停止處理;
            }

                第一個(gè)參數(shù)MSG結(jié)構(gòu)接收與消息有關(guān)的信息。第二個(gè)參數(shù)是window句柄,如果程序是基于MFC的應(yīng)用,這個(gè)參數(shù)傳遞m_hWnd即可。下兩個(gè)參數(shù)是確定類型的消息,PeekMessage將返回消息隊(duì)列中落在這兩個(gè)值之間的第一個(gè)消息。因?yàn)檫@里我們感興趣的是按鍵,所以就用WM_KEYFIRST 和 WM_KEYLAST作為參數(shù)。最后一個(gè)參數(shù)可以是PM_NOREMOVE 或者 PM_REMOVE,表示消息信息是否應(yīng)該從消息隊(duì)列中刪除。

                 如果PeekMessage在請(qǐng)求范圍內(nèi)尋找消息,他返回非零值。這樣上面的代碼檢查是否發(fā)現(xiàn)WM_KEYDOWN消息并且wParam等于VK_ESCAPE,如果發(fā)現(xiàn)則退出循環(huán)并終止代碼的處理。

            posted on 2009-02-21 08:29 wrh 閱讀(232) 評(píng)論(0)  編輯 收藏 引用


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


            導(dǎo)航

            <2012年3月>
            26272829123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            統(tǒng)計(jì)

            常用鏈接

            留言簿(19)

            隨筆檔案

            文章檔案

            收藏夾

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            成人综合伊人五月婷久久| 久久中文字幕人妻丝袜| 国产99久久九九精品无码| 香港aa三级久久三级| 久久久久女教师免费一区| 久久国产色av免费看| 精品一区二区久久久久久久网站| 久久人妻少妇嫩草AV无码蜜桃| 久久久久精品国产亚洲AV无码| 丰满少妇高潮惨叫久久久| 亚洲&#228;v永久无码精品天堂久久 | 亚洲伊人久久精品影院| 99久久无码一区人妻| 囯产精品久久久久久久久蜜桃| 久久国产精品久久精品国产| 久久久久久久久久久精品尤物| 国产精品久久久久影视不卡| 亚洲精品tv久久久久久久久久| 久久久国产精品网站| 久久精品中文无码资源站| 污污内射久久一区二区欧美日韩| 国产精品久久毛片完整版| 久久人爽人人爽人人片AV| 人妻中文久久久久| 久久精品国产只有精品66| 99久久国产亚洲高清观看2024 | 伊人久久精品线影院| 国产精品一区二区久久| 久久99精品国产麻豆| 人妻无码αv中文字幕久久琪琪布| 久久影院久久香蕉国产线看观看| 嫩草影院久久国产精品| 人人狠狠综合久久亚洲88| 97久久精品无码一区二区| 精品人妻伦九区久久AAA片69| 久久综合亚洲色HEZYO国产| 欧美久久一区二区三区| 香蕉久久久久久狠狠色| 2021国产精品午夜久久| 久久精品人人做人人爽电影| 久久综合香蕉国产蜜臀AV|