将编辑控件重用为命令窗口

时间:2008-10-03 12:19:56

标签: windows winapi visual-c++ mfc

这是一个GUI应用程序(实际上是MFC)。我需要一个能够显示如下提示的命令窗口:

  

最喜欢的色情明星的名字:

用户应该能够在提示后输入文字,如下所示:

  

最喜欢的色情明星的名字: Raven Riley

但我需要阻止用户将光标移动到提示区域。还应阻止用户退回到提示中以防止以下情况:

  

Rrraven Rrrileeey Ruuuulez !!! 最喜欢的色情明星的名字:

还需要控制文本选择等。最后,我应该只检索用户输入的文本(减去提示文本)。

从头开始创建自己的窗口类(即从CWnd继承)会不会更好?还是应该重用Windows EDIT控件(即从CEdit继承)?

在AutoCAD和Visual Studio中可以看到类似的命令窗口(在调试模式下)。

2 个答案:

答案 0 :(得分:3)

我认为你最好创建一个CEdit的子类并限制过滤按键。我认为困难的部分不是让用户将插入符号移动到提示区域,但是您可以编写一些代码以确保插入符号始终被发送回它所属的位置(输入部分)。

无论如何,如果你真的,真的想要实现自己的控制(毕竟不是那么困难),我建议你阅读Jacob Navia关于他如何构建LCC编译器和环境的“技术文档”。实际上,似乎文档不再在线,但我相信你可以通过他的电子邮件(jacob@jacob.remcomp.fr)获取它们。

修改:我更喜欢你之前的例子。保持优雅,大声笑:):

答案 1 :(得分:1)

我有一个非常相似的要求,完全按照davidg的建议行事;子类化编辑控件并过滤按键。这实际上是使用Qt而不是MFC,但原理将完全相同。

您需要记住过滤主页以及左侧和后退空间等键。我只是检查一下移动是否会将插入符移动到提示符中,如果它确实忽略了按键。

要注意的另一件事是粘贴多行文字,你必须选择是粘贴第一行还是所有行,在第一行之后的所有行添加提示。在对控件进行子类化时,您会获得许多行为,这些行为将无法完全按照您的意愿运行。