Unicode问题

由龙书的第一章开始

他的代码编译就无法通过,主要是宽字节问题

我把每一个字符串“hello world for example.”

加上一个宏TEXT()

=>

TEXT(“hello world for example.”)

就可以解决这种Unicode的问题,但strcpy(dt.FaceName,"OHFK")这种问题就比较麻烦了

它可能会产生一系列的错误信息,例如:
error   C2664:    'strcpy '   :   cannot   convert   parameter   1   from    'WCHAR   [32] '   to    'char   * '

  //   

warning 'strcpy' was declared deprecated

  replace  'srcpy_s'  instead       .......................

 

然后今天,在我想为我的directx测试程序加上字体的时候,

由于曲折离奇的原因,我发现了更便利的解决方法:

Project->*** Properties->Configuration Properties->General->Char set->use Multi-bytes character set

      //  项目->属性->配置属性->常规->字符集->使用多字节字符集

这样,就不用考虑Unicode 还是Ascii,W还是A的问题了,直奔主题,做自己打开VS想要做的事。

 

在这之前,我找到了很多东西:

将字符串改成双字节的    L"黑体"

用'wcscpy'/'wcscpy_s'替换 'strcpy'

 

最后发现,

龙书的例程

    LOGFONT lf;
    ZeroMemory(&lf, sizeof(LOGFONT));

    lf.lfHeight         = 25;    // in logical units
    lf.lfWidth          = 12;    // in logical units
    lf.lfEscapement     = 0;        
    lf.lfOrientation    = 0;     
    lf.lfWeight         = 500;   // boldness, range 0(light) - 1000(bold)
    lf.lfItalic         = false;   
    lf.lfUnderline      = false;    
    lf.lfStrikeOut      = false;    
    lf.lfCharSet        = DEFAULT_CHARSET;
    lf.lfOutPrecision   = 0;              
    lf.lfClipPrecision  = 0;          
    lf.lfQuality        = 0;           
    lf.lfPitchAndFamily = 0;           
    strcpy(lf.lfFaceName, "Times New Roman"); // font style

    //
    // Create an ID3DXFont based on 'lf'.
    //

    if(FAILED(D3DXCreateFontIndirect(Device, &lf, &Font)))
    {
        ::MessageBox(0, "D3DXCreateFontIndirect() - FAILED", 0, 0);
        ::PostQuitMessage(0);
    }

 

会出错:

error C2664: 'D3DXCreateFontIndirectA' : cannot convert parameter 2 from 'LOGFONT *__w64 ' to 'const D3DXFONT_DESCA *'

这些代码都没有运行过来检测,悲剧

 

然后我换成另外一种创建字体的方式,完全正确了:

D3DXCreateFont(Device,50,30,FW_BOLD,1,FALSE,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,TEXT("System"),&font);

 

 font到一段落。

 

还有,检测指针是否为空的时候,记得不要写错了

原本我要的是if(font)

写成了 if(!font),粗心大意了,后果很费时。

转载于:https://www.cnblogs.com/Kelvinshere/archive/2012/04/24/D3DXCreateFontIndirect.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值