• <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>
            面對現(xiàn)實,超越自己
            逆水行舟,不進則退
            posts - 269,comments - 32,trackbacks - 0

                  VC中我們經(jīng)常使用到快捷鍵,這里快捷鍵有多種,包括menu,button。另外還區(qū)分local的和global的, 其中l(wèi)ocal的職能在當前程序有焦點(被激活)時有效,而global的,則無論什么時候都有效,測試local的要優(yōu)先于global的,就是如果當前激活窗口的快捷鍵與未激活窗口的快捷鍵重疊,當前激活窗口優(yōu)先響應。

                  這里將快捷鍵分為menu和button兩種。

            menu添加local快捷鍵又分為兩種, 一種是直接與菜單項關(guān)聯(lián)的加速鍵,另一種就是自定義的加速鍵.

             
            第一種: 首先在資源文件Accelerator中添加快捷鍵資源 ID選擇你要關(guān)聯(lián)菜單項的名稱 然后再設(shè)置你的快捷鍵.什么?下一步?在.h文件中加入一個    HACCEL   hAccel;變量 然后在OnInitDialog或初始化中加入hAccel=::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MENU_MAIN));  后面的參數(shù)改成加速鍵的資源文件名.

            最后在PreTranslateMessage(MSG* pMsg) 中加入:
                if(::TranslateAccelerator(GetSafeHwnd(),hAccel,pMsg))   
                    return   true;


            這樣 以后只要在Accelerator資源文件中添加快捷鍵就可以了 
            注意: 添加快捷鍵的名字一定要與菜單名稱一樣 這樣才能響應.現(xiàn)在只需要在此菜單項中加入OnCommand消息的處理就可以了.


            第二種: 還是在資源文件Accelerator中添加快捷鍵資源 ID自己定義一個.然后再設(shè)置你的快捷鍵.下一步...就是在.h文件中定義一個快捷鍵對象
            HACCEL m_hAccel;

            然后在.cpp文件中初始
             m_hAccel = ::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1));
            IDR_ACCELERATOR1為你的加速資源名稱.注意不是剛剛定義的加速鍵ID.

            再添加PreTranslateMessage消息處理 在里面加入以下代碼:
             //保存快捷鍵被啟用
             if(m_hAccel   !=   NULL)   
             {   
              if (TranslateAccelerator(m_hWnd, m_hAccel, pMsg))   
               return   TRUE;    
             }  

            再添加OnCommand消息處理 加入以下代碼:

            //響應加速鍵
              switch(LOWORD(wParam))   
              {   
              case  SHOW_DIAL0G:   //加速鍵ID   
            //...添加處理語句
              break;   
              case   SHOW_DIALOG_02:   //加速鍵ID   
            //...添加處理語句
              break;   
              }  


            menu添加global快捷鍵
            以對話框程序為例:

            在OnInitDialog中添加注冊熱鍵的代碼: 
            RegisterHotKey(GetSafeHwnd(),1001,NULL,VK_F2);//F2鍵 
            RegisterHotKey(GetSafeHwnd(),1002,MOD_ALT,'1');//Alt+1鍵 
            在 
            BEGIN_MESSAGE_MAP(CXXXDlg, CDialog) 
            ... 
            END_MESSAGE_MAP() 
            中添加WM_HOTKEY的消息映射: 
            ON_MESSAGE(WM_HOTKEY,&CXXXDlg::OnHotKey)//快捷鍵消息映射手動加入 
            在頭文件中添加OnHotKey的聲明: 
            protected: 
            afx_msg LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);//手動加入.


            CPP中OnHotKey的實現(xiàn)代碼:

            //相應快捷鍵的消息映射 
            LRESULT CXXXDlg::OnHotKey(WPARAM wParam,LPARAM lParam) 

                if(wParam ==1001) 
                {  
                    MessageBox("熱鍵F2已經(jīng)按下!"); 
                    //這里可以加上你按鈕要執(zhí)行的操作,或者直接調(diào)用按鈕映射的消息函數(shù) 
                } 
                else if (wParam==1002) 
                { 
                    MessageBox("熱鍵ALT+1已經(jīng)按下!"); 
                } 
                return 0; 

            關(guān)閉對話框時使用 
            UnregisterHotKey(GetSafeHwnd(),1001);//注銷F2鍵 
            UnregisterHotKey(GetSafeHwnd(),1002);//注銷Alt+1鍵 
            注銷熱鍵.

            button添加locak快捷鍵可以直接在button的caption中用 &+'X' 即可,則按下 Alt + 'x' 即按下此按鈕,起到快捷鍵的作用

            另外還可以學習menu添加local快捷鍵的第二種方式,在PreTranslateMessage中添加處理函數(shù)。

            button添加global快捷鍵同menu添加global快捷鍵。


            加載資源(MFC的Dialog   Based中): 
            HACCEL   hAcc   =   LoadAccelerators   (m_hInstance,   MAKEINTRESOURCE(IDR_ACCELERATOR1)); 
            需要在 
            PreTranslateMessage中一行 
            if   (TranslateAccelerator(GetSafeHwnd(),   m_hAcc,   pMsg))return   TRUE;
            LoadAccelerators的結(jié)果最好保存在一個成員變量中。

            本文轉(zhuǎn)自:http://blog.163.com/lvlijuan001@126/blog/static/77997198201110147301101/
            posted on 2012-09-05 13:58 王海光 閱讀(1508) 評論(0)  編輯 收藏 引用 所屬分類: MFC
            免费观看久久精彩视频| 久久久久高潮毛片免费全部播放| 99久久精品国产一区二区蜜芽| 91精品国产91久久久久久蜜臀| 欧美精品福利视频一区二区三区久久久精品 | 久久精品国产精品青草app| 国内精品免费久久影院| 伊人久久综合无码成人网| 久久久青草青青亚洲国产免观| 亚洲国产精品成人久久蜜臀| 国产成人无码久久久精品一| 天堂无码久久综合东京热| 青青草国产成人久久91网| 亚洲熟妇无码另类久久久| 久久国产免费直播| 国产成人综合久久综合| 国产色综合久久无码有码| 久久久久亚洲AV无码去区首| 久久96国产精品久久久| 久久人人爽人人爽人人AV| 国产精品久久久久a影院| 久久久WWW成人免费毛片| 久久中文字幕一区二区| 久久精品中文騷妇女内射| 区久久AAA片69亚洲| 亚洲人成网站999久久久综合| 久久国产精品免费一区二区三区 | 久久亚洲精品视频| 性高湖久久久久久久久| 99久久精品免费看国产一区二区三区| 久久久精品无码专区不卡| 国内精品久久久久久不卡影院 | 亚洲va久久久噜噜噜久久| 日韩va亚洲va欧美va久久| 久久久久女教师免费一区| 国产叼嘿久久精品久久| 99久久国产综合精品五月天喷水 | 久久精品国产色蜜蜜麻豆| 94久久国产乱子伦精品免费| 国产69精品久久久久9999| 精品久久久无码中文字幕天天|