1. 程式人生 > >MFC的CEdit控制元件中實現複製、貼上、剪下等操作的快捷鍵

MFC的CEdit控制元件中實現複製、貼上、剪下等操作的快捷鍵

今天在一個MFC的GUI程式中實現了一個自定義的列表控制元件類(CListCtrl),在這個類裡嵌入了一個CEdit類以便於編輯列表項,為了實現在編輯每個列表項時能支援快捷鍵,在派生的CEdit類加入下面這個函式:

[cpp] view plaincopyprint?
  1. BOOL CCustomizedListCtrl::CListEditor::PreTranslateMessage(MSG* pMsg)  
  2. {  
  3. // 編輯框快捷鍵操作
  4. if(WM_KEYDOWN == pMsg->message)   
  5.     {  
  6. if(::GetFocus() == m_hWnd && (GetKeyState( VK_CONTROL) & 0xFF00 ) == 0xFF00)   
  7.         {  
  8. // 全選
  9. if( pMsg->wParam == 'A' || pMsg->wParam == 'a')  
  10.             {  
  11. this->SetSel(0, -1);  
  12. returntrue;  
  13.             }  
  14. // 拷貝
  15. if( pMsg->wParam == 'C' || pMsg->wParam == 'c')  
  16.             {  
  17. this->Copy();  
  18. returntrue;  
  19.             }  
  20. // 剪下
  21. if( pMsg->wParam == 'X' || pMsg->wParam == 
    'x')  
  22.             {  
  23. this->Cut();  
  24. returntrue;  
  25.             }  
  26. // 貼上
  27. if( pMsg->wParam == 'V' || pMsg->wParam == 'v')  
  28.             {  
  29. this->Paste();  
  30. returntrue;  
  31.             }  
  32. // 貼上
  33. if( pMsg->wParam == 'Z' || pMsg->wParam == 'z')  
  34.             {  
  35. this->Undo();  
  36. returntrue;  
  37.             }  
  38.         }  
  39.     }  
  40. return CEdit::PreTranslateMessage(pMsg);  
  41. }  

一開始實現時,編輯列表項不能捕捉焦點,後在google程式碼搜尋中搜關鍵字PreTranslateMessage,才知道沒加一個判斷條件,::GetFocus() == m_hWnd。