我想编写一个所见即所得的 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/