社区
界面
帖子详情
edit控件中被选中的文本不能用Ctrl+C, Ctrl+X, Ctrl+V等热键操作的问题
yuanchao111
2005-05-19 03:07:09
我的edit控件是在对话框上直接加上的.在控件里面选择文本后,点击右键可以看到弹出菜单中有copy,cut,paste,undo等项,但是为什么我不能用热键比如Ctrl+C, Ctrl+X, Ctrl+V等对选中文本进行操作呢?
还需要重载PreTranslateMessage()函数做这些系统基本的热键做处理吗?或者是有什么设置我没搞好啊?
...全文
355
6
打赏
收藏
edit控件中被选中的文本不能用Ctrl+C, Ctrl+X, Ctrl+V等热键操作的问题
我的edit控件是在对话框上直接加上的.在控件里面选择文本后,点击右键可以看到弹出菜单中有copy,cut,paste,undo等项,但是为什么我不能用热键比如Ctrl+C, Ctrl+X, Ctrl+V等对选中文本进行操作呢? 还需要重载PreTranslateMessage()函数做这些系统基本的热键做处理吗?或者是有什么设置我没搞好啊?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
vcmute
2005-05-20
打赏
举报
回复
重载Edit的Cut等,如下
void CSdi_formView::OnEditCut()
{
// TODO: Add your command handler code here
GetFocus()->SendMessage(WM_CUT);
}
void CSdi_formView::OnUpdateEditCut(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable();//此处可根据具体情况Enable
}
yuanchao111
2005-05-20
打赏
举报
回复
to vcmute(横秋),这样好像不行吧。
我的问题是CFormView对其上的CEdit控件中的选中文本的Ctrl+X等消息不做相应。
你这样只是搞了一个这样的函数OnEditCut() ,我估计你是在某个控件被选中,有focus时这个消息响应函数被调用的。这样的话,只要是有focus的控件,你就给它发了一个WM_CUT消息。呵呵,如果是一个没有选中文本的控件,也就无所谓了。如果是选中文本的控件,人家没剪切,你就发了剪切文本的消息,这样怎么行?
commandconque
2005-05-20
打赏
举报
回复
mark
yuanchao111
2005-05-19
打赏
举报
回复
bohut(伯虎)的方法不是不行,但是如果你的formview中的edit控件太多时,一个一个做判断就太麻烦了。
我自己把它解决了,我看了看MFCCFormView中PreTranslateMessage的源代码,发现它先调用Cview的CView::PreTranslateMessag函数,如果不成功,然后再调用GetTopLevelFrame()得到最顶层的frame,调用它的CFrameWnd::PreTranslateMessag函数,如果不成功,最后再调用PreTranslateInput()函数。
照分析,很有可能对于Ctrl+C, Ctrl+X, Ctrl+V这样的热键消息,CView::PreTranslateMessag或者CFrameWnd::PreTranslateMessag返回了TRUE,但是并没有做相应的处理,最后真正做处理的PreTranslateInput()函数便没有被调用到。恐怕这是MFC中CFormView的一个bug吧
我继承于CFormView的类CMyFormView中,我先判断是不是Ctrl+C, Ctrl+X, Ctrl+V这样的热键消息,如果是,就调用的PreTranslateInput()函数处理并返回。如果不是这样的消息,则调用基类的CFormView::PreTranslateMessage(pMsg)函数。
BOOL CMyFormView::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_KEYDOWN)
if(GetKeyState(VK_CONTROL) & 0x80)
if(pMsg->wParam == 'c' || pMsg->wParam == 'C'
||pMsg->wParam == 'v' || pMsg->wParam == 'V'
||pMsg->wParam == 'z' || pMsg->wParam == 'Z'
||pMsg->wParam == 'x' || pMsg->wParam == 'X')
{
return PreTranslateInput(pMsg);
}
return CFormView::PreTranslateMessage(pMsg);
}
yuanchao111
2005-05-19
打赏
举报
回复
我刚才又仔细检查了一下,发现如果edit控件是画在CDialog类的对话框资源上的话,什么都不用做,就可以用Ctrl+C, Ctrl+X, Ctrl+V等热键操作了,
但是我的edit控件是画在CFormView类加载的对话框资源上,就不能用Ctrl+C, Ctrl+X, Ctrl+V等热键操作了,
可能是因为CFormView的原因吧。对于这些系统标准的热键,似乎没有必要自己重载PreTranslateMessage吧,应该有别的办法吧,哪位知道?
bohut
2005-05-19
打赏
举报
回复
重载PreTranslateMessage()函数,函数里添加如下代码
if(GetFocus() == GetDlgItem(IDC_EDIT2)) //判断焦点在不在edit框内
{
if (pMsg->message == WM_KEYDOWN)
{
switch (pMsg->wParam)
{
case VK_ESCAPE:
SetFocus();
return TRUE;
case 'A':
if(::GetKeyState(VK_CONTROL) < 0)
{
AfxMessageBox("Ctrl + A!");
。。。。。。。。。
朱老师QT系列课程-1.5.QT标准
控件
之InputWidget
本课程主要讲了QT的编辑器类
控件
,包括: InputWidget ComboBox FontComboBox Line
Edit
Text
Edit
PlainText
Edit
SpinBox DoubleSpinBox Time
Edit
Date
Edit
Date/Time
Edit
Dial HorizontalScrollBar ...
crtlc
不能
复制文件_
ctrl
+c
不能
复制怎么办
展开全部
Ctrl
+1快速修复(最经典的快捷键,就不用多说了)
Ctrl
+D:删除当前行62616964757a686964616fe78988e69d8331333363376533
Ctrl
+Alt+↓复制当前行到下一行(复制增加)
Ctrl
+Alt+↑复制当前行到上一行(复制增加)Alt+↓当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)Alt+↑当前行和上面一行交互位置(同上)Alt...
Delphi常用的快捷键
快捷键对于提高编程速度有着很重要的影响,本文汇总整理了Delphi常用的快捷键,供大家参考之用:
Ctrl
+PageUp将光标移至本屏的第一行,屏幕不滚动。
Ctrl
+PageDown将光标移至本屏的最后一行,屏幕不滚动。
Ctrl
+↓向下滚动屏幕,光标跟随滚动不出本屏。
Ctrl
+↑向上滚动屏幕,光标跟随滚动不出本屏。
Ctrl
+Shift+NUM在光标行设置最多九个临时标志号,对
一种
文本
编辑器和控制台实现方案
一种
文本
编辑器和控制台实现方案 by Que's C++ Studio 阙荣文 20210602 0. 需求 在所有 Windows 标准
控件
中
,
Edit
大概是最复杂者之一.试想一下,实现
Edit
至少需要考虑以下
问题
: 选择字体绘制字符 响应键盘输入 响应鼠标动作,准确
选
中
指定字符 访问系统剪贴板,支持
热键
Ctrl
-C,
Ctrl
-V 等 计算长度宽度以正确设置滚动范围 ... 这些还仅仅是一个标准
Edit
控件
的最基本功能,其
中
的大量细节已经有...
教程-Delphi
操作
快捷键
************************************************************** Delphi快捷键-全-高手用-南山古桃(新手)-同学共进 **************************************************************
Ctrl
+PageUp 将光标移至本屏的第一行,屏幕不滚动。
Ctrl
...
界面
15,979
社区成员
115,896
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章