CEdit 控制键盘操作
写在前面的话:在工作中要实现这样一个功能,在一个树形控件中选择要发送消息的客户,添加到一个列表控件中,点击确定跳到一个信息发送页面如下图,在发送人编辑框中显示选择的客户,要实现的就是即允许用户删除用户列表中的用户,但是又不能让用户只删除一个用户标识的一部分,所以要对键盘操作进行控制。
实现对键盘的控制,在网上搜了一下有两种方法,重载PreTranslateMessage()函数,或者添加OnKeddown事件处理函数,我选择的是第一种。代码如下:
// 控制编辑框删除用户
BOOL SendMsgDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if(WM_KEYDOWN == pMsg->message && m_editClients.m_hWnd == pMsg->hwnd)
{
if( == pMsg->wParam)
{
POINT cp = m_editClients.GetCaretPos();
int xy = m_editClients.CharFromPos(cp);
int charIndex = LOWORD(xy);
if(charIndex <= )
{
return true;
} CString strOld, strTemp;
m_editClients.GetWindowTextW(strOld); if(strOld.GetAt(charIndex - ) == _T(';'))
{
strTemp = strOld.Left(charIndex - );
strTemp = strTemp.Right(strTemp.GetLength() - strTemp.ReverseFind(_T(';')) - ); char *pszIp = UnicodeToAscii(strTemp);
SendMessage(WM_DELETE, (WPARAM)pszIp, ); strTemp.Append(_T(";"));
int iSel = strOld.Find(strTemp);
strOld.Replace(strTemp, _T(""));
m_editClients.SetWindowTextW(strOld);
m_editClients.SetSel(iSel, iSel);
return true;
}
else
{
return true;
}
}
} return CDialogEx::PreTranslateMessage(pMsg);
}
对代码稍微解释一下:
第5行代码是判断事件是否是发生在CEdit控件中的按键事件
第7行代码是判断按下的键是否是删除键,如果不是则返回true,表示这个按键消息不做处理。
其中9-11行代码是获取光标所在处的字符在CEdit控件值字符串中位置。
第17-32行代码是对字符串做处理,我的做法是寻找到‘;’号之间的字符串,并将之替换为空字符串,相当于删除它。
第25-26行代码是发送一个消息,告诉系统删除了一个用户,需要同步内存中的用户列表。
第33行代码是设置光标的位置。使用CEdit控件的SetSel()函数。
这样这个小功能就实现了,即如果在CEdit控件中删除字符,只有遇到的是分号时才能删除,并且删除从当前分号到前面一个分号之间所有的字符,如果删除的不是分号,则不能删除。
CEdit 控制键盘操作的更多相关文章
- JS快速入门(二)
目录 JS快速入门(二) 结构图 BOM window对象 open() window子对象 location对象 history对象(了解) navigator 对象 screen对象 BOM 定时 ...
- C1 能力认证——Web进阶
C1 能力认证--Web进阶 DOM节点操作-上 名称 描述 getElementById() 获取带有指定id的节点 getElementsByTagName() 获取带有指定标签名的节点集合 qu ...
- VC++6.0和VS2005在编写MFC应用程序时,操作方面的差异
VC++6.0和VS2005在编写MFC应用程序时,操作方面的差异 一直用VC++6.0,对VS2005不太了解,下面简单的熟悉一下VS2005的一下功能,总结一下VS2005在编写MFC时候的应用. ...
- 创建透明CEdit控件
1.在资源编辑器中将Edit控件的Border设为none(当然也可以在代码中修改窗口样式) 2.在重载CEdit的类中响应MSG_OCM_CTLCOLOREDIT消息,在处理函数中将背景模式设为透明 ...
- MATLAB命令大全和矩阵操作大全
转载自: http://blog.csdn.net/dengjianqiang2011/article/details/8753807 MATLAB矩阵操作大全 一.矩阵的表示在MATLAB中创建矩阵 ...
- LevelDB的源码阅读(四) Compaction操作
leveldb的数据存储采用LSM的思想,将随机写入变为顺序写入,记录写入操作日志,一旦日志被以追加写的形式写入硬盘,就返回写入成功,由后台线程将写入日志作用于原有的磁盘文件生成新的磁盘数据.Leve ...
- 爬虫模块介绍--selenium (浏览器自动化测试工具,模拟可以调用浏览器模拟人操作浏览器)
selenium主要的用途就是控制浏览器,模仿真人操作浏览器的行为 模块安装:pip3 install selenium 需要控制的浏览器 from selenium import webdriver ...
- CEdit控件[转]
1.CButton.CEdit等从CWnd继承了重要的功能: 使用CWnd::SetWindowText和CWnd::GetWindowText可以设置和获得窗口或控件上的文本.CWnd::SetFo ...
- ROS Learning-031 (提高篇-009 A Mobile Base-07) 控制移动平台 --- (操作)人机交互
ROS 提高篇 之 A Mobile Base-07 - 控制移动平台 - (操作)人机交互 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14 ...
随机推荐
- Oracle查询备注信息
查询表的备注信息: SELECT TABLE_NAME, TABLE_TYPE, COMMENTS FROM USER_TAB_COMMENTS WHERE TABLE_NAME = 'MR_DEPT ...
- DIY手机万能红外遥控器
DIY手机万能红外遥控器 1.手机安装软件:遥控精灵 2.红外二极管两个(旧的遥控器里面可以拆) 3.耳机的插头一个 步骤:首选讲两个二极管的正负相接(即a二极管的正极连接b二极管的负极,a二极管的负 ...
- java中的 public protected friendly private
1.public:public表明该数据成员.成员函数是对所有用户开放的,所有用户都可以直接进行调用 2.private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直 ...
- Oracle-client支持exp|imp|rman
官方精简版的驱动,不支持持exp/imp/rman,故需要安装oracle_client客户端. 实验环境: Centos6.5 x64 Oracle 11.2.0.4.0 Oracle_clie ...
- Eclipse集成ijkplayer并实现本地和网络视频播放等
概述 Eclipse 集成ijkplayer demo,播放本地视频.和rtmp流. 详细 代码下载:http://www.demodashi.com/demo/10630.html 原文地址:Ecl ...
- 掀开图片显示介绍的css效果
概述 主要运用到CSS3的3D transform等变换 详细 代码下载:http://www.demodashi.com/demo/10575.html 一.概述 1.主要运用到CSS3的3D tr ...
- 国内四大炒股软件APP 全面技术解析
随着人们的焦点逐步由电脑PC端转为手机端之后,国内炒股软件也逐步开始推出手机炒股APP,但是面对如此众多的都以“最牛.最佳”等冠名的APP真的实至名归吗?为了大家不再走弯路,不沉迷智能选股,笔者将近期 ...
- hibernate4无法保存数据
hibernate4无法保存数据 author: hiu 以后都发文章我都备注一下作者了,hiu就是我了 红色字体更新日期:2014-07-08 初次使用hibernate4,使用getCurrent ...
- How to forcefully delete a daemonset or a pod in kubernetes cluster
I have setup a kubernetes cluster which is working fine. I created deployment with type as daemonset ...
- IntelliJ Idea解决Could not autowire. No beans of 'xxxx' type found的错误提示
本文转自:http://blog.csdn.net/u012453843/article/details/54906905 1.问题描述 在Idea的spring工程里,经常会遇到Could not ...