1

私は DirectWrite API について学ぼうとしているので、あらゆる文化からのテキストのレンダリングの問題に対する柔軟な解決策を得ることができ、それを使用して、「定型化された」方法よりもはるかに多くの制御を備えたリッチ テキスト編集をアプリケーションに組み込むことができる可能性があります。テキストの編集/表示。

PadWrite サンプルは見栄えがよく、API がいかにうまく設計されているかを示しています。

PadWrite のスクリーンショット

サンプル テキストには、"Mixed scripts:" で始まる行が含まれています。ソース コードでは、すべてのサンプル テキストが 1 つの C++wchar_t[]リテラルで指定されており、混合スクリプトはすべて Visual Studio 2012 のコード エディターで正しく表示されます。それらを通常の Windows ワードパッドにコピー アンド ペーストすると、それらも正しく表示されます。また、アラビア語の右から左へのセクションでは、これらの両方のエディターで正しいキャレット ナビゲーション動作が行われます。

しかし、実際に PadWrite サンプルを実行すると、どれも機能しません。代わりに、次のように表示されます。

ここに画像の説明を入力

UTF-8 に変換されてから誤って解釈されているように見えます (すべて で行われているため意味がありませんwchar_t)。

Windows 8.1 を実行しています。PadWrite をワードパッドや Visual Studio 2012 と同様に機能させるにはどうすればよいですか? 更新されていない API のプレリリース バージョンの無効なサンプルですか?

注意。最初の警告サインは、PadWrite が最初にコンパイルさえしなかったことでした-ファイル内でEditableLayout.cpp、ステートメントTextEditor.cppの後にこれを追加する必要がありました:#include

#undef max
#undef min
4

2 に答える 2

2

MSDN フォーラムで回答を得ました。問題は、サンプルが作成されてから、Visual C++ コンパイラが変更されたため、UTF-8 署名が存在しないと UTF-8 エンコーディングを検出できなくなりましたが、Visual Studio は引き続き検出できることです。また、サンプルは作成されているため、ソース ファイルには UTF-8 署名がありません。

その結果、VS のコード エディターはソース ファイル内の文字を正しく表示しますが、ソースをコンパイルすると文字が誤って解釈されます。

したがって、解決策は、名前を付けて保存、エンコーディング付き保存...を使用してから、 Unicode (UTF-8 with signature) を選択することです。

于 2013-12-13T13:59:24.790 に答える
0

VS 2013 でビルドするには、Visual Studio でプロジェクト ファイルとソリューション ファイルを変換します。Common.h で次の行を削除します。

#if (_MSC_VER >= 1200) // want to use std::min and std::max
#undef min
#undef max
#define min(x,y) _cpp_min(x,y)
#define max(x,y) _cpp_max(x,y)
#endif

catch (...)コンパイラは、EditableLayout::Clearのブロック内の到達不能コードについても文句を言います。catch ブロックの 1 行の本体をコメント アウトするだけです。C++ スタイルの例外と SEH の例外が混同されていると思います。

于 2014-02-09T02:14:27.523 に答える