MFC的CEdit控制元件中實現複製、貼上、剪下等操作的快捷鍵
阿新 • • 發佈:2019-01-08
今天在一個MFC的GUI程式中實現了一個自定義的列表控制元件類(CListCtrl),在這個類裡嵌入了一個CEdit類以便於編輯列表項,為了實現在編輯每個列表項時能支援快捷鍵,在派生的CEdit類加入下面這個函式:
[cpp] view plaincopyprint?- 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);
- returntrue;
- }
- // 拷貝
- if( pMsg->wParam == 'C' || pMsg->wParam == 'c')
- {
- this->Copy();
- returntrue;
- }
- // 剪下
- if( pMsg->wParam == 'X' || pMsg->wParam ==
- {
- this->Cut();
- returntrue;
- }
- // 貼上
- if( pMsg->wParam == 'V' || pMsg->wParam == 'v')
- {
- this->Paste();
- returntrue;
- }
- // 貼上
- if( pMsg->wParam == 'Z' || pMsg->wParam == 'z')
- {
- this->Undo();
- returntrue;
- }
- }
- }
- return CEdit::PreTranslateMessage(pMsg);
- }
一開始實現時,編輯列表項不能捕捉焦點,後在google程式碼搜尋中搜關鍵字PreTranslateMessage,才知道沒加一個判斷條件,::GetFocus() == m_hWnd。