Direct2D之Hello World

"Hello World" Sample

      这个例子就是在Dx11的屏幕上输出一句话。 在Dx11上写文字,估计微软下了不少功夫,生成了一堆乱七八糟的接口,因为资料不全,这里就不臆想它们的功能了,先向Dx11世界说一声"Hello~"吧~~

 

 

这个例题中需要很多的新接口,所以加载的头文件有所增加,又增加了一个新的库 dwrite.lib

// Windows 头文件:
#include <windows.h>
#include <tchar.h>
#include <d2d1.h>
#include <dwrite.h>
#include <wincodec.h>
在这里声明了很多的全局变量,其中有一个DirectWrite是在win7上提供的高质量的文字描绘DirectX API,提供了高质量ClearType文本渲染,支持多种格式的字体,和GDI兼容的文本渲染。

// 全局变量:  
HINSTANCE              hInst;                    // 当前实例  
ID2D1Factory*          pD2DFactory = NULL;      
ID2D1SolidColorBrush * p_pBlackBrush = NULL;     // 实例笔刷  
ID2D1HwndRenderTarget* p_pRenderTarget = NULL;   //渲染面  
IDWriteFactory       * p_pDWriteFactory = NULL;  
IDWriteTextFormat    * m_pText = NULL;  

      DirectWrite独立于任何特定的渲染技术。应用程序可以选择适合他们自己的渲染技术,这就给应用程序的开发提供了很大的灵活性去用GDI或者Direct3D或Direct2D去渲染程序的某些部分。事实上,应用程序可以用一个专用的渲染栈去渲染DirectWrite。 

LRESULT InItD2D(HWND hWnd)  
{  
    //创建一个Direct2D资源指针  
    HRESULT hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED,&pD2DFactory);  
  
    if(SUCCEEDED(hr))  
    {  
        // Create a DirectWrite factory.  
        hr = DWriteCreateFactory(  
            DWRITE_FACTORY_TYPE_SHARED,  
            __uuidof(p_pDWriteFactory),  
            reinterpret_cast<IUnknown **>(&p_pDWriteFactory));  
    }  
  
    if (SUCCEEDED(hr))  
    {  
        // Create a DirectWrite text format object.  
        hr = p_pDWriteFactory->CreateTextFormat(  
            L"微软雅黑",  
            NULL,  
            DWRITE_FONT_WEIGHT_NORMAL,  
            DWRITE_FONT_STYLE_NORMAL,  
            DWRITE_FONT_STRETCH_NORMAL,  
            12,  
            L"", //locale  
            &m_pText);  
    }  
  
    if (SUCCEEDED(hr))  
    {  
        // Center the text horizontally and vertically.  
        m_pText->SetTextAlignment(DWRITE_TEXT_ALIGNMENT_CENTER);  
  
        m_pText->SetParagraphAlignment(DWRITE_PARAGRAPH_ALIGNMENT_CENTER);
    }  
    // Obtain the size of the drawing area.  
    GetClientRect(hWnd, &rc);  

    // Create a Direct2D render target            
    hr = pD2DFactory->CreateHwndRenderTarget(D2D1::RenderTargetProperties(),  
                                             D2D1::HwndRenderTargetProperties(hWnd,D2D1::SizeU(rc.right - rc.left, rc.bottom - rc.top)),  
                                             &p_pRenderTarget);  
    // 设置笔刷  
    if (SUCCEEDED(hr))  
    {  
        hr = p_pRenderTarget->CreateSolidColorBrush(  
            D2D1::ColorF(D2D1::ColorF::Black),  
            &p_pBlackBrush  
            );  
    }  
  
    return hr;  
} 

设定完成

VOID Render()  
{  
    static const WCHAR sc_helloWorld[] = L"看不懂中文吧!笨蛋!";  
    if(!p_pRenderTarget)  
        return ;  
    p_pRenderTarget->BeginDraw();  
    p_pRenderTarget->SetTransform(D2D1::Matrix3x2F::Identity());  
  
    p_pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::White));  
  
    p_pRenderTarget->DrawText(  
        sc_helloWorld,  
        ARRAYSIZE(sc_helloWorld) - 1,  
        m_pText,  
        D2D1::RectF(0, 0, 800, 800),  
        p_pBlackBrush  
        );  
    p_pRenderTarget->EndDraw();  
}  

你可能感兴趣的:(Direct2D之Hello World)