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),粗心大意了,后果很費時。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM