我正在使用对话框中的编辑控件 - 所有MFC。资源中指定的唯一样式是ES_AUTOHSCROLL。对话框出现并正确显示。编辑控件也可以正常工作和编辑文本 - 直到某一点。此时,它会完全停止显示文本。编辑控件只是空白。
我的第一个想法是尝试通过在只发送EM_SETLIMITTEXT的编辑控件上发送调用SetLimitText()来调整编辑控件的限制。我设置了一个大数字,它是前一个限制的10倍,并由EM_GETLIMITTEXT验证检索到的数字等于设置的数字。在那之后,我仍然遇到问题而且没有任何改变。
接下来我尝试捕获EN_MAXTEXT和EN_ERRSPACE。这些通知都没有发送过。
最后,我开始尝试一些不同的输入,如果我输入一个空格或一段时间,那么我可以显示比我输入W更多的字符。对话框中的字体是MS Shell Dlg,在我的系统映射到Microsoft Sans Serif。它是一个比例字体,不同的字符有不同的宽度,所以我开始认为它可能与GDI有关。
接下来,我陷入了EN_CHANGE,当它被关闭时,我去创建了一个用于显示的IC,从编辑控件中选择了字体到IC中,然后在编辑控件中的文本上调用了GetTextExtent() 。问题出现在32760左右,这是在16位有符号整数限制附近。
所以,我认为我的问题与GDI有关,因为EDIT控件无法超越该限制。我尝试替换RICHEDIT2控件,但在显示空白之前显示的字符较少。
另一个奇怪的事情是,如果我继续输入字符并在编辑控件上调用GetWindowText(),则将返回所有字符。编辑控件只是空白。
是的,也许我不应该展示那么多角色,但事实就是如此。
有没有人有更好的解释,解决方案或解决方法?