CreateTextFormatメソッドでは、fontFamilyNameパラメータが必要です。デフォルトのUIフォントを使用するIDWriteTextFormatを作成するにはどうすればよいですか?DirectWriteでデフォルトのUIフォントでテキストを描画する方法は?
1
A
答えて
2
ここに記載されているコードはすべてチェックなしで行われています(ここではあまりにも多くのメソッドがHRESULTを返すため、このサンプルを吹き飛ばします)。
HDC hdc = BeginPaint(...); //Creates a device context
SelectObject(hdc, hFont);
//Your font is now set for the current device context
//do something
DeleteObject(hFont); //Don't forget to do this at the end!
ビット:今、これを使用する塗料に
(これは別のstackoverflowの質問からです!)
NONCLIENTMETRICS ncm;
ncm.cbSize = sizeof(ncm);
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, &ncm, 0);
HFONT hFont = CreateFontIndirect(&(ncm.lfMessageFont)); //
:あなたがこれを使用する必要があり、システム全体のフォントを取得するための
thisから変更されました!
このソリューションは実際には生で、私の意見では醜いです。
代替ソリューションはIDWriteFont(醜い見えるが、結構です)を得るか:
//just the same as above except the hfont, instead use
NONCLIENTMETRICS ncm;
ncm.cbSize = sizeof(ncm);
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, &ncm, 0);
IDWriteFactory *dwriteFactory_;
DWriteCreateFactory(
DWRITE_FACTORY_TYPE_SHARED,
__uuidof(IDWriteFactory),
reinterpret_cast<IUnknown**>(&dwriteFactory_)
);
IDWriteGdiInterop* gdiInterop = NULL;
dwriteFactory_->GetGdiInterop(&gdiInterop);
IDWriteFont* sys_font = nullptr;
gdiInterop->CreateFontFromLOGFONT(&ncm.lfMessageFont, &sys_font); //Now we have it!
//The text format can now be aquired like this
//We need the font family of our font
IDWriteFontFamily* family = nullptr;
sys_font->GetFontFamily(&family);
//Now we have to get the "localized" name of our family
IDWriteLocalizedStrings* font_family_name = nullptr;
family->GetFamilyNames(&font_family_name);
UINT32 index = 0;
UINT32 length = 0;
BOOL exists = false;
font_family_name->FindLocaleName(L"en-us", &index, &exists);
font_family_name->GetStringLength(index, &length);
wchar_t* name = new wchar_t[length + 1];
font_family_name->GetString(index, name, length + 1);
wprintf(L"%s\n", name);
//Some user defined stuff
DWRITE_FONT_WEIGHT font_weight = DWRITE_FONT_WEIGHT_BLACK;
DWRITE_FONT_STYLE font_style = DWRITE_FONT_STYLE_ITALIC;
DWRITE_FONT_STRETCH font_stretch = DWRITE_FONT_STRETCH_EXPANDED;
IDWriteTextFormat* text_format = nullptr;
dwriteFactory_->CreateTextFormat(name, nullptr, font_weight, font_style, font_stretch, 10.0, L"en-us", &text_format);
でもチェックせずに、コードは何の問題もなく自分のコンピュータ上で動作し、私の最初のソリューション(Windowsの10と同じ結果を与えます、フォントファミリ名はSegoe UI)です。
出典: General Microsoft DirectWrite API documentation
関連する問題
- 1. CGContextShowGlyphsAtPointでテキストを描画する - フォントの寸法を取得する方法は?
- 2. iphoneでテキストを描画する方法
- 3. DirectWriteで斜体フォントの正しいテキスト幅を取得するには?
- 4. イメージにテキストを描画する方法
- 5. VMDのデフォルトの表現/描画方法
- 6. テキストをビットマップに描画するか、UIに動的に描画します
- 7. 円でテキストを描画するには?
- 8. Handles.Labelを使用してシーンビューでテキストを描画する方法
- 9. ペイント法でさまざまなサイズのテキストを描画する方法は?ブラックベリー
- 10. 3Dテキストを描画する最良の方法は?
- 11. 空のMS Chart ChartAreaにテキストを描画する方法は?
- 12. LibGDX:1つのフォントを別のテキストで複数回描画します。
- 13. パスワードフィールドを描画する方法Ember.TextFieldを描画する方法ですか?
- 14. Phpを使用してDirectWrite形式でフォントをイメージ(PNG)に変換する方法は?
- 15. MonoMacでテキストを描画
- 16. サークルオーバーレイでテキストを描画
- 17. Googleマップのボタン、テキスト、画像でオーバーレイを描く方法
- 18. inkcanvas内でのテキストの表示方法または描画方法wpf
- 19. DirectWriteを使用してGDI hdcにテキストを描画すると、透過的な背景を設定する方法はありますか?
- 20. C#でVisioシェイプのテキストのフォントを変更する方法は?
- 21. スプライトユニティでテキストを描画する
- 22. キャンバスでテキストを描画する
- 23. Androidでの線の描画方法テキストの編集?
- 24. ビットマップに円を描かないで描画する方法は?
- 25. TPanelでの描画方法
- 26. 他のアプリケーションの上にグラフィックス/テキストを描画する方法
- 27. PDFKitのPDFビューの背景にテキストを描画する方法
- 28. アンドロイドでテキストを描画するのはどのシステムコンポーネントですか?
- 29. ui-selectでデフォルト値を角度で設定する方法は?
- 30. OpenGLとCocoaでテキストを描画する最も良い方法は?
あなたは、 "デフォルトのUIフォント" や、アプリケーションで使用されるフォントとシステムフォントを意味していますか? –
システムフォント(ネイティブウィンドウアプリケーションのUI要素に使用されるフォント) – eyelash
SystemParametersInfo(SPI_GETNONCLIENTMETRICS)を呼び出し、そこで返されるメッセージボックスフォントを使用します。 –