简介及相关资料:
我有一个edit control
只需要接受带符号的十进制数字(类似-12.35
)。
我决定通过subclassing
.
WM_CHAR
处理程序似乎运行良好,我需要处理其他几条消息以完全保护用户不输入无效文本。一个这样的消息是WM_PASTE
。
到目前为止,我能够正确地从中获取文本clipboard
并丢弃或传递消息,具体取决于复制的字符串是否确实是十进制数。
编辑控件将输入限制为 12 个字符。这是通过EM_SETLIMITTEXT
消息完成的。
我使用pure Winapi
和C++
。boost
不允许使用诸如etc之类的库。
问题:
到目前为止,我测试了编辑控件为空的情况,如果内容无效则放弃粘贴。但是,用户可以在编辑控件中选择部分文本,然后进行粘贴。像这样的东西(灰色字符代表选择):
编辑控件中的文本: 123 456
78.9
剪贴板文本: -1A
如果我允许粘贴,结果字符串将是 123-1A78.9,这是无效格式。
这是我需要帮助的部分:
我的解析正确地识别了有效格式,但我不知道如何正确地将两个字符串合并为一个,以便我可以测试它。
问题:
如何正确形成粘贴的结果字符串,以便测试其有效性?
有没有可以为我做有效性测试的功能(它应该知道语言环境!)?
注意:我不介意自己解析文本,但如果不需要,为什么要“重新发明轮子”?
我为解决这个问题所做的努力:
通过 Internet 浏览,我发现了许多
std::
连接/切断/等字符串的函数,但它们似乎都不能满足我形成结果字符串的需求。我找到的最接近的东西是,string:: insert(...)
但我不知道如何使用它。至于第二个问题,我
std:: strtod
是通过浏览StackOverflow问题发现的,似乎可以用来检查字符串的有效性。而且它似乎也可以感知语言环境,但我不确定它是否是我所寻求的。
为了使这篇文章尽可能简短,我提供了指向我的这个问题的链接,其中包含相关的代码片段。
感谢您的时间和帮助。
如果需要更多信息,我会更新帖子。
此致。