c++ - 如何编写所见即所得编辑器?

标签 c++ editor wysiwyg

我想编写一个所见即所得的 HTML 编辑器。我正在寻找一种高级方法,最终将在 C++ 中实现。

我最初的方法是创建一个扩展公共(public)基类(节点)的类层次结构。因此,对象“body”将包含对象“p”,对象“p”将包含对象“b”,对象“b”将包含一些文本。

class node {
    node *parent;
    vector<node> children;

    string name;
    map<string,string> attributes;
    string text;

    virtual void render(const rect &rect, const point &offset) = 0;
    virtual void onEvent(const event &e);
}

主引擎会调用类似 body.render(screen, point(0, 0)) 的函数,它将递归地渲染其子项。

光标将由指向对象层次结构的指针表示,每个节点都有自己的内部光标状态,并且当它是选定节点时将响应键盘事件。

例如,如果用户点击左箭头,并且选择了“p”节点,则“p”节点对按键的 react 可能是将当前节点更改为“p”的父节点。

抽象地说,这似乎可行,我能找到的最接近我正在寻找的东西是 Sigil ,乍一看似乎很难学习(main.cpp 是 70k)。

在我走这条路之前,我想知道是否有人有更简单的方法,或者可以看到这种方法的任何陷阱。

最佳答案

如果可以的话,更简单的方法是在应用程序中嵌入 Web 浏览器并设置 contentEditable="true"<body> 。如果您使用的是 Windows,则可以使用内置引擎,也可以嵌入 Gecko 或 WebKit 等引擎。

关于c++ - 如何编写所见即所得编辑器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8496291/

相关文章:

macos - Coda 2 缩进指南,如 notepad++

python - 如何在 Python 中突出显示正则表达式匹配项?

javascript - 如何取消 TinyMce 中的自动关闭标签?

angular - Froala Angular 文本编辑器 (v3) - 在输入更改时销毁并重新初始化

c++ - 有没有办法处理 "delay"WM_ACTIVATE/WM_ACTIVATEAPP 消息?

c++ - 为什么当只有一个文件的选项发生变化时 CMake 会重新编译所有库源代码?

c++ - C++中如何删除struct数组中的元素

c++ - 如何在 C++\wxWidgets 中下载文件

visual-studio-code - 如何在 Visual Studio Code for Mac 中向上或向下移动一行

javascript - 使 TinyMCE 编辑器宽度动态适应内容