Resumo da programação de Unicode
Para aproveitar o MFC e o suporte de tempo de execução c para Unicode, você precisa:
Definir _ Unicode.
Definir o símbolo _ Unicode antes de construir o seu programa.
Especifique o ponto de entrada.
Sobre o saída página da pasta do projeto vinculador Property Pages diálogo caixa, defina o símbolo de ponto de entrada wWinMainCRTStartup.
Use tipos e funções de tempo de execução portátil.
Use as funções de tempo de execução c adequadas para a manipulação de seqüência de caracteres Unicode. Você pode usar o wcs família de funções, mas você pode preferir o portátil totalmente (internacionalmente ativado) _ TCHAR macros. Essas macros são prefixadas com _tcs; eles substituem, um para um, para o str da família de funções. Essas funções são descritas detalhadamente no internacionalização seção a Referência da biblioteca de tempo de execução. Para obter mais informações, consulte Os mapeamentos de texto genérico na Tchar.h.
Use _ TCHAR e os tipos de dados portátil relacionados descritos em suporte a Unicode.
Manipule seqüências de caracteres literais corretamente.
O compilador Visual C++ interpreta uma seqüência literal codificada como:
L"this is a literal string"
significa uma seqüência de caracteres Unicode. Você pode usar o mesmo prefixo para caracteres literais. Use o _ t macro para codificar seqüências de caracteres literais, genericamente, para que eles compilados como cadeias de caracteres Unicode em Unicode ou como seqüências ANSI (incluindo MBCS) sem Unicode. Por exemplo, em vez de:
pWnd->SetWindowText( "Hello" );
use:
pWnd->SetWindowText( _T("Hello") );
Com _ Unicode definido, _ t converte a seqüência literal para o formulário com o prefixo L; Caso contrário, _ t converte a seqüência de caracteres sem o prefixo L.
Dica
O _ t macro é idêntica do _TEXT macro.
Cuidado passando o comprimento da seqüência para funções.
Algumas funções deseja que o número de caracteres em uma seqüência de caracteres; outros usuários desejarem que o número de bytes. Por exemplo, se _ Unicode for definida, a seguinte chamada para um CArchive objeto não funcionará (str é um CString):
archive.Write( str, str.GetLength( ) ); // invalid
Em um aplicativo Unicode, o comprimento lhe o número de caracteres, mas não o número correto de bytes, porque cada caractere é de 2 bytes de largura. Em vez disso, você deve usar:
archive.Write( str, str.GetLength( ) * sizeof( _TCHAR ) ); // valid
que especifica o número correto de bytes a gravar.
No entanto, funções de membro do MFC são orientados por caractere, em vez de orientados a byte, trabalham sem essa codificação extra:
pDC->TextOut( str, str.GetLength( ) );
CDC::TextOutusa um número de caracteres, não é um número de bytes.
Use fopen_s, _wfopen_s para abrir arquivos do Unicode.
Para resumir, MFC e a biblioteca de tempo de execução fornecem o seguinte suporte para Unicode de programação em Windows 2000:
Exceto para as funções de membro de classe de banco de dados, todas as funções do MFC estão habilitado para Unicode, incluindo CString. CStringtambém fornece funções de conversão Unicode/ANSI.
A biblioteca de tempo de execução fornece as versões de todas as funções de manipulação de seqüência de caracteres do Unicode. (A biblioteca de tempo de execução também fornece versões de portátil adequadas para Unicode ou MBCS. Estas são as _tcs macros.)
TCHAR.h fornece tipos de dados portáteis e a _ t macro para converter seqüências de caracteres literais e caracteres. Para obter mais informações, consulte Os mapeamentos de texto genérico na Tchar.h.
A biblioteca de tempo de execução fornece uma versão de caractere largo de principal. Use wmain para tornar seu aplicativo com reconhecimento de Unicode.