Cut-Copy-Paste not working with FormView
Bruce -- bmiller@geographix.com Thursday, June 06, 1996 NT 3.51, VC++ 4.1 Dell Dimension XPS P90, 32MB RAM My main view in my MDI app is a dialog-based FormView. I thought that the Cut/Copy/Paste commands would automatically be enabled and functional, but they are not. In sample apps, they work fine. The only difference is my view is dialog-based. I don't know if I have to add this functionality myself, or if a dialog property is not set correctly. Basically, the app-defined Cut/Copy/Paste menus are visible but disabled. I can highlight text in my view's edit box, but cannot cut or copy. If I need to add this code, is it available on MSDN? Bruce Miller bmiller@geographix.com Why isn't there mouse-flavored cat food?
Vincent Mascart -- 100425.1337@compuserve.com Sunday, June 09, 1996 >From: "Miller, Bruce" >Sent: samedi 8 juin 1996 21:38 > >NT 3.51, VC++ 4.1 >Dell Dimension XPS P90, 32MB RAM > >My main view in my MDI app is a dialog-based FormView. I thought that >the Cut/Copy/Paste commands would automatically be enabled and functional, >but they are not. In sample apps, they work fine. The only difference is >my >view is dialog-based. I don't know if I have to add this functionality >myself, or if >a dialog property is not set correctly. You have to had it functionality youself >Basically, the app-defined Cut/Copy/Paste menus are visible but disabled. I >can highlight text in my view's edit box, but cannot cut or copy. Since you have to implement it yourself, it will not work ... until you implement it >If I need to add this code, is it available on MSDN? I didn't find complete code on MSDN, but some articles helped me to implement it. You should read the following articles: - Implementing the Cut, Copy, and Paste Commands in the Win32 SDK doc on the VC++ CD - Clipboard: Using the Windows Clipboard in the VC++ Books\MFC 4.0 doc (also on the VC++ CD) Here is some code I implemented in my CMainframe class to handle CF_TEXT format Cut/Copy/Paste/ etc... It only handle operations for CEdit and CComboBox fields in views, but I think its the most common usage of clipboard in a CFormView. void CMainFrame::OnEditCopy() { CWnd* pWnd = GetFocus(); if(pWnd!=NULL) { if(pWnd->IsKindOf(RUNTIME_CLASS(CEdit))) { ((CEdit*)pWnd)->Copy(); } else if(pWnd->IsKindOf(RUNTIME_CLASS(CComboBox))) { ((CComboBox*)pWnd)->Copy(); } } } void CMainFrame::OnEditCut() { CWnd* pWnd = GetFocus(); if(pWnd!=NULL) { if(pWnd->IsKindOf(RUNTIME_CLASS(CEdit))) { ((CEdit*)pWnd)->Cut(); } else if(pWnd->IsKindOf(RUNTIME_CLASS(CComboBox))) { ((CComboBox*)pWnd)->Cut(); } } } void CMainFrame::OnEditClear() { CWnd* pWnd = GetFocus(); if(pWnd!=NULL) { if(pWnd->IsKindOf(RUNTIME_CLASS(CEdit))) { ((CEdit*)pWnd)->Clear(); } else if(pWnd->IsKindOf(RUNTIME_CLASS(CComboBox))) { ((CComboBox*)pWnd)->Clear(); } } } void CMainFrame::OnEditPaste() { CWnd* pWnd = GetFocus(); if(pWnd!=NULL) { if(pWnd->IsKindOf(RUNTIME_CLASS(CEdit))) { ((CEdit*)pWnd)->Paste(); } else if(pWnd->IsKindOf(RUNTIME_CLASS(CComboBox))) { ((CComboBox*)pWnd)->Paste(); } } } void CMainFrame::OnEditSelectAll() { CWnd* pWnd = GetFocus(); if(pWnd!=NULL) { if(pWnd->IsKindOf(RUNTIME_CLASS(CEdit))) { ((CEdit*)pWnd)->SetSel(0,-1); } else if(pWnd->IsKindOf(RUNTIME_CLASS(CComboBox))) { ((CComboBox*)pWnd)->SetEditSel(0,-1); } } } void CMainFrame::OnEditUndo() { CWnd* pWnd = GetFocus(); if(pWnd!=NULL) { if(pWnd->IsKindOf(RUNTIME_CLASS(CEdit))) { ((CEdit*)pWnd)->Undo(); } } } void CMainFrame::OnUpdateEditCopy(CCmdUI* pCmdUI) { int nStartSel, nEndSel; DWORD dw; CWnd* pWnd = GetFocus(); if(pWnd!=NULL) { if(pWnd->IsKindOf(RUNTIME_CLASS(CEdit))) { ((CEdit*)pWnd)->GetSel(nStartSel, nEndSel); pCmdUI->Enable(nStartSel!=nEndSel); return; } else if(pWnd->IsKindOf(RUNTIME_CLASS(CComboBox))) { dw = ((CComboBox*)pWnd)->GetEditSel(); pCmdUI->Enable(HIWORD(dw)!=LOWORD(dw)); return; } } pCmdUI->Enable(FALSE); } void CMainFrame::OnUpdateEditClear(CCmdUI* pCmdUI) { int nStartSel, nEndSel; DWORD dw; CWnd* pWnd = GetFocus(); if(pWnd!=NULL) { if(pWnd->IsKindOf(RUNTIME_CLASS(CEdit))) { ((CEdit*)pWnd)->GetSel(nStartSel, nEndSel); pCmdUI->Enable(nStartSel!=nEndSel); return; } else if(pWnd->IsKindOf(RUNTIME_CLASS(CComboBox))) { dw = ((CComboBox*)pWnd)->GetEditSel(); pCmdUI->Enable(HIWORD(dw)!=LOWORD(dw)); return; } } pCmdUI->Enable(FALSE); } void CMainFrame::OnUpdateEditCut(CCmdUI* pCmdUI) { int nStartSel, nEndSel; DWORD dw; CWnd* pWnd = GetFocus(); if(pWnd!=NULL) { if(pWnd->IsKindOf(RUNTIME_CLASS(CEdit))) { ((CEdit*)pWnd)->GetSel(nStartSel, nEndSel); pCmdUI->Enable(nStartSel!=nEndSel); return; } else if(pWnd->IsKindOf(RUNTIME_CLASS(CComboBox))) { dw = ((CComboBox*)pWnd)->GetEditSel(); pCmdUI->Enable(HIWORD(dw)!=LOWORD(dw)); return; } } pCmdUI->Enable(FALSE); } void CMainFrame::OnUpdateEditPaste(CCmdUI* pCmdUI) { CWnd* pWnd = GetFocus(); if(pWnd!=NULL) { if(pWnd->IsKindOf(RUNTIME_CLASS(CEdit))) { pCmdUI->Enable(::IsClipboardFormatAvailable(CF_TEXT)); return; } else if(pWnd->IsKindOf(RUNTIME_CLASS(CComboBox))) { pCmdUI->Enable(::IsClipboardFormatAvailable(CF_TEXT)); return; } } pCmdUI->Enable(FALSE); } void CMainFrame::OnUpdateEditSelectAll(CCmdUI* pCmdUI) { char sz[2]; CWnd* pWnd = GetFocus(); if(pWnd!=NULL && pWnd->IsKindOf(RUNTIME_CLASS(CEdit)) || pWnd->IsKindOf(RUNTIME_CLASS(CComboBox))) { pCmdUI->Enable(pWnd->GetWindowText(sz,2)); return; } pCmdUI->Enable(FALSE); } void CMainFrame::OnUpdateEditUndo(CCmdUI* pCmdUI) { CWnd* pWnd = GetFocus(); if(pWnd!=NULL) { if(pWnd->IsKindOf(RUNTIME_CLASS(CEdit))) { pCmdUI->Enable(((CEdit*)pWnd)->CanUndo()); return; } } pCmdUI->Enable(FALSE); } Vincent Mascart 100425.1337@compuserve.com
| Вернуться в корень Архива |