2012-09-01 1 views
2

J'aiComment puis-je passer des chaînes unicode dans les variables avec L (ou sans)

MessageBoxW(hwnd, L"Καλημέρα", L"Τέστ", MB_OK|MB_APPLMODAL); 

qui fonctionne, mais maintenant comment puis-je passer une valeur qui est dans ma variable « message » et « légende »? Je ne peux plus utiliser L car c'est une variable,

MessageBoxW(hwnd, Lmessage, Lcaption, MB_OK|MB_APPLMODAL); //doesn't work 

Y at-il un L (message) ou quelque chose? le message et la légende sont WCHAR.

+2

Etes-vous sûr que 'message' et' caption' sont de type 'WCHAR'? Cela signifie qu'ils ont chacun un personnage. Sont-ils probablement 'WCHAR *'? –

Répondre

3

Si vos variables sont de type WCHAR*, ils sont naturellement dans le format long chaîne.

Vous pouvez les passer à MessageBoxW comme ils sont.

MessageBoxW(hwnd, message, caption, MB_OK|MB_APPLMODAL); 
1
std::wstring s1 = L"Καλημέρα"; 
std::wstring s2 = L"Τέστ"; 
MessageBoxW(hwnd, s1, s2, MB_OK|MB_APPLMODAL); 

Pour obtenir la chaîne C équivalent:

usual_c_string=s1.c_str(); 

There are various conversions between string types.

+1

Je ne pense pas qu'il existe une version de MessageBoxW qui utilise 'std :: wstring'. Vous auriez besoin d'utiliser '.c_str()'. –

2

Exemple de travail:

#define WIN32_LEAN_AND_MEAN 
#include <windows.h> 
#include <string> 

int main() 
{ 
    std::wstring message = L"Καλημέρα"; 
    std::wstring header = L"Τέστ"; 
    MessageBoxW(NULL, message.c_str(), header.c_str(), MB_OK); 
    return 0; 
} 
0

Mieux:

MessageBoxW(hwnd, boost::widen(message).c_str(), boost::widen(caption).c_str(), MB_OK|MB_APPLMODAL); 

Voir utf8everywhere.org pour l'explication derrière tout cela. En outre: j'éviterais des littéraux de chaîne non-ascii sur MSVC. Le résultat de ce code peut changer si le fichier source est enregistré dans un encodage différent.

Questions connexes