首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在MFC中,当CEdit控件达到最大字符数时,退格键不起作用

的原因是CEdit控件默认情况下不会自动删除超出最大字符数限制的字符。这意味着当达到最大字符数限制后,无法通过退格键删除已输入的字符。

要解决这个问题,可以通过以下步骤实现退格键在达到最大字符数时起作用:

  1. 在CEdit控件的消息映射函数中,捕获退格键的消息。可以使用ON_WM_CHAR()宏来处理WM_CHAR消息。
  2. 在消息处理函数中,判断当前CEdit控件中的字符数是否已达到最大字符数限制。可以使用CEdit控件的GetWindowTextLength()函数获取当前文本的字符数。
  3. 如果已达到最大字符数限制,需要手动删除最后一个字符。可以使用CEdit控件的SetSel()ReplaceSel()函数来实现删除操作。首先使用SetSel()函数将光标位置设置为最后一个字符,然后使用ReplaceSel()函数将最后一个字符替换为空字符串。

以下是一个示例代码:

代码语言:txt
复制
// 声明消息映射
BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
    ON_WM_CHAR()
END_MESSAGE_MAP()

// 处理WM_CHAR消息
void CMyDialog::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
    CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT); // 获取CEdit控件指针
    int maxLength = 10; // 最大字符数限制

    if (pEdit && pEdit->GetWindowTextLength() >= maxLength && nChar == VK_BACK)
    {
        pEdit->SetSel(maxLength - 1, maxLength); // 设置光标位置为最后一个字符
        pEdit->ReplaceSel(_T("")); // 删除最后一个字符
    }

    CDialog::OnChar(nChar, nRepCnt, nFlags);
}

这样,当CEdit控件中的文本达到最大字符数限制时,退格键将会删除最后一个字符。

推荐的腾讯云相关产品:腾讯云云服务器(CVM)和腾讯云数据库(TencentDB)。您可以通过以下链接了解更多信息:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

多线程编程10个例子--2

m_ctrlD; MultiThread8Dlg.cpp文件添加如下内容: 为了文件能够正确使用同步类,文件开头添加:#include "afxmt.h" 定义临界区和一个字符数组,为了能够不同线程间使用...MFC,CEvent 类对象有两种类型:人工事件和自动事件。...文件添加如下内容: 为了文件能够正确使用同步类,文件开头添加 #include "afxmt.h" 定义事件对象和一个字符数组,为了能够不同线程间使用,定义为全局变量。...这个被CSemaphore 类对象所控制的资源可以同时接受访问的最大线程该对象的构建函数中指定。...但是当前可用计数减 小到0,则说明当前占用资源的线程已经达到了所允许的最大数目,不能再允许其它线程的进入,此时的信号量信号将无法发出。

2K70

临界区、互斥量、信号量

虽然临界区同步速度很快,但却只能用来同步本进程内的线程,而不可用来同步多个进程的线程。 MFC提供了很多功能完备的类,我用MFC实现了临界区。...因为使用互斥不仅仅能够同一应用程序不同线程实现资源的安全共享,而且可以不同应用程序的线程之间实现对资源的安全共享。...它允许多个线程同一刻访问同一资源,但是需要限制同一刻访问此资源的最大线程数目。在用CreateSemaphore()创建信号量即要同时指出允许的最大资源计数和当前可用资源计数。...但是当前可用计数减小到0则说明当前占用资源的线程已经达到了所允许的最大数目,不能在允许其他线程的进入,此时的信号量信号将无法发出。...信号量S是一个整数,S大于等于零代表可供并发进程使用的资源实体,但S小于零则表示正在等待使用共享资源的进程

2.6K20
  • QT和MFC的优缺点比较

    比如说有一个dialog包含CEdit控件,如果没有调用DoModal()你就不能使用GetWindowText()。否则将会莫名其妙的失败。...不同的类调用方式也是有很强的连贯性。返回值也很有逻辑性。所有一切达到了简单和强大的和谐统一。一旦你使用了其中一个类,其他的类也就触类旁通,因为他们是一致的。...这是一个非常强大的类,你会喜欢很多地方用它的。 国际化 使用MFC是可以国际化的,但是需要将每一个字符串放在一个字符串表代码到处使用LoadString(IDENTIFIET)。...使用Qt的时候,只需要将字符串置于函数tr()程序开发这算是举手之劳。可以直接在代码改变字符串的参考。...(译者注:后面关于购买价格等问题删去,因为价格不固定,如果有疑问请到官方网站查询价格) 发布 发布基于MFC的软件,必须依靠存在于客户电脑上的MFC

    2.4K20

    Qt和MF优缺点分析

    比如说有一个dialog包含CEdit控件,如果没有调用DoModal()你就不能使用GetWindowText()。否则将会莫名其妙的失败。...不同的类调用方式也是有很强的连贯性。返回值也很有逻辑性。所有一切达到了简单和强大的和谐统一。一旦你使用了其中一个类,其他的类也就触类旁通,因为他们是一致的。...这是一个非常强大的类,你会喜欢很多地方用它的。国际化使用MFC是可以国际化的,但是需要将每一个字符串放在一个字符串表代码到处使用LoadString(IDENTIFIET)。...使用Qt的时候,只需要将字符串置于函数tr()程序开发这算是举手之劳。可以直接在代码改变字符串的参考。...(译者注:后面关于购买价格等问题删去,因为价格不固定,如果有疑问请到官方网站查询价格)发布发布基于MFC的软件,必须依靠存在于客户电脑上的MFC

    1.4K50

    WINDOWS核心编程--Windows程序内部运行机制

    第三个参数:wParam WPARAM类型 根据不同的消息 代表不同的意思:例如 收到 WM_LBUTTONDOWN 消息,wParam 鼠标按钮、Shift和Ctrl的状态。...程序 Windows 下运行时,它唯一标识运行的实例(注意,只有运行的程序实例,才有实例句柄)。...第四个参数 nCmdShow 指定程序的窗口应该如何显示,例如最大化、最小化、隐藏等。这个参数的值由该程序的调用者所指定,调用ShowWindow()可以使用到该值。...字符消息被投递到调用线程的消息队列 调用getMessage的时候被取出 敲击键盘,产生 这两个消息附加参数-----虚拟代码和扫描码 我们程序只要得到某个字符的ASCII码 BOOL TranslateMessage...仅编译DEC Alpha处理器 _DEBUG 包括诊断的调试版本 _MBCS 编译多字节字符集 _UNICODE 一个应用程序打开Unicode AFXAPI MFC提供的函数 CALLBACK

    1.5K50

    Qt和MFC的区别

    比如说有一个dialog包含CEdit控件,如果没有调用DoModal()你就不能使用GetWindowText()。否则将会莫名其妙的失败。...不同的类调用方式也是有很强的连贯性。返回值也很有逻辑性。所有一切达到了简单和强大的和谐统一。一旦你使用了其中一个类,其他的类也就触类旁通,因为他们是一致的。...这是一个非常强大的类,你会喜欢很多地方用它的。 国际化 使用MFC是可以国际化的,但是需要将每一个字符串放在一个字符串表代码到处使用LoadString(IDENTIFIET)。...使用Qt的时候,只需要将字符串置于函数tr()程序开发这算是举手之劳。可以直接在代码改变字符串的参考。...(译者注:后面关于购买价格等问题删去,因为价格不固定,如果有疑问请到官方网站查询价格) 发布 发布基于MFC的软件,必须依靠存在于客户电脑上的MFC

    1.4K41

    【转】使用DirectUI技术实现QQ界面

    将程序员从繁琐的界面绘制工作解脱出来,专心开发逻辑代码。还能大大减少代码量,因为据统计,传统MFC程序,界面代码大约占总代码的1/3强!...不知道呀,转的时候就没有 xml文件也引入了网页样式(style)的概念,style控制着网页中一个元素的外观。同理,directui xml文件的样式(style)控制着一个控件的外观。...像这样的需求,界面开发是比较常见的。 c++代码,剩余的只是界面与程序逻辑的借口。比如,QQ2009从服务器接收添加用户的通知,然后操作界面将此用户显示出来。...如此看来,c++代码完全没有了绘制界面的代码。 四.后话 DirectUI是个好技术,只是微软不愿将其公开,其中最大的原因是与它的.NET战略冲突。...当你抛弃微软,自己开发控件,有多大的机率能比微软开发的强?有微软的稳定?有微软的兼容性好?还有一个问题是:由于这些控件都是各厂家自己开发的,那么原来mfc程序员需要对这些新的控件进行重新学习。

    1.8K50

    UDP即时通信

    :首先将界面设计区的“确定”修改成“启动”,属性选项卡中选择caption属性,“取消”按钮修改成“退出”;工具箱,选择列表框、IP地址,编辑框,按钮,静态编辑框以及组合框等控件,然后选择这些控件...,以及属性中选择ID选项,将控件的ID修改,同时右击控件,选择添加事件处理程序,依次主对话框的cpp文件添加 事件处理程序,实现这些控件的功能需求; 2.编写代码实现: 首先在UDProcsCommDlg.h...头文件定义变量和声明一些方法,用于连接客户端的请求,以及SOCKET的结构,收发消息的结构体;然后UDProcsCommDlg.cpp文件完善主对话框的构造函数,将端口等控件的初始值设置成0;同时主对话框的初始化函数...;在对话框cpp文件定义消息宏映射; 主对话框添加OnReadClose()函数自定义关闭和缓冲区的消息;同时,添加“停止”,“发送”按钮的事件处理函数,OnStop函数将界面上的控件设置成...false和true;程序运行停止,将Socket清空;OnSend函数,获取IP地址的相关信息,将数据进行发送; 1.项目中的资视图中,选择dialog,设置页面布局,界面上添加一些控件

    1.4K20

    MFC控件编程之 按钮编辑框.静态文本的使用,以及访问控件的七种方法.

    创建一个MFC Dlg对话框. ? 关于对话框的标题.我们都可以在他们各自的属性设置. 也可以设置自己特有的ID.比如编辑框举例 ? 常用的API:   1.根据控件ID.获取控件的标题名称.   ...GetDlgItemText(控件ID,字符串缓冲区);   2.根据控件ID.设置控件的标题.   SetDlgItemText(控件ID.字符串); 二丶编写代码.获取编辑框字符串的个数....MFC中有一个这种函数. 用来跟关联变量的设置的. ? DDX_Text 是跟变量关联了....如果获取字符串可以使用这两个函数.获取跟设置. 也可以设置编辑框的最大字符....或者最小字符.等等.具体查询MSDN m_Edit.GetWindowText(); m_Edit.SetWindowText(); 3.6发送消息进行控件操作.

    3.5K30

    CListBox

    单选列表框里,用户只可选择一个项。多选列表框里,可选择许多项。当用户选择某项,其高亮显示且列表框给父窗口发送一个通知消息。   可从对话模板或直接在你的代码创建列表框。...要在对话模板中使用列表框,可在对话框类声明一个CListbox 变量,再在对话框类的DoDataExchange中使用DDX_Control连接成员变量到此控件(向对话框类添加控件变量,ClassWizard...  字符串操作:  AddString 添加一个字符串到列表框  DeleteString 从列表框删除一个字符串  InsertString 列表框中指定位置插入一个字符串  ResetContent... 清空列表框所有入口  Dir 从当前目录添加文件名称到列表框  FindString 列表框查找一个字符串  FindStringExact 查找与指定的字符串匹配的第一个列表框字符串 ...SelectString 查找并选择单选列表框的一个字符串    可覆盖的函数 DrawItem 自绘制列表框的一个可视部分改变,被框架调用  MeasureItem 自绘制列表框创建,被框架调用来确定列表框维

    1.3K80

    MFC进度条同步问题

    为了说明该功能的实现原理,本例提供了一个范例程序prgsbar,它演示了在编辑视图里显示文本文件,加载文本文件界面的状态条的进度指示器仿真显示文件的加载过程,文本装载完毕后,进度条隐藏。...一、实现方法   虽然Visual C++MFC类提供了标准的进度指示器控件(progress control),但是我们不能在状态栏里直接使用这个控件,要解决这个问题,可以创建一个可重用C++类CProgStatusBar...注意在这里创建进度指示器控件没有用WS_VISIBLE,因为我们要实现的目标是仅仅装载文件进度条才显现,其余时间内应用程序都隐藏它。   ...当应用程序不做任何事情MFC程序总是在这个位置显示资源串AFX_IDS_IDLEMESSAGE表示的文本,其缺省值为”就绪”,当然读者朋友们可以在当前项目的RC文件任意修改这个值,不管怎样,MFC...二、编程步骤   1、 启动Visual C++6.0,生成一个单文档应用程序prgsbar,项目的视图类的基类选择CEdit类;   2、 程序的Resource.h文件添加自定义消息的定义:

    1.1K10

    VC6.0基础知识使用小结

    这段时间使用MFC做媒体播放器项目,查询了不少资料,用到的技术主要有ADO、多线程、DirectShow、MFC相关控件包括ActiveX控件(Windows Media Player、Active...,比如IDR_MAINFRAME_MENU,这样的话就可以该对话框类对象创建使用时就可以显示该菜单了。...目录: 1)   View获得Doc指针   2)   App获得MainFrame指针   3)   View获得MainFrame指针   4)   获得View(已建立)指针...10)   从文档类取得视图类的指针            从文档获得视图类指针目的一般为了控制同一文档的多个视图的定位问题,我的体会特别是文字处理CEditView产生多个视图类,这个功能是非常需要的...                          int strIndex1  = strLine.Find('|');//字符寻找“|”

    1.3K20

    LeetCode 844 比较含退格字符

    算法与数据结构 栈 双指针 题解 这道题可以用一个栈来模拟退格的操作,遍历字符串,遇到新字符就入栈,遇到退格就出栈,最后比较两个栈内的元素是否相等,非常简单。...若遇到 S[i] == '#',那么就要数一有多少个退格,每遇到一个退格,skipS++,表示接下来要跳过多少个字符。...那么, skipS > 0 ,我们依旧需要持续地令 i--; skipS--;,不断的跳过那些被删除了的字符。...二,退格操作完成后,紧接着的那个字符也有可能是 '#',因此退格操作应持续进行到 S[i] != '#' 为止。 对于 T 也是一样的。...由于字符串长度可能不等,退格的按下次数可能会超过已经输入的字符,例如 a###########b,所以应该时刻注意上面所有的条件判断要加上 i >= 0 和 j >= 0 的判断。

    59141

    Calculator

    2、新建MFC项目 首先我们需要创建一个MFC项目,VS2019主界面选择创建新项目->平台:Windows->MFC应用->下一步。...3、MFC组件的编辑 我们打开的窗口里,我们可以调节对话框大小,鼠标选择窗口中的组件后用Delete删除不必要的组件,通过工具箱为对话框添加组件(工具箱可在视图菜单打开),接下来介绍我们需要用到的几个基本组件的操作...我们还可以给我们的菜单设置快捷,例如“帮助(V)”:选择我们需要添加快捷的菜单栏,将属性的Caption改为“帮助(&V)”即可。...3、计算器的代码实现 (1)CString类 MFC代码,数值类型与C++相同,但输入输出的字符类型为TCHAR,字符串类型为CString,可以利用宏定义_T("字符串常量")将C字符串转换为CString...但是,这种方式没法处理以负数开头的表达式和在括号以负数开头的表达式,所以最后实现时添加了一条规则: 如果操作符是负号,负号为第一个字符或者负号的前一个字符是左括号,该负号不入栈,并将下一个入栈的数字取反

    1.1K30

    Android开发笔记(一百四十八)自定义输入法软键盘

    这个键盘只有0-9十个数字,再加一个退格,可谓十个兄弟家徒四壁,真是再直白不过了。那么这个软键盘又是如何实现的呢?...3、软键盘不是一个孤立的控件,它的按键动作需要实时某个编辑框把数字显示出来,所以使用时还得给它绑定一个EditText,这样软键盘才知道我的按键要输出给这个EditText,而不是输出给那个EditText...mKeyboardView.setPreviewEnabled(false); addView(mKeyboardView); } } } 最后要给软键盘绑定对应的EditText对象,即软键盘发生按键动作...这个操作就是调用KeyboardView的setOnKeyboardActionListener方法,设置一个键盘事件监听器,监听器内部主要实现了onKey方法,每当发现合法的按键事件(0-9与退格)...(如0-9),它们键盘映射xml的keycode值必须配置为该字符的ASCII码 editable.insert(start, Character.toString((char) primaryCode

    2.5K30

    vscode 常用设置

    代码行可容纳字符及换行设置 ? bounded 超过word Wrap Column设置的字符达到视口最小宽度,则换行 4. 按tab自动转为插入空格(默认就是勾选的) ? 5....注意:针对该插件,输入完自动格式化设置不起作用,需要按Ctrl+s才会格式,另外,似乎不支持Vue ? 插件配置 集成Eslint ? tab空格配置 ? 去掉每行代码结尾的分号 ?...设置每行可容纳字符 ? Vetur插件安装(Vue格式化推荐使用) 支持格式化vue ? 插件配置 设置插件默认的格式化器 ? tab设置 ?...为了避免麻烦,我们可以设置我们安装的格式化插件为默认格式化器,该格式化插件会优先于其他格式化器被用于格式化,但是实践发现,使用如下红色选框圈选的格式化器作为默认格式化器,格式化vue代码不起作用。...个人理解,设置为null,会自动匹配最佳格式化器,然后格式化js文件,按提示操作,再配置下默认格式化器就好 ?

    1.7K30

    CesiumClock控件及时间序列瓦片动态加载

    本文介绍Cesium的Clock控件以及如何动态加载时间序列瓦片。...CesiumViewer默认开启这两个控件,如果你想要不显示这两个控件,可以Viewer初始化设置其为false,代码如下: var viewer = new Cesium.Viewer('cesiumContainer...multiplier表示时间轴进行速度,就是说此值表示真实世界时间进度与Cesium的关系,值越大时间轴就走的越快,86400表示真实世界走过1sCesium刻度走过1天,怎么有点南柯一梦的感觉。...其创建需要多指定与时间有关的参数。...表示所使用的时钟,直接设置为系统时钟;cedit表示版权信息;dimensions里面的参数只要出现在url全部会被其value替换掉。

    4.1K40

    Qt编写的项目作品3-输入法V2018

    QWidget编写,支持任何目标平台(亲测windows、linux、嵌入式linux等),支持任意Qt版本(亲测Qt4.6.0到Qt5.11.2),支持任意编译器(亲测mingw、gcc、msvc等),支持任意控件输入包括网页的输入控件...Qt程序嵌入的浏览器的网页的文本框等控件的输入。 迷你模式,界面大小随意设置,采用布局自使用任何分辨率。 纯数字键盘模式,自由控制弹出完整输入法面板和数字键盘面板,只需要对控件设置属性即可。...例如ui->txt->setProperty("flag", "number"); 控制需要显示输入法和不需要显示输入法,某些控件不需要弹出输入法,只需要对应不需要弹出输入法的控件设置属性noinput...例如ui->txt->setProperty("noinput", true); 自适应屏幕大小,输入法弹出位置为控件底部超过桌面右边或者底部,自动调整位置。...实现了长按超过500毫秒重复执行按下的的功能。例如长按退格,不断删除。 shift切换输入法,esc隐藏输入法,空格选中第一个汉字,回车选中输入的拼音。和搜狗输入法处理一致。

    1.6K10
    领券