bool CDirectWriteSystem::Initialize() { if (m_hD2DLib == nullptr) { m_hD2DLib = Util::LoadSystemLibrary(TEXT("d2d1.dll")); if (m_hD2DLib == nullptr) return false; } if (m_hDWriteLib == nullptr) { m_hDWriteLib = Util::LoadSystemLibrary(TEXT("dwrite.dll")); if (m_hDWriteLib == nullptr) return false; } if (m_pD2DFactory == nullptr) { typedef HRESULT (WINAPI *D2D1CreateFactoryFunc)( D2D1_FACTORY_TYPE factoryType, REFIID riid, const D2D1_FACTORY_OPTIONS *pFactoryOptions, void **ppIFactory); D2D1CreateFactoryFunc pD2D1CreateFactory = reinterpret_cast<D2D1CreateFactoryFunc>(::GetProcAddress(m_hD2DLib, "D2D1CreateFactory")); if (pD2D1CreateFactory == nullptr) return false; HRESULT hr = pD2D1CreateFactory( D2D1_FACTORY_TYPE_SINGLE_THREADED, __uuidof(ID2D1Factory), nullptr, reinterpret_cast<void**>(&m_pD2DFactory)); if (FAILED(hr)) return false; } if (m_pDWriteFactory == nullptr) { auto pDWriteCreateFactory = GET_LIBRARY_FUNCTION(m_hDWriteLib, DWriteCreateFactory); if (pDWriteCreateFactory == nullptr) return false; HRESULT hr = pDWriteCreateFactory( DWRITE_FACTORY_TYPE_SHARED, __uuidof(IDWriteFactory), reinterpret_cast<IUnknown**>(&m_pDWriteFactory)); if (FAILED(hr)) return false; } return true; }
HRESULT CreateDeviceIndependentResources() { HRESULT hr; hr = pD2D1CreateFactory( D2D1_FACTORY_TYPE_SINGLE_THREADED, __uuidof(ID2D1Factory), NULL, (void**)&pD2DFactory_ ); if (SUCCEEDED(hr)) { hr = pDWriteCreateFactory( DWRITE_FACTORY_TYPE_SHARED, __uuidof(IDWriteFactory), reinterpret_cast<IUnknown**>(&pDWriteFactory_) ); } if (SUCCEEDED(hr)) { hr = pDWriteFactory_->CreateTextFormat( CNJIni::GetSettings()->commentFontName.c_str(), NULL, CNJIni::GetSettings()->commentFontBold ? DWRITE_FONT_WEIGHT_BOLD : DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STRETCH_NORMAL, static_cast<FLOAT>(iFontSize_), L"ja-jp", &pTextFormat_ ); } if (SUCCEEDED(hr)) { hr = pTextFormat_->SetTextAlignment(DWRITE_TEXT_ALIGNMENT_LEADING); } if (SUCCEEDED(hr)) { hr = pTextFormat_->SetParagraphAlignment(DWRITE_PARAGRAPH_ALIGNMENT_NEAR); } if (SUCCEEDED(hr)) { hr = pTextFormat_->SetWordWrapping(DWRITE_WORD_WRAPPING_NO_WRAP); } return hr; }