cast von std::string::c_str() in LPCWSTR



  • Hi zusammen

    ich habe folgenden code in meinem Programm:

    std::string text = "Hello, world!";
    
    //dann im message-switch in der WndProc:
    
    DrawText(hdc, (LPCWSTR)text.c_str(), -1, &rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
    

    das Resultat sind chinesische Schriftzeichen 😮

    Also es ist klar dass das was damit zu tun hat,
    dass der ASCII-C-String in einen Unicode-String umgewandelt wird. (bzw. von char* nach wchar_t*)
    Aber ich dachte dass die lateinischen Buchstaben in Unicode dieselben
    Codes hätten wie in ASCII...

    gibts da einen workaround, also gibt es bspw. eine funktion die einen std::string in einen wchar_t* umwandelt statt in einen char*?



  • so hab ich es mal gemacht (wahrscheinlich nicht ansatzweise sicher/richtig):

    string str = "Hello, world!";
    wstring wstr( str.begin(), str.end() );
    LPCWSTR lpcwStr( wstr.c_str() );
    

    google sagt btw:
    http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=366966&SiteID=1
    http://www.vbforums.com/showthread.php?t=387858

    mfg,
    julian



  • Oder einfach:

    USES_CONVERSION;
    
    DrawText(hdc, A2T(text.c_str()), -1, &rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
    

  • Mod

    XMaster schrieb:

    Oder einfach:

    USES_CONVERSION;
    
    DrawText(hdc, A2T(text.c_str()), -1, &rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
    

    Geht nur wenn die ATL vorhanden ist. Ansonsten geht dann auch CA2T ab VS-2003


Log in to reply