Criação e Seleção de Fontes
A caixa de diálogo Fonte comum simplifica o processo de criação e seleção de fontes. Ao inicializar a estruturaCHOOSEFONT e chamar a funçãoCHOOSEFONT, um aplicativo pode suportar a mesma interface de seleção de fontes que anteriormente exigia muitas linhas de código personalizado. (Para obter mais informações sobre a caixa de diálogo Fonte comum, consulte Biblioteca de caixas de diálogo comuns .)
Seleção pelo Utilizador
A maioria das operações de criação e seleção de fontes envolve o usuário. Por exemplo, os aplicativos de processamento de texto permitem que o usuário selecione fontes exclusivas para títulos, notas de rodapé e corpo de texto. Depois que o usuário seleciona uma fonte usando a caixa de diálogo Font e pressiona o botão OK, a função CHOOSEFONT inicializa os membros de uma estrutura deLOGFONTcom os atributos da fonte solicitada. Para usar essa fonte para operações de saída de texto, um aplicativo deve primeiro criar uma fonte lógica e, em seguida, selecionar essa fonte em seu contexto de dispositivo. Uma fonte lógica é uma descrição fornecida pelo aplicativo de uma fonte ideal. Um desenvolvedor pode criar uma fonte lógica chamando a CreateFont ou as funções de CreateFontInindirect. Nesse caso, o aplicativo chamaria CreateFontIndirect e forneceria um ponteiro para a estrutura de LOGFONT inicializada por CHOOSEFONT. Em geral, é mais eficiente chamar CreateFontIndirect porque CreateFont requer vários parâmetros, enquanto CreateFontIndirect requer apenas um ponteiro para LOGFONT.
Antes que um aplicativo possa realmente começar a desenhar texto com uma fonte lógica, ele deve encontrar a correspondência mais próxima entre as fontes armazenadas internamente no dispositivo e as fontes cujos recursos foram carregados no sistema operacional. As fontes armazenadas no dispositivo ou no sistema operacional são chamadas fontes físicas. O processo de encontrar a fonte física que mais se aproxima de uma fonte lógica especificada é chamado de mapeamento de fonte. Esse processo ocorre quando um aplicativo chama a funçãoSelectObject e fornece um identificador que identifica uma fonte lógica. O mapeamento de fontes é realizado usando um algoritmo interno que compara os atributos da fonte lógica solicitada com os atributos das fontes físicas disponíveis. Quando o algoritmo do mapeador de fontes conclui sua pesquisa e determina a correspondência mais próxima possível, a função SelectObject retorna e o aplicativo pode começar a desenhar texto com a nova fonte.
A funçãoSetMapperFlagsespecifica se o algoritmo do mapeador de fontes procura apenas fontes físicas com proporções que correspondem ao dispositivo físico. A proporção de um dispositivo é a proporção formada pela largura e pela altura de um pixel nesse dispositivo.
A fonte do sistema (também conhecida como shell ou fonte padrão) é a fonte usada para texto nas barras de título, menus e caixas de diálogo.
Considerações especiais sobre a seleção de fontes
Embora a maioria das operações de seleção de fontes envolva o usuário, há alguns casos em que isso não é verdade. Por exemplo, um desenvolvedor pode querer usar uma fonte exclusiva em um aplicativo para desenhar texto em uma janela de controle. Para selecionar uma fonte apropriada, o aplicativo deve ser capaz de determinar quais fontes estão disponíveis, criar uma fonte lógica que descreva uma dessas fontes disponíveis e, em seguida, selecionar essa fonte no contexto apropriado do dispositivo.
Um aplicativo pode enumerar as fontes disponíveis usando o EnumFonts ou EnumFontFamilies funções. EnumFontFamilies é recomendado porque enumera todos os estilos associados a um nome de família. Isso pode ser útil para fontes com muitos estilos ou incomuns e para fontes que atravessam fronteiras internacionais.
Depois que um aplicativo tiver enumerado as fontes disponíveis e localizado uma correspondência apropriada, ele deve usar os valores retornados pela função de enumeração de fonte para inicializar os membros de uma estruturaLOGFONT. Em seguida, ele pode chamar o função CreateFontIndirect, passando para ele um ponteiro para a estrutura inicializada LOGFONT. Se a funçãoCreateFontIndirect for bem-sucedida, o aplicativo poderá selecionar a fonte lógica chamando a função SelectObject. Ao inicializar os membros da estrutura LOGFONT, certifique-se de especificar um conjunto de caracteres específico no membro do lfCharSet. Esse membro é importante no processo de mapeamento de fontes e os resultados serão inconsistentes se esse membro não for inicializado corretamente. Se você especificar um nome de tipo de letra no lfFaceName membro da estrutura LOGFONT, certifique-se de que o valor lfCharSet corresponde ao conjunto de caracteres do tipo de letra especificado em lfFaceName. Por exemplo, se você quiser selecionar uma fonte como MS Mincho, lfCharSet deve ser definida como o valor predefinido SHIFTJIS_CHARSET.
As fontes para muitos idiomas do Leste Asiático têm dois nomes tipográficos: um nome em inglês e um nome localizado. CreateFont, CreateFontIndirecte CreateFontIndirectEx usam o nome do tipo de letra localizado para uma localidade do sistema que corresponde ao idioma, mas usam o nome do tipo de letra em inglês para todas as outras localidades do sistema. O melhor método é tentar um nome e, em caso de falha, tentar o outro. Observe que EnumFonts, EnumFontFamiliese EnumFontFamiliesEx retornam o nome do tipo de letra em inglês se a localidade do sistema não corresponder ao idioma da fonte. A partir do Windows 2000, isso não é mais um problema porque o mapeador de fontes para CreateFont, CreateFontIndirecte CreateFontIndirectEx reconhece qualquer nome de tipo de letra, independentemente da localidade.