我使用了个新字体,我把它选入了DC,用TextOut写出来
但是当字符的编码小于128时能正常显示,但超过128不能正确显示
例如
CString s;
s.Format("%c",129);
pDC->TextOut(x,y,s);
结果没有显示,朋友告诉我要用区位码(ASC)来显示字符,但是我不知道
如何在这个例子中用区位码来显示
我想在98下运行程序,不想用Unicode,想用ANSI码来实现
望大家指教~

解决方案 »

  1.   

    我认为你朋友告诉你的不对,98下不能显示那种字符的,最多你可以用MessageBoxW来显示一些UNICODE字符串
      

  2.   

    不行的,不然的话Win98下的字符映射表就能够显示你要看的那些字符串了
      

  3.   

    你在创建字体的同时,除了字体名称,还要注意编码方式
    CreateFont 时注意是 ANSI_CHARSET 还是 GB2312_CHARSET
      

  4.   

    和区位没有关系。字符的编码大于128就应该使用编码,可以是GB,BIG5等等
      

  5.   

    谢谢各位
    如果是GB码,如何用GB的编码来显示字符?
    是不是直接用数字来表示就行了?
    如果是SYMBOL_CHARSET呢?
      

  6.   

    那么按照你的这种方式的话,只要选择了这种字体,自然会显示那样的字符串,看下面的代码
    void CSDI3View::OnDraw(CDC* pDC)
    {
    CSDI3Doc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
    CFont font;
    VERIFY(font.CreateFont(
    40,                        // nHeight
    0,                         // nWidth
    0,                         // nEscapement
    0,                         // nOrientation
    FW_NORMAL,                 // nWeight
    FALSE,                     // bItalic
    FALSE,                     // bUnderline
    0,                         // cStrikeOut
    ANSI_CHARSET,              // nCharSet
    OUT_DEFAULT_PRECIS,        // nOutPrecision
    CLIP_DEFAULT_PRECIS,       // nClipPrecision
    DEFAULT_QUALITY,           // nQuality
    DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily
    "Symbol"));                 // lpszFacename

    // Do something with the font just created...
    CFont* def_font = pDC->SelectObject(&font);
    pDC->TextOut(5, 5, "屯瓢З", 8);
    pDC->SelectObject(def_font);

    // Done with the font.  Delete the font object.
    font.DeleteObject(); 

    }会显示直径符号、度、扑克牌等符号,都是大于128的字符