• <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>
            Dragon  
            Dragon
            日歷
            <2010年9月>
            2930311234
            567891011
            12131415161718
            19202122232425
            262728293012
            3456789
            統(tǒng)計(jì)
            • 隨筆 - 58
            • 文章 - 0
            • 評(píng)論 - 55
            • 引用 - 0

            導(dǎo)航

            常用鏈接

            留言簿(3)

            隨筆分類(lèi)(58)

            隨筆檔案(58)

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

             

            PreTranslateMessage和GetKeyState的一點(diǎn)理解:
                MSDN上的:如果消息完全由PreTranslateMessage就返回非零值,并不再進(jìn)一步處理.如果消息將以正常的方式處理,就返回零值.
                當(dāng)我新建一個(gè)基于對(duì)話框的工程,并加了OnkeyDown函數(shù),再加如下代碼想要實(shí)現(xiàn)Ctrl+left組合鍵,但沒(méi)有任何反應(yīng).
             

             if(nChar==VK_LEFT && ::GetKeyState(VK_CONTROL)<0)   
             
            {   
              MessageBox(
            "left","test",MB_OK);   
             }

             

                上網(wǎng)查了資料都是在PreTranslateMessage對(duì)消息進(jìn)行判斷,雖然最好的方法是在這里實(shí)現(xiàn),但我比較喜歡嘗試,想在這里實(shí)現(xiàn).
            網(wǎng)上都說(shuō)在PreTranslateMessage實(shí)現(xiàn),我就在我的工程中去看看PreTranslateMessage函數(shù),當(dāng)我查了MSDN后終于明白了,我的消息
            全由默認(rèn)的函數(shù)處理了,到OnkeyDown函數(shù)中就處理不了了,我把PreTranslateMessage函數(shù)改成下面的樣子就可以了!

            BOOL CTestDlg::PreTranslateMessage(MSG* pMsg) 
            {
             
            // TODO: Add your specialized code here and/or call the base class
               
             
            return 0;//CDialog::PreTranslateMessage(pMsg);
            }

             


                這里還有一個(gè)問(wèn)題,關(guān)于GetKeyState的,查MSDN后知道它的返回值有三種狀態(tài)的,有按下和彈起以及類(lèi)似于大小寫(xiě)轉(zhuǎn)鍵的觸發(fā)態(tài).
            但在這里我們不用到觸發(fā)態(tài),按下返回負(fù)值,彈起返回正值,如果上面我們沒(méi)有對(duì)GetKeyState的返回值判斷正負(fù):
            當(dāng)你第一次按左鍵時(shí),也會(huì)彈出一個(gè)對(duì)話框,原因是GetKeyState返回非零值;
            若你第一次按Ctrl+left時(shí)也會(huì)彈出對(duì)話框,但第二次不用按Ctrl只按左鍵也會(huì)彈出對(duì)話框,因?yàn)槟隳菚r(shí)已經(jīng)觸發(fā)了Ctrl鍵,再按一次
            Ctrl+left;下次按left就不會(huì)彈出對(duì)話框了,那時(shí)Ctrl失效了!(這里是失效還是彈起分不清代,調(diào)試看它的返回值,應(yīng)該是彈出,因?yàn)?br>按下Ctrl的值時(shí)它的值都在-127和-128兩值變化,即最高位(the high-order bit)是1,最低位(the low-order bit)恒為1)
            但感覺(jué)上還是失效,不然也不用第二次來(lái)恢復(fù)Ctrl的使用!!!!!!!
            所以上面的GetKeyState必須判斷返回值的正負(fù)!

            posted on 2008-10-28 16:21 Dragon 閱讀(2179) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): VC
             
            Copyright © Dragon Powered by: 博客園 模板提供:滬江博客
            91久久精品电影| 狠狠色丁香婷综合久久| 性做久久久久久免费观看| 国产精品伦理久久久久久| 久久久久成人精品无码| 2021最新久久久视精品爱 | 国产精品乱码久久久久久软件| 亚洲精品高清一二区久久| 久久一日本道色综合久久| 夜夜亚洲天天久久| 天天躁日日躁狠狠久久| 久久久久国产精品麻豆AR影院| 伊人久久无码中文字幕| 日本久久久久久中文字幕| 亚洲AV日韩精品久久久久久| 一本伊大人香蕉久久网手机| 一本久久a久久精品亚洲| 久久精品三级视频| 久久精品国产亚洲一区二区| 久久精品国产亚洲AV香蕉| 精品熟女少妇aⅴ免费久久| 国产精品久久久久久吹潮| 久久精品视频一| 四虎影视久久久免费| 国产精品内射久久久久欢欢| 97久久精品国产精品青草| 久久综合88熟人妻| 亚洲精品无码久久一线| 中文字幕无码久久人妻| 久久久久国产一级毛片高清板 | 无码乱码观看精品久久| 狠狠色婷婷综合天天久久丁香| 亚洲中文久久精品无码ww16| 偷窥少妇久久久久久久久| 久久久无码精品亚洲日韩软件| 99久久国产免费福利| 国产高潮久久免费观看| 99久久亚洲综合精品成人| 国产伊人久久| 亚洲国产精品无码久久青草| 亚洲国产成人精品久久久国产成人一区二区三区综 |