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

jianzhanger發表於2011-10-31
 

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

BOOL CCustomizedListCtrl::CListEditor::PreTranslateMessage(MSG* pMsg)      // 編輯框快捷鍵操作      if(WM_KEYDOWN == pMsg->message)       {          if(::GetFocus() == m_hWnd && (GetKeyState( VK_CONTROL) & 0xFF00 ) == 0xFF00)           {              // 全選              if( pMsg->wParam == 'A' || pMsg->wParam == 'a'            {                  this->SetSel(0, -1);                  return true            }                // 拷貝              if( pMsg->wParam == 'C' || pMsg->wParam == 'c'            {                  this->Copy();                  return true            }                // 剪下              if( pMsg->wParam == 'X' || pMsg->wParam == 'x'            {                  this->Cut();                  return true            }                // 貼上              if( pMsg->wParam == 'V' || pMsg->wParam == 'v'            {                  this->Paste();                  return true            }                // 貼上              if( pMsg->wParam == 'Z' || pMsg->wParam == 'z'            {                  this->Undo();                  return true            }            }      }        return CEdit::PreTranslateMessage(pMsg); 

 

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

相關文章