直接 2D と直接書き込みを使用してカスタム編集ボックスを作成しています。塗装物(箱)はダイレクト2Dで行います。WM_CHAR メッセージから入力を取得し、文字列に追加します。この文字列はボックスに書き込まれます。問題は、テキスト入力がテキスト ボックスの長さを超えると、自動的に下にスクロールし、入力中のテキストがテキスト ボックスに表示されなくなることです。テキストをスクロールして、常にテキストボックスに表示されるようにする方法。
2 に答える
「IDWriteTextFormat::SetTextAlignment」を使用して、テキストをレイアウト ボックスの中央に揃えたと思います。同様に、'IDWriteTextFormat::SetParagraphAlignment' を使用して、テキストの垂直方向の配置を制御できます。
しかし、「テキストは常にテキストボックスにある」とあなたが呼んだことはできません。静的レイアウト ボックスに合わせてフォント サイズを変更する必要があります。ここでは「スクロール」は役に立ちません。
それはすべて、あなたがそれで何をしたいか、そしてあなたのコントロールがどれほど複雑である必要があるかによって異なります. 1 行だけを表示するという制約がある場合は、DWRITE_WORD_WRAPPING_NO_WRAP折り返しモードを強制することができます。複数行にして単一のフォントのみを使用する場合は、行の高さを一度計算してから、新しい行に現在の行ではなく次の行を表示できます。たとえば、VK_UP と同様に、1 行前にスクロールできます。ポイントは、複数行コントロールを使用すると、テキストの一部が行の高さの倍数で表示されることを期待するのが自然だということです。
いずれにせよ、レンダー ターゲットを更新し、一度にその一部のみを表示するなど、自分でスクロールを実装する必要があります。それを行うのは、DirectWrite または D2D の仕事ではありません。

