0

我试图在用户仍在键入时在屏幕上显示一个字符串。通常 wxDC 的 DrawText 函数用于字符串内容已知的字符串。

void DrawText(const wxString& text, wxCoord x, wxCoord y) 

我们知道,这个函数接受一个 wxString 并在屏幕上打印。但是,我怎样才能让用户在屏幕上(在 wxWindow、wxFrame 上)键入内容。总而言之,我现在正在开发一个绘图程序,用户可以在其中绘制某些形状。某些形状很容易绘制、移动等……但是到目前为止,拥有一个文本框并让用户在其中输入一些东西让我很烦恼。当然,这应该是可编辑的,例如当用户再次单击同一个“文本框”时,我应该能够对其进行编辑。

最后一点,我试图避免使用诸如 wxTextCtrl 之类的控件,并且在某种意义上试图制作我自己的 textctrl。最好的起点是什么?

任何想法,将不胜感激。

4

2 回答 2

1

自己写wxTextCtrl很难,我强烈建议不要这样做。但是,如果您真的想要(为什么?),那么它当然是可能的,毕竟它比仅使用 wxWidgets API 编写wxRichTextCtrl的普通功能具有更多的功能。wxTextCtrl

而且这里没有什么特别的魔力,你只需要更新窗口(理想情况下,使用wxWindow::RefreshRect()而不是刷新整个窗口)只要显示在其中的文本发生更改,并且您的wxEVT_PAINT处理程序必须能够正确绘制文本.

于 2013-05-10T11:54:35.223 回答
0

我认为你不需要在这里做任何特别的事情。只要用户处于某种“编辑”模式——即你希望他们输入文本——那么你需要做的就是在用户输入更多文本时重新绘制所有内容。

像这样的东西:

  1. 用户在矩形内单击以编辑文本。
  2. 程序启动编辑模式(某些内部状态初始化一个空字符串)。
  3. 虽然用户没有在矩形外点击
    • 将输入的字符添加到文本字符串
    • 将矩形内的绘图区域清除为背景
    • 调用DrawText或更可能DrawLabel在矩形中绘制字符串

然后在文本更改时重新绘制文本,并且如果需要,您将有一个包含内容的字符串以供持久性使用。

或者,您可以只弹出wxDialogawxTextCtrl以向用户询问整个文本字符串,然后在对话框关闭后绘制。

说得通?

于 2013-05-10T04:45:55.967 回答