IDirect3DDevice9* dev ;
ID3DXFont* font;
...
...
...
HFONT TextFont=CreateFont( 12, 6,0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, PROOF_QUALITY, FIXED_PITCH | FF_SCRIPT, "宋体" );
D3DXCreateFont( dev, TextFont, &font );
RECT rc;
rc.left = 50;
rc.top =  10;
rc.right =  300;
rc.bottom = 300;
font->Begin();
font->DrawText(_T("Ready"), -1,  &rc, DT_TOP|DT_LEFT|DT_SINGLELINE, 0xff00ff00);
font->End();
结果能显示文字,但是只能显示部分,比如"ready" 实际上只会显示"rea"。有什么解决方法吗?

解决方案 »

  1.   

    font->DrawText(NULL, _T("Ready"), _tcslen(_T("Ready")),  &rc, DT_TOP|DT_LEFT|DT_SINGLELINE, 0xff00ff00); 
      

  2.   

    我运行的时候没有出现这个问题啊。
    不过可能是DirectX版本不同的问题,我的版本(Microsoft DirectX SDK (March 2008))里面,D3DXCreateFont和DrawText的用法都已经不一样了。我测试的代码:
    //====================================================================
    D3DXCreateFont( g_pd3dDevice,12,6,0,1,FALSE,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE,L"宋体", &font ); 
    //====================================================================
    RECT rc; 
    rc.left = 50; 
    rc.top =  10; 
    rc.right =  300; 
    rc.bottom = 300; 
    font->DrawText(0,L"Ready", -1,  &rc, DT_TOP|DT_LEFT|DT_SINGLELINE, 0xff00ff00); 
      

  3.   

    先试着把rc.right = 300 改成rc.right = 600 看看btw:INT Count参数设置成-1,函数将会自动计算字符数
      

  4.   

    我运行的时候没有出现这个问题啊。 
    不过可能是DirectX版本不同的问题,我的版本(Microsoft DirectX SDK (March 2008))里面,D3DXCreateFont和DrawText的用法都已经不一样了。 我测试的代码: 
    //==================================================================== 
    D3DXCreateFont( g_pd3dDevice,12,6,0,1,FALSE,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE,L"宋体", &font ); 
    //==================================================================== 
    RECT rc; 
    rc.left = 50; 
    rc.top =  10; 
    rc.right =  300; 
    rc.bottom = 300; 
    font->DrawText(0,L"Ready", -1,  &rc, DT_TOP|DT_LEFT|DT_SINGLELINE, 0xff00ff00); ==================================================================================================
    更新SDK后还是一样 只显示"Rea"
    D3DXCreateFont( dev,12,6,0,1,FALSE,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE,_T("宋体"), &font );
    RECT rc;
    rc.left = 50;
    rc.top =  10;
    rc.right =  300;
    rc.bottom = 300;
    font->DrawText(NULL,_T("Ready"), -1,  &rc, DT_TOP|DT_LEFT|DT_SINGLELINE, 0xff00ff00);
    从网上看到好像要用到ID3DXSprite,ID3DXSprite怎么用法啊?
    D3DXCreateSprite(dev,&spr);
    D3DXCreateFont( dev,12,6,0,1,FALSE,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE,_T("宋体"), &font );
    RECT rc;
    rc.left = 50;
    rc.top =  10;
    rc.right =  300;
    rc.bottom = 300;
    spr->Begin(D3DXSPRITE_ALPHABLEND);
    font->DrawText(spr,_T("Ready"), -1,  &rc, DT_TOP|DT_LEFT|DT_SINGLELINE, 0xff00ff00);
    spr->End();
    结果出错了。
      

  5.   

    D3DSprite那个是说,如果你需要渲染在自己制定的2D精灵里面,就把那个2D精灵的指针传递进去,否则的话,系统会在内部自动生成一个2D精灵。然后问一下,你的程序,后备缓冲区的分辨率是多少?就是D3DPRESENT_PARAMETERS的BackBufferWidth和BackBufferHeight。