社区
界面
帖子详情
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()函数做这些系统基本的热键做处理吗?或者是有什么设置我没搞好啊?
...全文
689
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!");
。。。。。。。。。
java运用jni调用dll实现屏蔽系统
热键
和任务栏
本文介绍了一种利用Java和C++结合的方式,实现屏蔽系统
热键
及隐藏任务栏的功能。通过编写Java类调用本地C++库,实现了对特定
热键
如
Ctrl
+Alt+Del等的屏蔽,并提供了隐藏任务栏的方法。
java jni 键盘_Java运用JNI调用dll(含源码)实现屏蔽系统
热键
和任务栏
这篇博客详细介绍了如何通过Java调用C++动态链接库(DLL)来实现
热键
屏蔽功能。首先创建Java包和类,然后使用`javah`生成头文件,接着在VC6.0
中
编写DLL工程,包括头文件和源文件,实现了屏蔽特定键盘组合键的功能,如
Ctrl
+Alt+Del等。最后,展示了如何在Java
中
调用DLL的`Attach`和`Detach`方法来开启和关闭
热键
屏蔽。
Unity说明文档翻译-Unity Hotkeys
本文提供了一个Unity默认
热键
的概览,包括工具、游戏对象、窗口等
操作
的快捷键,并附带了Windows和MacOSX系统的PDF表格供下载。
EMACS学习(一)
本文介绍了Emacs编辑器的基本使用方法,包括文件
操作
、撤销重做、光标移动、
文本
编辑及复制粘贴等功能。适合初学者入门。
JAVA
中
的快捷键
本文为您详细介绍了IDE快捷键的使用,包括
文本
编辑、文件管理、项目构建、重构等核心功能,助您提高编程效率。从基本的
Ctrl
+1快速修复到高级的重构
操作
,覆盖了日常开发
中
几乎所有的需求。
界面
15,976
社区成员
115,866
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章