Unicode pour les applications Windows peuvent être résumées avec quelques règles simples:
- Dans vos paramètres de projet dans Visual Studio choisissez Unicode (FYI: sous Windows, Unicode est toujours UTF16).
- Obtenez une fonction UTF8 à UTF16 et une fonction UTF16 à UTF8. (Vous pouvez l'écrire vous-même ou le trouver sur internet, j'utilise personnellement ceux des bibliothèques Poco C++).
- Dans votre code, utilisez toujours std :: string pour vos interfaces de classe et de fonction.
- Lorsque vous devez utiliser un appel WinAPI prenant un paramètre de chaîne, vous pouvez utiliser les fonctions de conversion pour remplir un std :: wstring local, sur lequel vous pouvez appeler la méthode c_str() pour la transmettre à la fonction API.
- Si vous devez obtenir des données textuelles à partir d'une fonction WinAPI, vous devez généralement créer un tableau TCHAR local sur la pile, le passer à la fonction, construire un std :: wstring à partir du résultat, puis le convertir en std :: string en utilisant votre fonction de conversion UTF16 vers UTF8.
Exemples:
obtention de texte à l'aide de tableau alloué pile
std::string getCurrentDirectory()
{
TCHAR buffer[MAX_PATH];
::GetCurrentDirectory(sizeof(buffer)/sizeof(TCHAR), &buffer[0]);
return std::string(ToUTF8(buffer));
}
Obtention d'un texte en utilisant un tampon allouée dynamiquement
std::string getWindowText(HWND inHandle)
{
std::string result;
int length = ::GetWindowTextLength(inHandle);
if (length > 0)
{
TCHAR * buffer = new TCHAR[length+1];
::GetWindowText(inHandle, buffer, length+1);
result = ToUTF8(buffer);
delete [] buffer;
}
return result;
}
texte de réglage
void setWindowText(HWND inHandle, const std::string & inText)
{
std::wstring utf16String = ToUTF16(inText);
if (0 == ::SetWindowText(inHandle, utf16String.c_str()))
{
ReportError("Setting the text on component failed. Last error: " + getLastError(::GetLastError()));
}
}
Espérons que cela aide.
Il me semble que vous comprenez déjà tout cela déjà. Vous devez toujours utiliser L "pour définir un tableau de caractères Unicode – toto
Vous pouvez utiliser' std :: wstring' à la place de 'std :: string' – jalf