VS2015を使い、GUIアプリケーションを作成しています。
CMainFrameのメンバがCDockablePaneの派生クラス DockPane
DockPaneのメンバがCRichEditCtrlの派生クラス RichCtrl
です。
作成されたCRichEditCtrl内で
Ctrl +A(全選択)、Ctrl +X(切り取り)、Ctrl +Z(アンドゥ)、等は効くのですが
文字選択した後Ctrl +C だけ効かないのが現象となっています。
ちなみにポップアップメニューのコピーは有効でした。
なぜこのようになるのか見当がつきません。
CEditを使った場合はうまくいくようです。
CRichEditCtrl内でCtrl+Cを有効化する方法をご教示願いたく思います。
RichCtrlの実装抜粋すると
C++
1BEGIN_MESSAGE_MAP(RichCtrl, CRichEditCtrl) 2 3 ON_WM_CONTEXTMENU() 4 ON_COMMAND(ID_EDIT_COPY, OnPopupCopy) 5 ON_UPDATE_COMMAND_UI(ID_EDIT_COPY, OnUpdatePopupCopy) 6 ON_COMMAND(ID_EDIT_CUT, OnPopupCut) 7 ON_UPDATE_COMMAND_UI(ID_EDIT_CUT, OnUpdatePopupCopy) 8 ON_COMMAND(ID_EDIT_PASTE, OnPopupPaste) 9 ON_COMMAND(ID_EDIT_CLEAR_ALL, OnPopupCleartext) 10 ON_UPDATE_COMMAND_UI(ID_EDIT_CLEAR_ALL, OnUpdatePopupCleartext) 11 ON_COMMAND(ID_EDIT_SELECT_ALL, OnPopupStatusSelectall) 12 ON_UPDATE_COMMAND_UI(ID_EDIT_SELECT_ALL, OnUpdatePopupCleartext) 13 ON_COMMAND(ID_EDIT_UNDO, OnPopupUndo) 14 ON_UPDATE_COMMAND_UI(ID_EDIT_UNDO, OnUpdatePopupUndo) 15 16END_MESSAGE_MAP() 17 18void RichCtrl::OnContextMenu(CWnd* pWnd, CPoint point) 19{ 20 CMenu menu; 21 if (menu.LoadMenu(IDR_REPOPUP)) 22 { 23 CMenu* pPopup = menu.GetSubMenu(0); 24 ASSERT(pPopup != NULL); 25 pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, 26 point.x, point.y, this); 27 } 28} 29void RichCtrl::OnPopupCopy() 30{ 31 SendMessage(WM_COPY, 0, 0); 32} 33 34void RichCtrl::OnUpdatePopupCopy(CCmdUI* pCmdUI) 35{ 36 SendMessage(EM_EXGETSEL, 0, (LPARAM)&m_crStatus); 37 pCmdUI->Enable(m_crStatus.cpMin != m_crStatus.cpMax); 38} 39void RichCtrl::OnPopupCut() 40{ 41 SendMessage(WM_CUT, 0, 0); 42} 43 44void RichCtrl::OnPopupUndo() 45{ 46 SendMessage(WM_UNDO, 0, 0); 47} 48 49void RichCtrl::OnUpdatePopupUndo(CCmdUI* pCmdUI) 50{ 51 pCmdUI->Enable((SendMessage(EM_CANUNDO, 0, 0)) != 0); 52} 53 54void RichCtrl::OnPopupPaste() 55{ 56 SendMessage(WM_PASTE, 0, 0); 57} 58 59void RichCtrl::OnPopupStatusSelectall() 60{ 61 m_crStatus.cpMin = 0; 62 m_crStatus.cpMax = -1; 63 SendMessage(EM_EXSETSEL, 0, (LPARAM)&m_crStatus); 64} 65 66void RichCtrl::OnUpdatePopupCleartext(CCmdUI* pCmdUI) 67{ 68 pCmdUI->Enable(SendMessage(WM_GETTEXTLENGTH, NULL, NULL) != 0); 69} 70 71void RichCtrl::OnPopupCleartext() 72{ 73 OnPopupStatusSelectall(); 74 SendMessage(WM_CLEAR, 0, 0); 75}
のようになっています。
よろしくお願いいたします。
追記
//アプリ名.rcファイル "C", ID_EDIT_COPY, VIRTKEY, CONTROL, NOINVERT
をコメントアウトした場合、CRichEditCtrlのCtrl+Cは効きましたが
同じ画面上の別のCScrollViewからの派生クラスでのCtrl+Cが効かなくなります。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/30 01:18
2019/01/30 01:44
2019/01/30 02:00 編集
2019/01/30 02:12
2019/01/30 02:41