在写一个利用D3D Sprite贴2D图的作业,另外需要渲染一些文字用LPD3DXFONT创建一个字体对象
D3DXCreateFont(m_pDevice, 50, 20, 20, 0, FALSE, DEFAULT_CHARSET, 0, 0, 0, "Arial", &m_pD3DFont);然后
m_pD3DFont->DrawTextA(m_pSprite,m_TextChar,strlen(m_TextChar),&m_TextRect,DT_CENTER,D3DCOLOR_XRGB(255,0,0));结果出来以后只有一个红色的矩形框,没出文字如果把DrawTextA中第一个参数,也就是sprite的参数写成NULL,就能出文字了。但只要窗口一有变化就会报错。我还是想用传入sprite的方法。应该怎么改设置呢?

解决方案 »

  1.   

    ID3DXFont::DrawText Method
    Draws formatted text. This method supports ANSI and Unicode strings.INT DrawText(          LPCSTR pString,
        INT Count,
        LPRECT pRect,
        DWORD Format,
        D3DCOLOR Color
    );
    奇怪你怎么会有6个参数呢?
      

  2.   


    http://msdn.microsoft.com/en-us/library/bb173962(v=VS.85).aspx
    你看这个……第一个参数传的是sprite……
      

  3.   

    而且我实际用的时候发现没有“DrawText”这个函数,只有DrawTextA和DrawTextW
      

  4.   

    #undef INTERFACE
    #define INTERFACE ID3DXFontDECLARE_INTERFACE_(ID3DXFont, IUnknown)
    {
        // IUnknown
        STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
        STDMETHOD_(ULONG, AddRef)(THIS) PURE;
        STDMETHOD_(ULONG, Release)(THIS) PURE;    // ID3DXFont
        STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE9* ppDevice) PURE;
        STDMETHOD(GetLogFont)(THIS_ LOGFONT* pLogFont) PURE;    STDMETHOD(Begin)(THIS) PURE;
        STDMETHOD_(INT, DrawTextA)(THIS_ LPCSTR  pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color) PURE;
        STDMETHOD_(INT, DrawTextW)(THIS_ LPCWSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color) PURE;

        STDMETHOD(End)(THIS) PURE;    STDMETHOD(OnLostDevice)(THIS) PURE;
        STDMETHOD(OnResetDevice)(THIS) PURE;
    };我这边的DriectX9的头文件也就5个参数,估计你的DirectX不是同一个版本,应该是最新的,我这个是比较早的