none
TextOut为什么会乱码 RRS feed

  • 问题

  •  

    TCHAR szTmp[256];

    ...

    wsprintf(szTmp,TEXT("%s"),typeid(WNDCLASS).name());

    TextOutW(hdc,0,40,szTmp,lstrlen(szTmp) );

    为什么输出的是乱码,我知道typeid(WNDCLASS).name()是 const char*  ,怎么让他在unicode下输出正常的字呢?

    环境是vs2010,工程是unicode。


    ;还有啊,知道一个窗体的句柄,能不能获取到这个句柄的类的类型名称呢?不是类的名字,是类的类型
    2011年7月26日 7:33

答案

  • 您可以使用CString类型

    CString str(typeid(xx).name());
    TextOut(hdc, 0, 40, str, str.GetLength());


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    • 已标记为答案 ohsorryms 2011年7月27日 5:40
    2011年7月26日 7:55
    版主
  • 用%S

    L"%S",(const char *)s;

    L"%s",(const wchar_t*)s;

    "%s",(const char*)s;

    "%S",(const wchar_t*)s;

    vc是这样的。而linux下面正好又是反过来的。

    • 已标记为答案 ohsorryms 2011年7月27日 5:39
    2011年7月26日 10:00
  • 您不想将char[]转成wchar_t[]的话,您可以直接使用TextOutA输出char[]字符串。

    如果要转的话,可以使用MultiByteToWide(CP_ACP,...);将char[]转成wchar_t[],然后再使用TextOutW()输出wchar_t[]字符串


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    • 已标记为答案 ohsorryms 2011年7月27日 5:39
    2011年7月27日 4:56
    版主

全部回复

  • 您可以使用CString类型

    CString str(typeid(xx).name());
    TextOut(hdc, 0, 40, str, str.GetLength());


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    • 已标记为答案 ohsorryms 2011年7月27日 5:40
    2011年7月26日 7:55
    版主
  • 那要引用那个lib啊,怎么这几个都不行呢

    #include <cstring>
    #include <string>
    #include <string.h>

    2011年7月26日 8:10
  • 我在用API编程,没有MFC,都是C的代码。
    2011年7月26日 8:30
  • 用%S

    L"%S",(const char *)s;

    L"%s",(const wchar_t*)s;

    "%s",(const char*)s;

    "%S",(const wchar_t*)s;

    vc是这样的。而linux下面正好又是反过来的。

    • 已标记为答案 ohsorryms 2011年7月27日 5:39
    2011年7月26日 10:00
  • 您不想将char[]转成wchar_t[]的话,您可以直接使用TextOutA输出char[]字符串。

    如果要转的话,可以使用MultiByteToWide(CP_ACP,...);将char[]转成wchar_t[],然后再使用TextOutW()输出wchar_t[]字符串


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    • 已标记为答案 ohsorryms 2011年7月27日 5:39
    2011年7月27日 4:56
    版主