CFormView的一个简单问题

远古猛犸象 2003-08-26 10:49:21
用生成向导生成的MDI程序,View基类采用CFormView,然后在里面加个CEdit控件,奇怪的是怎么这个CEdit控件不支持Ctrl+X、Ctrl+C等这些键盘剪贴板命令,但是使用鼠标右键的复制、粘贴等又是可以的。
要如何才能打开这些键盘功能?
...全文
43 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
vbhelp 2003-08-27
  • 打赏
  • 举报
回复
建议用SetCapture函数试一下!!HAHA......
shiyongfan 2003-08-27
  • 打赏
  • 举报
回复
fengqinggao(风清高) 和 bcpl(林平之) 说得对极了,我照做后就行了,给他们分吧。不过上层的星星星说得更好,只不过麻烦了点儿而已。他说的可以让菜单中的编辑和加速键存在
的时候,CFormView中的CEdit也能使用CTRL+C等。要是全面解决的话,还是星星星说得好。
bcpl 2003-08-27
  • 打赏
  • 举报
回复
与加速键资源冲突
蒋晟 2003-08-27
  • 打赏
  • 举报
回复
HOWTO: How to Enable Edit Menu Commands for Edit Controls

Q145616
First, determine if it is a CEdit control that has the focus:

// IsEdit: a helper function to determine if a given CWnd pointer
// points to a CEDit control.
// Use the SDK ::GetClassName() function because MFC IsKindOf
// fails if no CEdit variable has been created for the control you're
// trying to test.

BOOL CMyFormView::IsEdit( CWnd* pWnd )
{
ASSERT( pWnd != NULL );
HWND hWnd = pWnd->GetSafeHwnd();
if (hWnd == NULL)
return FALSE;

TCHAR szClassName[6];
return ::GetClassName(hWnd, szClassName, 6) &&
_tcsicmp(szClassName, _T("Edit")) == 0;
}



Add an UPDATE_COMMAND_UI handler for ID_EDIT_COPY & ID_EDIT_CUT:

// UPDATE_COMMAND_UI handler for Edit Copy and Edit Cut which both
// require that the current focus is on an edit control that has
// text selected.

void CMyFormView::OnUpdateNeedSel(CCmdUI* pCmdUI)
{
// get the current focus & determine if its on a CEdit control
CWnd* pWnd = GetFocus();
if (NULL == pWnd || !IsEdit( pWnd ))
{
pCmdUI->Enable( FALSE );
}
else
{
CEdit* pEdit = (CEdit*)pWnd;
int nBeg, nEnd;

pEdit->GetSel( nBeg, nEnd );
pCmdUI->Enable( nBeg != nEnd );
}
}



Add UPDATE_COMMAND_UI handlers for ID_EDIT_PASTE:

// UPDATE_COMMAND_UI handlers for Edit Paste requires that focus be
// on an edit control and that the clipboard contains text to be
// pasted into the control.

void CMyFormView::OnUpdateNeedClip(CCmdUI* pCmdUI)
{
// get the current focus & determine if its on a CEdit control
// also check to see if the control is read-only.
CWnd* pWnd = GetFocus();
if ( NULL == pWnd ||
!IsEdit( pWnd ) ||
(pWnd->GetStyle() & ES_READONLY) != 0 )
{
pCmdUI->Enable( FALSE );
}
else
pCmdUI->Enable(::IsClipboardFormatAvailable(CF_TEXT));
}



Add standard handlers for ID_EDIT_COPY, ID_EDIT_CUT, and ID_EDIT_PASTE:

void CMyFormView::OnEditCopy()
{
CEdit* pEdit = (CEdit*)GetFocus();
ASSERT( IsEdit( pEdit) );
pEdit->Copy();
}

void CMyFormView::OnEditCut()
{
CEdit* pEdit = (CEdit*)GetFocus();
ASSERT( IsEdit( pEdit) );
pEdit->Cut();
}

void CMyFormView::OnEditPaste()
{
CEdit* pEdit = (CEdit*)GetFocus();
ASSERT( IsEdit( pEdit) );
ASSERT(::IsClipboardFormatAvailable(CF_TEXT));
pEdit->Paste();



Command what is yours
Conquer what is not
fengqinggao 2003-08-26
  • 打赏
  • 举报
回复
因为CFormView用不到拷贝粘贴之类的,所以将菜单和工具条上的“拷贝”、“粘贴”等命令删除,如果还不行,查看你的资源管理中的Accelerator项中,有没有拷贝、粘贴的快捷方式,如果有,删除,就应该可以了
tonybaobao 2003-08-26
  • 打赏
  • 举报
回复
是不是ctrl c,ctrl v被菜单设置掉了?应该也不会啊。。。
shiyongfan 2003-08-26
  • 打赏
  • 举报
回复
我也等着答案呢。估计是CTRL+X、CTRL+C没有传递到控件。不知道怎么解决。
whoo 2003-08-26
  • 打赏
  • 举报
回复
kk 快捷间有没有被菜单占用。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧