動作していないが、次のテストコード与えられる:コール:: DrawTextLayout()基本的に
CComPtr<IDWriteTextLayout> layout;
wstring text2 = L"Here is some text.";
this->currentLevelText->Formatting->TextFactory->CreateTextLayout(text2.c_str(), text2.length(), this->matrixHeaderTextInfo->TextFormat, FLT_MAX, FLT_MAX, &layout);
target->DrawTextLayout(D2D1::Point2F(30, 30), layout, this->textBrush);
標的 - > DrawTextLayoutメソッドは何も描画されていません。はしかし、DrawTextWへの次の呼び出しは、作業を行います。ここでは
target->DrawTextW(this->currentLevelText->Text.c_str(), this->currentLevelText->Text.length(),
this->currentLevelText->Formatting->TextFormat, this->currentLevelText->ActualRectangle.DrawingRectangle,
this->textBrush);
は、私が知っている内容の要約です:
- TextFactoryがIDWriteFactoryオブジェクトへのポインタである、のTextFormatはIDWriteTextFormatオブジェクトで、ターゲット有効なID2D1HwndRenderTargetです。
- TextFormatは、有効なIDWriteTextFormatオブジェクトです。DrawTextWメソッドを使用してテキストを適切に描画できます。
- CreateTextLayoutを呼び出すとエラーコードが返されず、S_OKの成功コードが返されます。
- TextFormatとテキストレイアウトオブジェクトはどちらも、アプリケーションに存在する唯一のDirectWriteファクトリである同じDirectWriteファクトリを使用して作成されました。
- ID2D1SolidColorBrush textBrushは、不透明度1.0の有効なブラシであり、黒色に設定されています。私はDrawTextWがこのブラシを使ってウィンドウに正常に描画しているので、これは問題ではないことは分かっています。
- ID2D1TextLayoutオブジェクトのGetMetricsメソッドを呼び出すと、有効なメトリックが返されます。つまり、オブジェクトに格納されているテキストの幅と高さが0または負ではありません。
- ID2D1RenderTarget :: EndDraw()の呼び出しでエラーコードが返されない場合は、S_OKの成功コードが返されます。
- 私のコードの別のセクション(他のdllファイルにあることがあります)では、DrawTextLayoutの呼び出しはです。があります。このコードはdllファイルにありますが、同じDirectWrite Factoryを使用しています。私は本当に別のdllファイルにあることが違いを生むべきだとは思わないでしょう。
私が提供した両方のコードサンプルは、順番に実行され、両方とも正常にテキストを描画する必要があります。ただし、DrawTextWだけがテキストを描画しています。私は、Direct 2D Effectsを使用するなど、描画と複雑なことをしていません。コードは私が提供したサンプルよりも複雑ではありません。今のところ私はDrawTextWメソッドを使用することができますが、IDWriteTextLayoutオブジェクトを作成して描画してからオブジェクトを破棄するような場所を読んでいるので、そうしたくはありません。これは、テキストレイアウトオブジェクトを自分で使用することで軽減できる、多くの不必要な作業です。
これはなぜ起こっているのでしょうか?私は、なぜこれが起こっているのかというアイデアから完全に外れていますが、どこかで接続を見つけようとしています。