Criação e seleção de fonte
A caixa de diálogo Fonte comum simplifica o processo de criação e seleção de fontes. Ao inicializar a estrutura CHOOSEFONT e chamar a função CHOOSEFONT , um aplicativo pode dar suporte à mesma interface de seleção de fonte que anteriormente exigia muitas linhas de código personalizado. (Para obter mais informações sobre a caixa de diálogo Fonte comum, consulte Common Dialog Box Library.)
Seleção pelo Usuário
A maioria das operações de criação e seleção de fonte envolve o usuário. Por exemplo, os aplicativos de processamento de palavras 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 Fonte e pressiona o botão OK , a função CHOOSEFONT inicializa os membros de uma estrutura LOGFONT com 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 as funções CreateFont ou CreateFontIndirect . Nesse caso, o aplicativo chamaria CreateFontIndirect e forneceria um ponteiro para a estrutura 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 das 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 de fontes físicas. O processo de localizar a fonte física que mais corresponde a uma fonte lógica especificada é chamado de mapeamento de fonte. Esse processo ocorre quando um aplicativo chama a função SelectObject e fornece um identificador que identifica uma fonte lógica. O mapeamento de fonte é executado usando um algoritmo interno que compara os atributos da fonte lógica solicitada com os atributos de fontes físicas disponíveis. Quando o algoritmo mapeador de fonte 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ção SetMapperFlags especifica se o algoritmo mapeador de fonte pesquisa apenas fontes físicas com proporções que correspondem ao dispositivo físico. A taxa de proporção de um dispositivo é a proporção formada pela largura e a 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 de seleção de fonte especial
Embora a maioria das operações de seleção de fonte envolva o usuário, há algumas instâncias 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 de dispositivo apropriado.
Um aplicativo pode enumerar as fontes disponíveis usando as funções EnumFonts ou EnumFontFamilies . É recomendável enumFontFamilies porque enumera todos os estilos associados a um nome de família. Isso pode ser útil para fontes com muitos estilos ou estilos incomuns e para fontes que cruzam fronteiras internacionais.
Depois que um aplicativo enumerar as fontes disponíveis e localizar uma correspondência apropriada, ele deverá usar os valores retornados pela função de enumeração de fonte para inicializar os membros de uma estrutura LOGFONT . Em seguida, ele pode chamar a função CreateFontIndirect , passando para ela um ponteiro para a estrutura LOGFONT inicializada. Se a função CreateFontIndirect for bem-sucedida, o aplicativo poderá selecionar a fonte lógica chamando a função SelectObject . Ao inicializar os membros da estrutura LOGFONT , especifique um conjunto de caracteres específico no membro lfCharSet . Esse membro é importante no processo de mapeamento de fonte e os resultados serão inconsistentes se esse membro não for inicializado corretamente. Se você especificar um nome de face de tipo no membro lfFaceName da estrutura LOGFONT , verifique se o valor lfCharSet corresponde ao conjunto de caracteres da face de tipo especificada em lfFaceName. Por exemplo, se você quiser selecionar uma fonte como MS Mincho, lfCharSet deverá ser definido como o valor predefinido SHIFTJIS_CHARSET.
As fontes para muitos idiomas do Leste Asiático têm dois nomes de face de tipo: um nome em inglês e um nome localizado. CreateFont, CreateFontIndirect e CreateFontIndirectEx assumem o nome da face de tipo localizada para uma localidade do sistema que corresponde ao idioma, mas tomam o nome da face de tipo 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, EnumFontFamilies e EnumFontFamiliesEx retornarão o nome da face de tipo 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, CreateFontIndirect e CreateFontIndirectEx reconhece qualquer nome de face de tipo, independentemente da localidade.