问题标签 [editcontrol]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
166 浏览

winapi - 在用户输入文本时增加 Windows 原生编辑控件的高度

我们有一个文本框,它实际上是用于输入文本的标准原生 Windows 编辑控件的一个实例。该控件是使用 CreateWindowsEx 创建的,没有指定 ES_AUTOHSCROLL 标志。这意味着自动使用输入文本的自动换行。

我们的目标是固定控件的宽度并随着文本行数的增加自动增加控件的高度以显示所有文本行。一个例子:默认情况下,文本框是空的。用户开始输入,一旦到达第一行的末尾,文本框就会自动将其高度增加一个文本行,因此由于自动换行,最后一个单词会放在第二行的开头。

如何获得这个?我们的开发环境是 VB6,但也欢迎任何基于 WinAPI 的代码。

0 投票
1 回答
200 浏览

c++ - 如何通过 mfc 应用程序中的编辑控制框更改窗口句柄?

我制作了一个小程序(使用 mfc)来编辑另一个应用程序中的文本框,但是每次我想使用我的程序时,我都必须编辑以下内容:

无论新句柄使用的是winspy ++,我想知道如何添加另一个带有按钮的文本框,这样我就可以添加新值,单击按钮,它就会更新,所以我不再需要保留使用新句柄重建我的应用程序。

0 投票
2 回答
898 浏览

c++ - 十进制数的区域设置感知编辑控件子类化(格式 [sign] [xxx...] [decimal separator] [yy...])

简介及相关资料:

我有一个edit control应该只接受带符号的十进制数字的东西,比如-123.456. 此外,它应该注意区域设置,因为在美国使用点的每个国家/地区的小数分隔符都不相同,而在欧洲则使用逗号等。

我为解决这个问题所做的努力:

到目前为止,我已经习惯于subclassing实现这一点。这是我实现的逻辑subclassing,通过伪代码表示:

首先,我创建了一个辅助函数来确定 char 数组是否已经有小数点分隔符,如下所示:

这是subclassing 过程-我没有考虑减号

一个重要的注意事项:由于这个问题的答案,我能够在我的应用程序中加载当前的用户区域设置。

问题:

有没有更好的方法来实现一个只接受有符号十进制数字的编辑控件,并且可以识别语言环境?

如果subclassing 是唯一的方法,我的代码可以进一步改进/优化吗?

感谢您的时间和帮助。

此致。

附录:

为了进一步帮助您,这里有一个小型演示应用程序,它创建了一个编辑控件,并且subclass它只接受十进制数字——同样,我还没有实现减号部分

0 投票
2 回答
1952 浏览

c++ - 响应 EN_UPDATE 消息时避免递归

我正在尝试创建一个edit control将接受符号数字分隔符格式的带符号十进制数字(例如-1.5)。

在 Internet 上进行广泛研究后,我发现很少有令人满意的蒙版编辑控件示例,但它们是在MFC.

因为我不知道MFC,所以我很难将该代码翻译成 pure Win32 API,所以我决定尝试自己的方式,从头开始。

在仔细研究了这些MFC示例后,我得出结论,它们在响应EN_UPDATE消息时会执行文本验证。

当我尝试做同样的事情时,我的程序立即退出,没有任何警告或错误消息。我得出结论,我的问题一定是递归。

为了确认这一点,我在主窗口的过程中编写了一个小处理程序来测试它:

这就是我在Debug模式下启动程序时发生的情况:

在我输入 letter 后a,编辑控件的文本变成e.

这证实了我关于递归的结论:在我按下a它之后它被转换为b,然后另一个EN_UPDATE被触发,它重复了这个过程,所以b变成了c等等,直到static变量达到4所以结果是e

我的问题很简单:

EN_UPDATE为了避免这种类型的递归,我应该如何处理或修改我的程序?

编辑(2014 年 2 月 18 日):

EN_UPDATE我已按照成员Jonathan Potter的说明修改了上述处理程序。

虽然递归问题消失了,但输出不是我想要的。

我已经验证了我的代码在一个简单的控制台应用程序中用他的继任者替换一个字符的正确性,并且在单击一个按钮时也这样做(我不难快速添加一个按钮和一个处理程序来单击它)。

所以问题一定是给定指令的执行,因此我提交了更正的代码,希望有人能指出我做错了什么:

现在,a正确按下后变成b,但按下后我b没有得到预期的结果bc,但是cc

这是意料之中的,因为在用户按下后EN_UPDATE会生成一个键来显示文本。

因此,按下a时它将转换为b. 当我之后按下时b EN_UPDATE会生成一条新消息,因此我的处理程序重新开始,这意味着它需要新字符串bb并将其正确转换为cc.

有没有办法在使用当前文本进行操作时暂时禁止创建EN_UPDATE新消息,所以在上面的示例中,我得到结果bc而不是cc按下a然后b

编辑结束

感谢您的时间和帮助。

此致。

0 投票
1 回答
110 浏览

c++ - 从剪贴板获取文本后将一个字符串插入另一个字符串所需的建议

简介及相关资料:

我有一个edit control只需要接受带符号的十进制数字(类似-12.35)。

我决定通过subclassing.

WM_CHAR处理程序似乎运行良好,我需要处理其他几条消息以完全保护用户不输入无效文本。一个这样的消息是WM_PASTE

到目前为止,我能够正确地从中获取文本clipboard并丢弃或传递消息,具体取决于复制的字符串是否确实是十进制数。

编辑控件将输入限制为 12 个字符。这是通过EM_SETLIMITTEXT消息完成的。

我使用pure WinapiC++boost不允许使用诸如etc之类的库。

问题:

到目前为止,我测试了编辑控件为空的情况,如果内容无效则放弃粘贴。但是,用户可以在编辑控件中选择部分文本,然后进行粘贴。像这样的东西(灰色字符代表选择):

编辑控件中的文本: 123 45678.9

剪贴板文本: -1A

如果我允许粘贴,结果字符串将是 123-1A78.9,这是无效格式。

这是我需要帮助的部分:

我的解析正确地识别了有效格式,但我不知道如何正确地将两个字符串合并为一个,以便我可以测试它。

问题:

  1. 如何正确形成粘贴的结果字符串,以便测试其有效性?

  2. 有没有可以为我做有效性测试的功能(它应该知道语言环境!)?

注意:我不介意自己解析文本,但如果不需要,为什么要“重新发明轮子”?

我为解决这个问题所做的努力:

  1. 通过 Internet 浏览,我发现了许多std::连接/切断/等字符串的函数,但它们似乎都不能满足我形成结果字符串的需求。我找到的最接近的东西是,string:: insert(...)但我不知道如何使用它。

  2. 至于第二个问题,我std:: strtod是通过浏览StackOverflow问题发现的,似乎可以用来检查字符串的有效性。而且它似乎也可以感知语言环境,但我不确定它是否是我所寻求的。

为了使这篇文章尽可能简短,我提供了指向我的这个问题的链接,其中包含相关的代码片段。

感谢您的时间和帮助。

如果需要更多信息,我会更新帖子。

此致。

0 投票
1 回答
452 浏览

c++ - 子类化编辑控件时正确处理 VK_DELETE

我将编辑控件子类化为只接受十进制数字。

一切正常,剩下的唯一事情就是处理用户选择部分文本并按下Delete键 ( VK_DELETE) 的情况。

我的问题如下:

按下一个Delete键 ( VK_DELETE) 是否会发送一些WM_CLEAR我可以用于处理的消息,还是我必须WM_KEYDOWN在我的子类化过程中处理并在那里进行处理?

谢谢你。

最好的祝福。

0 投票
1 回答
1058 浏览

winapi - ES_NUMBER、ES_UPPERCASE 和 ES_LOWERCASE 样式在 Win32 API 编辑控件中停止工作

我们有一个非常古老的(“遗留”)VB6 代码,用于从头开始创建 Windows 编辑控件。它看起来像这样:

它已经工作了多年,但现在客户报告说 ES_NUMBER 样式没有效果。这同样涉及两个相似的标志,ES_UPPERCASE 和 ES_LOWERCASE。可能是什么问题?

0 投票
1 回答
80 浏览

c++ - 正确保护编辑控件免受 SQL 注入和无意义字符的影响

简介及相关资料:

我有一个编辑控件,用户应该在其中输入公司名称。编辑控件是区域感知的。

问题:

我希望适当地保护它免受SQL injection攻击和用户输入无意义的字符。

我为解决问题所做的努力:

我正在考虑丢弃colon,并semicolon在我的子类化过程中响应WM_CHAR,并再次执行验证响应EN_CHANGE。如果出现问题,我会通知用户并禁用“保存”按钮。

由于我的应用程序是区域设置感知的,因此我需要区域设置感知函数来测试输入字符。

到目前为止,我已经找到IsCharAlpha并且IsCharAlphaNumeric似乎知道区域设置(我的英语不是最好的,所以也许我误读了 MSDN 文档,对此我深表歉意)。

我也在这里搜索过类似的问题,但没有找到。

问题:

丢弃semicolon只会起到作用,还是我需要考虑其他一些角色?

我是在子类化+的“正确轨道”上EN_CHANGE还是有更好的方法来实现这一目标?如果有你能指出我正确的方向吗?

谢谢你。

此致。

0 投票
1 回答
56 浏览

visual-studio-2012 - 如何向下滚动编辑控件以显示内容?

我有一个编辑控件来显示结果。但是结果太多了,除非你向下滚动,否则它们无法显示。但是我该如何实现呢?在此处输入图像描述

0 投票
2 回答
106 浏览

c++ - 推荐用于在单行编辑控件中直观地指示无效输入的解决方案

我的对话框中有编辑控件。其中一些是数字的,其中一些接受浮点数,其中一些是文本的。

我正在使用整数和浮点输入验证编辑控件。

我已经实现了响应EN_CHANGE消息的验证机制。我MessageBeep(MB_ICONERROR);用来指示无效输入。

我也想直观地指出错误,但不知道该怎么做。

由于我有多个编辑控件(15),最好的选择似乎是改变画笔以响应,WM_CTLCOLOREDIT但我担心这个解决方案会引入太多新变量。另一个选项似乎是工具提示,但如果多个编辑控件具有无效输入,这可能在视觉上看起来没有吸引力。这就是我在这里寻求帮助的原因,这样我就可以从经验丰富且比我自己更好的开发人员那里获得建议。

什么是我的情况的最佳解决方案,当用户进行一个或多个无效输入时直观地指示错误?