wxDC在打字时在屏幕上打印文本

时间:2013-05-09 23:39:33

标签: c++ mfc wxwidgets

我正在尝试在屏幕上显示字符串,同时用户仍然键入它。通常,wxDC的DrawText函数用于字符串的内容已知的字符串。

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

我们知道,这个函数需要一个wxString并在屏幕上打印。但是,如何让用户在屏幕上输入内容(在wxWindow,wxFrame上)。总而言之,我现在正在绘画程序中工作,用户可以绘制某些形状。某些形状很容易绘制,移动等...但是有一个文本框并让用户在其中键入内容是我的想法到目前为止。当然,这应该是可编辑的,例如当用户再次点击相同的“文本框”时,我应该能够编辑它。

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

任何想法都会受到赞赏。

2 个答案:

答案 0 :(得分:0)

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

这样的事情:

  1. 用户在矩形内点击以编辑文字。
  2. 程序启动编辑模式(某些内部状态初始化一个空字符串)。
  3. 虽然用户没有在rect外面点击
    • 将输入的字符添加到文本字符串
    • 清除rect到背景中的绘图区域
    • 调用DrawText或更有可能DrawLabel在rect
    • 中绘制字符串
  4. 然后在文本发生变化时重新绘制文本,如果需要,你有一个包含持久性内容的字符串。

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

    有道理吗?

答案 1 :(得分:0)

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

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