简介及相关信息:
我有一个edit control
只需要接受带符号的十进制数(类似于-12.35
).
我决定通过以下方式实现这一点subclassing
.
The WM_CHAR
处理程序似乎运行良好,我需要处理其他几条消息以完全保护用户免于输入无效文本。其中一条消息是WM_PASTE
.
到目前为止,我能够正确地从clipboard
并根据复制的字符串是否确实是十进制数字来丢弃或传递消息。
编辑控件将输入限制为 12 个字符。这是通过以下方式完成的EM_SETLIMITTEXT
信息。
I use pure Winapi
and C++
。没有像这样的图书馆boost
等都是允许的。
PROBLEM:
到目前为止,我测试了编辑控件为空的情况,如果内容无效,我将放弃粘贴。然而,用户可以在编辑控件中选择文本的一部分,然后执行粘贴。像这样(灰色字符代表选择):
编辑控件中的文本: 123456
78.9
剪贴板文本: -1A
如果我允许粘贴,结果字符串将为 123-1A78.9,这是无效格式。
这是我需要帮助的部分:
我的解析正确地识别了有效格式,但我不知道如何正确地将两个字符串合并为一个字符串,以便我可以测试它。
问题:
如何正确形成粘贴所得的字符串以便测试其有效性?
有没有一个函数可以为我做有效性测试(它应该了解区域设置! ) ?
注意:我不介意自己解析文本,但如果不需要的话为什么要“重新发明轮子”呢?
我为解决这个问题所做的努力:
浏览互联网我发现了很多std::
连接/切断/等字符串的函数,但它们似乎都不能满足我形成结果字符串的需求。我发现的最接近的东西是string:: insert(...)
但我不知道如何使用它。
至于第二个问题,我发现std:: strtod
通过浏览堆栈溢出问题,似乎它可以用来检查字符串的有效性。它似乎也能感知区域设置,但我不确定这是否是我所寻求的。
为了使这篇文章尽可能简短,我提供了链接我的这个问题 https://stackoverflow.com/questions/22263612/properly-handle-wm-paste-in-subclass-procedure有相关的代码片段。
感谢您的时间和帮助。
如果需要更多信息,我将更新帖子。
此致。