Vous êtes sur la page 1sur 3

Utilizao de Recursos no ambiente Win32 com o Visual Studio 2008

INTRODUO
No ambiente Win32, recursos so uma srie de objetos padronizados do sistema operacional que um programa pode utilizar. Os principais recursos so:

Cursores cones BitMaps (figuras) Janelas de dilogos Tabelas de strings Sons Verso

Os recursos utilizados por um programa geralmente esto armazenados em disco e so trazidos para a memria quando o programa precisa fazer uso dos mesmos. Aps o uso a memria pode ser liberada, permitindo assim a utilizao eficiente da mesma. O sistema operacional disponibiliza uma srie de funes especficas para realizar a carga dos recursos durante a execuo do programa como p. ex.:

LoadIcon() LoadString()

etc. Geralmente essas funes precisam receber como parmetros:

a instncia do programa (em um sistema multitarefas pode haver vrias instncias do mesmo programa executando simultaneamente e o sistema operacional precisa saber qual delas est solicitando a carga de um determinado recurso). um ndice especificando o recurso desejado dentro do arquivo de recursos. um ponteiro especificando onde, na memria, o recurso deve ser carregado.

Os recursos podem ser globais, disponibilizados pelo sistema, como p. ex. cursores padro, sons padro, etc.., ou especficos de um determinado programa. Os recursos que so especficos de um determinado programa so geralmente armazenados em disco como parte do arquivo executvel desse programa (embora existam outras alternativas). Para armazenar os dados que constituem os recursos especficos de um determinado programa necessrio gerar um arquivo binrio de recursos normalmente com a extenso .res o qual ser linkado junto com outros arquivos .obj e .lib pelo linker, gerando o arquivo .exe executvel. Para gerar o arquivo binrio .res preciso criar um arquivo texto geralmente com a extenso .rc e edit-lo com os vrios recursos desejados. Isso feito o arquivo deve ser compilado utilizando um compilador especfico para esse fim o resource compiler rc.exe o qual gerar o arquivo binrio .res desejado. Arquitetura de Computadores EL66C Prof. Gortan 1. sem. 2012 Pag. 1 de 3

Utilizao de Recursos no ambiente Win32 com o Visual Studio 2008 Embora para alguns tipos de recursos seja possvel utilizar um simples editor de texto para criar o arquivo .rc (p. ex. para tabelas de strings isso pode ser vivel), para a maioria dos recursos necessrio um editor especializado para cada recurso. O Visual Studio permite automatizar todas essas tarefas facilitando a edio e incluso de recursos em um programa. Alm disso, ao se criar um arquivo de recursos .rc geralmente necessrio criar tambm um arquivo cabealho .h, que contenha referncias aos recursos, o qual ser ento includo no arquivo fonte que necessite fazer uso desses recursos.

PASSOS PARA SE CRIAR UM ARQUIVO DE RECURSOS CONTENDO UMA TABELA DE STRINGS NO VISUAL STUDIO
1. No menu File|New especifique um arquivo do tipo resource script e fornea o seu nome com a extenso .rc p. ex. WinGui.rc. Esse passo cria um arquivo de recursos .rc vazio, sem nenhum recurso. Cria tambm um arquivo cabealho com o nome padro resource.h que ser utilizado para armazenar os mnemnicos dos recursos que forem criados. Renomeie o arquivo resource.h para um nome mais significativo para seu programa, p. ex.: WinGuiRes.h. Para isso, no menu View|Resource Includes, altere o nome padro resource.h para WinGuiRes.h. Esse arquivo dever ser includo em seu arquivo fonte .c para permitir fazer referncia aos vrios mnemnicos que tiverem sido criados com o editor de recursos. No menu Insert|Resource selecione string table. Esse passo coloca uma tabela de strings vazia dentro do arquivo WinGui.rc e abre o editor de tabelas de strings. Edite as vrias strings necessrias ao seu programa. Com um duplo clique do mouse na posio da tabela a se editar o editor de tabelas de string abre um dilogo onde possvel editar tanto o mnemnico para a string (o editor oferece um valor padro para o mnemnico do tipo IDS_STRING1 , ou seja Identificador da string 1, o qual no muito til como mnemnico) quanto a string propriamente dita. A tabela mostra os valores editados, inclusive o valor do ndice para o qual foi criado um mnemnico. Utilize mnemnicos que faam sentido para seu programa. P. ex., se a string Bem vindo ao programa WinGui! utilize IDS_WELCOME. O prefixo IDS_ no obrigatrio mas aconselhvel pois facilita distinguir entre mnemnicos para ndices de strings e outros ndices de outros recursos. O mnemnico em ingls tambm no obrigatrio mas pode facilitar as coisas em casos de internacionalizao do recurso, em que o arquivo de recursos fornecido a vrios tradutores para transformar as strings para outros idiomas. 5. No esquea de incluir o arquivo WinGuiRes.h em seu cdigo fonte, para poder ter acesso aos mnemnicos criados. Pag. 2 de 3

2.

3. 4.

Arquitetura de Computadores EL66C Prof. Gortan 1. sem. 2012

Utilizao de Recursos no ambiente Win32 com o Visual Studio 2008 6. Utilize as strings criadas em seu programa carregando-as para um buffer previamente alocado (pode ser na pilha, como varivel local ou no heap atravs das funes de alocao de memria GlobalAlloc() e Free()) usando para isso a funo LoadString(). Aps carregada a string pode ser mostrada com MessageBox(). O exemplo a seguir mostra como fazer isso:

void MostraBoasVindas(void) { TCHAR msg[ 300 ]; LoadString( hInstance, IDS_WELCOME, msg, // buffer para a string // instncia recebida em WinMain() // pressupe que existe a string // onde colocar a string

sizeof(msg)); // tamanho do nosso buffer // a rigor deveramos testar se LoadStrig() foi bem sucedida MessageBox( NULL, msg, MB_OK); } // esta a string carregada Programa WinGui v1.0,

O arquivo WinGuiRes.h contm a definio de IDS_WELCOME. IDS_WELCOME est definido como um nmero, que um ndice na tabela de strings, e no como a string propriamente dita. Como IDS_WELCOME um #define para um nmero e no para uma string, no possvel utiliz-lo diretamente como segundo parmetro da funo MessageBox() Em vez disso preciso antes carregar a string para a memria. Embora isso possa parecer uma complicao desnecessria e algum pode estar se perguntando por que simplesmente no criar um #define de IDS_WELCOME como a mensagem diretamente, preciso lembrar que a carga da string ser feita em tempo de execuo e no de compilao, quando ento o preprocessador pode substituir o mnemnico pela string. Em tempo de execuo muito mais eficiente buscar a string em um arquivo atravs de um ndice (um nmero) do que atravs de uma outra string (um mnemnico). Outro detalhe que quando o sistema operacional recebe a primeira chamada a LoadString() ele no carrega apenas a string solicitada para a memria, mas um bloco de 16 strings contguas, para aumentar a eficincia, pois supe que as strings vizinhas provavelmente logo tambm sero necessrias. Por isso, ao editar a tabela de strings interessante agrupar strings correlatas para melhorar a eficincia de acesso.

Arquitetura de Computadores EL66C Prof. Gortan 1. sem. 2012

Pag. 3 de 3

Vous aimerez peut-être aussi