TN057: A localização de componentes MFC

Esta anotação descreve alguns dos desenhos ou modelos e procedimentos que você pode usar para localizar seu componente, seja ele um aplicativo ou um controle OLE ou uma DLL que usa o MFC.

Visão geral

Há realmente dois problemas para resolver quando a localização de um componente que usa o MFC. Em primeiro lugar, você deve localizar seus próprios recursos – cordas, caixas de diálogo e outros recursos que são específicos para seu componente. A maioria dos componentes criados usando o MFC também incluem e usam um número de recursos que são definidos pelo MFC. Você deve fornecer recursos MFC localizados bem. Felizmente, vários idiomas já são fornecidos pelo MFC propriamente dito.

Além disso, o componente deve estar preparado para ser executado em seu ambiente de destino (Europeu ou DBCS Habilitado ambiente). Na maior parte, isso depende de seu aplicativo de tratamento de caracteres com o conjunto de bits alto corretamente e manipulação de seqüências de caracteres com caracteres de byte duplo. MFC está habilitado, por padrão, para ambos os ambientes, tal que é possível ter um binário único "todo o mundo" que é usado em todas as plataformas com apenas diferentes recursos conectados em tempo de instalação.

Localização de recursos do componente

Localização de seu aplicativo ou DLL deve envolver simplesmente substituindo os recursos com os recursos que coincidam com o idioma de destino. Para os seus próprios recursos, isso é relativamente simple: editar os recursos no editor de recursos e compilação seu aplicativo. Se seu código é escrito corretamente haverá não seqüências de caracteres ou texto que você deseja localizar embutido no seu código-fonte C++ – localização tudo pode ser feita, simplesmente modificando recursos. Na verdade, você pode implementar seu componente tal que todos os fornecer uma versão localizada não envolve até mesmo uma compilação do código original. Isso é mais complexo, mas é bem a pena e é o mecanismo escolhido para MFC propriamente dito. Também é possível localizar um aplicativo carregando o arquivo EXE ou DLL no editor de recursos e editando os recursos diretamente. Embora isso seja possível, é exige reaplicação dessas alterações cada vez que você cria uma nova versão do seu aplicativo.

Uma maneira de evitar isso é localizar todos os recursos em uma DLL separada, às vezes chamada de um DLL satélite. Esta DLL, em seguida, é carregada dinamicamente em tempo de execução e os recursos são carregados do DLL em vez do módulo principal com todo o seu código. MFC diretamente oferece suporte a essa abordagem. Considere um aplicativo chamado MYAPP.EXE; poderia ter todos os seus recursos em uma DLL chamada MYRES.DLL. no aplicativo s InitInstance ele executaria o seguinte para carregar a DLL e causar MFC carregar recursos desse local:

CMyApp::InitInstance()
{
/ / um das primeiras coisas que o código de inicialização
HINSTANCE hInst = LoadLibrary("myres.dll");
se (hInst! = NULL)
AfxSetResourceHandle(hInst);

/ / de seguir outro código de inicialização
.
.
.
}

Daí em seguida diante, a MFC carregará recursos da DLL em vez de MyApp. exe. Todos os recursos, no entanto, devem estar presentes em que DLL – MFC não irá procurar a instância do aplicativo em busca de um determinado recurso. Essa técnica aplica-se igualmente bem a regular DLLs bem como controles OLE. O programa de instalação deve copiar a versão apropriada de MYRES.DLL dependendo em qual localidade de recurso o usuário gostaria.

É relativamente fácil criar um recurso somente DLL. Você criar um projeto DLL, adicionar seu.RC arquivo a ele e adicionar os recursos necessários. Se você tiver um projeto existente que não usa essa técnica, você pode copiar os recursos desse projeto. Depois de adicionar o arquivo de recurso para o projeto você está quase pronto para compilação o projeto. A única coisa que você deve fazer é definir o vinculador opções para incluir /NOENTRY.. Isso informa o vinculador que a DLL não tem nenhum ponto de entrada – como não tem nenhum código, ele não tem nenhum ponto de entrada.

&Notanbsp;  O editor de recursos no Visual C++ 4.0 e posterior suporta múltiplos idiomas por.Arquivo RC. Isso pode tornar muito fácil gerenciar sua localização em um único projeto. Os recursos para cada idioma é controlada por diretivas de pré-processamento geradas pelo editor de recursos.

Usar o MFC fornecido recursos localizados

Qualquer aplicativo do MFC que você ComCompilação reutiliza duas coisas do MFC: código e recursos. Ou seja, a MFC tem várias mensagens de erro, caixas de diálogo internas e outros recursos que são usados pelas classes do MFC. Em ordem para completamente localizar seu aplicativo, você precisará localizar não apenas recursos de seu aplicativo, mas também os recursos que vêm diretamente de MFC. MFC fornece um número de idioma diferente arquivos de recursos automaticamente, para que se o idioma que você está alvejando é uma das línguas que MFC já oferece suporte, você só precisa se certificar de que você use esses recursos localizados.

De redação deste artigo MFC oferece suporte: chinês, alemão, espanhol, francês, italiano, japonês e coreano. Os arquivos que contêm essas versões localizadas estão no MFC\INCLUDE\L.* (o 'L' significa para localizado) diretórios. Os arquivos alemãs estão em MFC\Incluir\L.deu, por exemplo. Para fazer com que seu aplicativo usar esses arquivos RC em vez dos arquivos localizados no MFC\Incluir., simplesmente adicionar um /IC:\PROGRAM FILES\DEVSTUDIO\VC\MFC\INCLUDE\L.DEU a sua linha de comando RC (este é apenas um exemplo – você precisará substituir sua localidade de escolha, bem como o diretório no qual você instalou o Visual C++).

As instruções acima funcionará se seu aplicativo estaticamente links com MFC. A maioria dos aplicativos vincular dinamicamente (porque esse é o padrão de AppWizard). Neste cenário, não só o código é dinamicamente vinculados – assim são os recursos. Como resultado, você pode localizar os recursos em seu aplicativo, mas os recursos de implementação do MFC serão ainda carregados partir o MFC4x.DLL (ou posterior) ou de MFC4xLOC.DLL se ele existir. Você pode abordar isso de dois ângulos diferentes.

Recurso some&nte nas edições Enterprise e Professionalnbsp;  Vinculação estática ao MFC é suportado apenas no Visual C++ Professional e Enterprise Editions. Para obter mais informações, consulte Edições do Visual C++.

A abordagem mais complexa é a navio um do MFC4xLOC.DLLs localizadas (como MFC4xDEU, para alemão, MFC4xESP.DLL para espanhol, etc.), ou uma versão posterior e instalar o MFC4xLOC.DLL apropriado no diretório do sistema quando o usuário instala o aplicativo. Isso pode ser muito complexo para o desenvolvedor e o usuário final e como tal não é recomendado. Consulte técnico 56 anotação para obter mais informações sobre essa técnica e suas advertências.

A abordagem mais simples e mais segura é incluir os recursos MFC localizados no seu aplicativo ou DLL próprio (ou sua DLL satélite) se você estiver usando um. Isso evita os problemas de instalação de MFC4xLOC.DLL corretamente. Para fazer isso, siga as mesmas instruções para o caso de estática acima (definindo a linha de comando RC corretamente para apontar para os recursos localizados), exceto que você também deve remover o /D_AFXDLL definir que foi adicionado por AppWizard. Quando /D_AFXDLL é definida, AFXRES.H (e os outros arquivos do MFC RC) realmente não definem quaisquer recursos (porque eles serão puxados das DLLs do MFC em vez disso).

Técnico anotações por número |nbsp; &Notas técnicas por categoria

Index