C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 139 - Перебор шрифтов / Win 32 API / Win32 API

Шаг 139 - Перебор шрифтов

У нас есть возможность самостоятельно перебрать шрифты, которые установлены в системе. Для этого существует функция EnumFontFamiliesEx(). Но у этой функции есть некоторый нюанс. Для ее использования необходим HDC устройства. Достаточно передать HDC окна, чтобы получить список шрифтов. Хотя HDC можно получить и принтера например. Давайте пока попробуем получить просто список шрифтов на основе HDC окна. Вот эта функция:

int EnumFontFamiliesEx
(  
	HDC hdc,				//  указатель на DC
	LPLOGFONT lpLogfont,		// информация о шрифте
	FONTENUMPROC lpEnumFontFamExProc,	// функция обратного вызова
	LPARAM lParam,			// дополнительные данные
	DWORD dwFlags			// не используеться.
);

Функцию обратного вызова нужно правильно оформить. Вот ее прототип:

int CALLBACK EnumFontFamExProc
(
	ENUMLOGFONTEX *lpelfe,	// логические данные шрифта
	NEWTEXTMETRICEX *lpntme,	// физические данные шрифта
	DWORD FontType,		// тип шрифта
	LPARAM lParam		// данные приложения
);

Ну и теперь полный пример:

#include "stdafx.h"
#include "afxwin.h"
#include "afxdlgs.h"
#include "iostream.h"

int CALLBACK EnumFontFamExProc(
	ENUMLOGFONTEX *lpelfe,
	NEWTEXTMETRICEX *lpntme,
	DWORD FontType,
	LPARAM lParam
);

void main()
{
	HWND hwnd=GetDesktopWindow();	// получить окно
	HDC hdc=GetDC(hwnd);		// связанный DC
	LOGFONT  lf;
	lf.lfFaceName[0] = '\0';
	lf.lfCharSet = DEFAULT_CHARSET;	// все шрифты
	EnumFontFamiliesEx(hdc,&lf,(FONTENUMPROC)EnumFontFamExProc,
		(LPARAM) 0,(DWORD) 0);
	ReleaseDC(hwnd,hdc);
}

int CALLBACK EnumFontFamExProc(ENUMLOGFONTEX *lpelfe,
	NEWTEXTMETRICEX *lpntme,DWORD FontType,LPARAM lParam)
{
	cout <<  lpelfe->elfLogFont.lfFaceName << endl;
	return true;
}

Мы не стали специализировать какие нужны шрифты а просто запросили все.


| |
Автор Каев Артем.
[AD]