如何调整" RichEdit控制接受分数?

时间:2015-06-13 01:18:07

标签: winapi richedit

我已阅读官方文档,但仍无法解决这个问题。

由于英语不是我的母语,我很难构建有效的Google查询。我还在尝试......

我想在RichEdit控件中输入分数,如下图所示:

enter image description here

可以这样做吗?如果是这样,你能告诉我如何,在一个尽可能小的例子?

1 个答案:

答案 0 :(得分:0)

我认为你不会让它与RichEdit一起工作 - 以后的版本至少有一些数学显示支持,但据我所知,他们不处理它的直接输入。至少,我在网上找不到任何描述你如何输入公式的内容。

如果你可以依赖至少拥有Windows 7的客户端,你可以弹出数学输入面板,它将把结果方程式以MathML格式放在剪贴板上 - 例如,参见this blog post。这是否真的有帮助取决于你想对所得方程做什么。没有更多的背景,就不可能说出来。

EDIT1:我还有一些建议。如果您可以依赖Microsoft Office,则可以从OLE访问Microsoft公式编辑器。那里有一个很旧的东西,它们可能会丢掉它,因为现在它只是允许编辑旧Word文档中的方程式。

更有趣的方法是允许用户以某种形式输入(例如LaTeX),然后处理它以产生图像。例如,您可以在后台运行LaTeX,如this website那样,或者您可以调查MathJax,这是一个Javascript库来呈现方程式 - 您可以在MSHTML实例中运行它。当然,这些都不是特别容易。

EDIT2:如果您可以依赖RichEdit 8(您需要Windows 8或最近的Office版本),您可以在RichEdit中获得一些数学支持。通过一些测试,我可以将“M_0,3 / b”的线性形式条目转换为:

Example equation

这使用以下代码(需要最近的Windows SDK)来构建“M_0,3 / b”文本中的数学区域:

  CWnd* edit = GetDlgItem(IDC_RICHEDIT);
  CComPtr<IRichEditOle> reo;
  edit->SendMessage(EM_GETOLEINTERFACE,0,(LPARAM)&reo);
  CComQIPtr<ITextDocument2> doc = reo;
  CComPtr<ITextRange2> range;
  doc->Range2(0,0,&range);
  range->Expand(tomStory,0);
  range->BuildUpMath(0);