ニュース

新しい「メモ帳」アプリはRichEditの採用で大きく進化 ~Microsoftが実装を解説

今後はシンタックスハイライトの実装やインデント・括弧への対応も?

新しい「メモ帳」アプリはRichEditの採用で大きく進化

 今月よりWindows 11向けにリデザインされた「メモ帳」アプリの展開が開始されているが、それにはRichEditコントロールの採用が採用されているという。米国時間2月22日に更新されたMicrosoftの公式ブログ「Math in Office」で、新しい「メモ帳」アプリの実装が明らかにされている。

 新しい「メモ帳」アプリでは角丸の「Windows 11」ルックやダークテーマオプションが追加されたが、以下のテキスト閲覧・編集機能も新たに導入されているという。

  • [Alt]+[X]キーによるUnicode文字の入力:16進数コードを入力してショートカットキーを押すことでUnicode文字を挿入できる。
     例)「2260」を入力後に[Alt]+[X]キーで「≠」が入力される
  • [Ctrl]+[}]キーによる対応する括弧へのカーソルジャンプ:「Visual Studio」から取り入れた機能で、(……)、[……]、{……}などで機能する
  • マルチレベル取り消し:[Ctrl]+[Z]で無限アンドゥ。[Ctrl]+[Y]キーで元に戻せる
  • ドラッグ&ドロップ:選択テキストをドラッグ&ドロップで他の場所へ移動
  • カラー絵文字
  • 自動URL検出

 これらの機能はRichEditコントロールの標準機能で実現されたものだ。RichEditコントロールは装飾のあるテキスト(リッチテキスト)を扱うためのUI部品で、「ワードパッド」や「Microsoft Office」などでも使われている。とはいえ、それらとまったく同じというわけではなく、さまざまな改良が施されているようだ。

 従来の「メモ帳」アプリではプレーンテキストしか扱えない「Edit」コントロールが用いられてきた。そこにわざわざRichEditコントロールを持ち込むのはやや大げさにも思えるが、「メモ帳」アプリは非常に大きなサイズのテキストを扱うことも少なくない。そこで、パフォーマンスと機能に優れるRichEditコントロールがプレーンテキストのエンジンとして採用されるようになった。

従来の「メモ帳」アプリを「Spy++」で確認した様子。「Edit」コントロールが用いられている
新しい「メモ帳」アプリでは「RichEDitD2DPT」というコントロールが用いられている

 RichEditコントロールには、「ワードパッド」などで広く使われているOS同梱のもの(msftedit.dll)と、「Word」や「PowerPoint」、「Excel」、「OneNote」といった「Microsoft 365」アプリケーションに搭載されているもの(Riched20.dll)があるが、新しい「メモ帳」アプリは後者をベースにしている。後者はカラー絵文字に対応しており、通常のテキストはGDIで、GDIで対応できないカラー絵文字はDirectWriteで描画するという(RichEDitD2D)。

 ただし、「メモ帳」アプリではそれがそのまま用いられているわけではないようだ。「Visual Studio」に含まれている「Spy++」ツールで閲覧すると「RichEDitD2DPT」というコントロールが用いられている。

 その理由としては、まず「メモ帳」アプリにはってRichEditコントロールにはない機能を2つ実装する必要があったことがある。

 1つ目は、改行コードの検出(CR、LF、CRLF)だ。RichEditコントロールの内部実装は「Word」やMac環境に倣って「CR」を改行区切りとし、ファイルを読み込んだりテキストを保存する際に変換処理を挟んでいた。この実装は基本的に今でも変わっていないが、特定のメッセージ(EM_SETENDOFLINE、wparam = EC_ENDOFLINE_DETECTFROMCONTENT)をやり取りすることで改行コードを認識させ、ファイルの保存時などにそれを用いるように指示できるようになっているという。

 もう1つ、RichEditコントロールに追加する必要があったのは[Unicode制御文字の表示]オプションだ。このオプションは「メモ帳」アプリに古くからあり、見えないUnicode文字を明らかにする。これらはテキストの偽装でよく用いられる「RLO」(U+202E)や「LRO」(U+202D)を可視化したい場合に役立つ。

【「メモ帳」でUnicode制御文字を表示する - 窓の杜】

 また、新しい「メモ帳」アプリの[Unicode制御文字の表示]オプションは、「ゼロ幅接合子」(ZWJ:U+200D)の表示も可能。複数の絵文字を組み合わせて1つの絵文字を表している場合、オプションの切り替えでその分解・結合が行える。

 そのほかにも、「Visual Studio」「Visual Studio Code」で好評の仕様が一部取り込まれているようだ。

 新しい「メモ帳」アプリ以前はてRichEditコントロールがプレーンテキストとして用いられるケースが多くなかったこともあり、これまで顕在化していなかった不具合にも対処する必要があった。また、「Microsoft 365」アプリケーションのRichEditコントロールなどで使われているIProvideFontInfoフォントバインディングはライブラリのサイズが非常に大きく、「メモ帳」アプリへの導入は好ましくなかったため、RichEditのクラシックフォントバインディングが利用されているという。

 ともあれ、RichEditベースになったことで、「メモ帳」アプリはEditコントロール時代とは比較にならない表現力を手に入れたといえる。同社は「Visual Studio」や「Visual Studio Code」でお馴染みのシンタックスハイライト(構文色分け)を実装したり、HTML/XML/JSON/RTFファイルをインデント付きで表示したり、XML/HTMLの開始タグと終了タグをトグルするといった機能を実装できるかもしれないとしている。今後の展開に期待したい。