在wxTextCtrl中设置插入点的问题

时间:2012-09-23 02:36:06

标签: c++ user-interface textbox wxwidgets wxtextctrl

我正在尝试在wxWidgets(版本2.8.12)中实现自定义窗口小部件,本质上是修改后的单行wxTextCtrl。它需要一个文本输入,它由两组由空格分隔的8位十六进制数组成,我希望控件自动处理该空间。例如,如果用户两次输入1-8(不需要按空格键),则文本控件的结果内容应为:

12345678 12345678

如果用户然后将光标放在第一个'3'和退格后三次,则该空间应在编辑时自动调整,从而产生:

45678123 45678

基本上,空间应该对用户完全透明。

我在大多数情况下完成了这项工作。这里的代码粘贴有点长,所以这里有一个要点:
https://gist.github.com/036c1a90f77521a8653c

然而,有一个错误,我似乎无法解决 - 输入第九个数字时,会自动插入空格,但光标会在空格后面,紧接在第九个数字后面。

12345678 |1

所有使用wxTextCtrl::SetInsertionPoint()wxTextCtrl::SetInsertionPointEnd()的尝试都没有成功,所以我作为最后的手段来到这里,希望有人可以指出我做错了什么。

为了帮助测试这个小部件,我准备了一个包含小部件的非常快速且脏的应用程序:
https://gist.github.com/cf3219eb47e2bfe85b38
或者点击这里下载代码作为tarball:
https://gist.github.com/gists/cf3219eb47e2bfe85b38/download

只需运行make即可清除,编译和运行代码。当然,你需要安装wxWidgets 2.8.12进行编译。

这个小部件的大多数其他方面都与我想要的完全一样 - 这只是一个非常大的问题,使得它无法正常工作。然而,有一个我很好奇的小虫子,虽然这不是一个主要问题,但我想在一段时间内修复它。

即使删除了某个选项,即使删除了字符,也会自动处理空格 - 但是,如果删除的选项在第9位上结束,则删除后不会重新格式化控件的内容。 / p>

如果有人可以查明原因,我们会主要关注插入点问题。

感谢任何愿意提供帮助的人,我尽量提供尽可能多的信息和解释 - 如果我错过了什么,请告诉我。

1 个答案:

答案 0 :(得分:0)

一般来说,很难修改本机控件的输入处理,因为它在不同平台下的行为不同。我不知道你是否已经在所有(或至少不止一个)代码下测试了你的代码,但我完全希望你能找到更多的问题。

我建议您不要试图自己动手,而是建议您查看wxMaskedEdit建议添加wxWidgets本身。它还不是最终的,但已经有preliminary version,我认为它也可以与2.8一起工作(当然,它是用2.9开发的)。