亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? fontfamily.cpp

?? Windows 圖形編程 書籍
?? CPP
字號:
//-----------------------------------------------------------------------------------//
//              Windows Graphics Programming: Win32 GDI and DirectDraw               //
//                             ISBN  0-13-086985-6                                   //
//                                                                                   //
//  Written            by  Yuan, Feng                             www.fengyuan.com   //
//  Copyright (c) 2000 by  Hewlett-Packard Company                www.hp.com         //
//  Published          by  Prentice Hall PTR, Prentice-Hall, Inc. www.phptr.com      //
//                                                                                   //
//  FileName   : fontfamily.cpp					                                     //
//  Description: Font family enumeration                                             //
//  Version    : 1.00.000, May 31, 2000                                              //
//-----------------------------------------------------------------------------------//

#define STRICT
#define _WIN32_WINNT 0x0500
#define NOCRYPT

#include <windows.h>
#include <assert.h>
#include <tchar.h>
#include <math.h>

#include "..\..\include\win.h"
#include "..\..\include\Canvas.h"
#include "..\..\include\ListView.h"
#include "..\..\include\LogWindow.h"

#include "Resource.h"
#include "TrueType.h"
#include "FontFamily.h"

typedef struct
{
	unsigned	mask;
	unsigned	flag;
	const char *name;
}	WordDef;


const WordDef NTM_Flags[]	=
{
	{	0xFFFFFFFF, NTM_ITALIC,			"Italic"				},
	{	0xFFFFFFFF, NTM_BOLD,			"Bold"					},
	{	0xFFFFFFFF, NTM_REGULAR,		"Regular"				},
	{	0xFFFFFFFF, NTM_NONNEGATIVE_AC,	"Nonnegative AC"		},
	{	0xFFFFFFFF, NTM_PS_OPENTYPE,	"Postscript OpenType"	},
	{	0xFFFFFFFF, NTM_TT_OPENTYPE,	"TrueType OpenType"		},
	{	0xFFFFFFFF, NTM_MULTIPLEMASTER,	"Multiple Master"		},
	{	0xFFFFFFFF, NTM_TYPE1,			"Type 1 Font"			},
	{	0xFFFFFFFF, NTM_DSIG,			"Digital Signature"		},
	{	0xFFFFFFFF, 0,					NULL					}
};


const WordDef NTM_Family[] = 
{
	{	0x0F,	DEFAULT_PITCH,		"Default Pitch"		},
	{	0x0F,	FIXED_PITCH,		"Fixed Pitch"		},
	{	0x0F,	VARIABLE_PITCH,		"Variable Pitch"	},
	{	0x0F,	MONO_FONT,			"Mono Font"			},
	
	{	0xFF0,	FF_DONTCARE,		"Dont Care"			},	
	{	0xFF0,	FF_DECORATIVE,		"Decorative"		},
	{	0xFF0,	FF_MODERN,			"Modern"			},
	{	0xFF0,	FF_ROMAN,			"Roman"				},
	{	0xFF0,	FF_SCRIPT,			"Script"			},
	{	0xFF0,	FF_SWISS,			"Swiss"				},
	{	0xFF0,	0,					NULL				}
};


void DecodeFlag(unsigned flag, const WordDef * dic, TCHAR * result)
{
	result[0] = 0;

	for (; dic->name; dic ++)
		if ( (flag & dic->mask)==dic->flag )
		{
			if ( result[0] )
				_tcscat(result, _T(", "));
			_tcscat(result, dic->name);
		}
}


void ListFonts(KListView * pList)
{
	const TCHAR Key_Fonts[] = _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts");

	HKEY hKey;

	if ( RegOpenKeyEx(HKEY_LOCAL_MACHINE, Key_Fonts, 0, KEY_READ, & hKey)==ERROR_SUCCESS )
	{
		for (int i=0; ; i++)
		{
			TCHAR szValueName[MAX_PATH];
			BYTE  szValueData[MAX_PATH];

			DWORD nValueNameLen = MAX_PATH;
			DWORD nValueDataLen = MAX_PATH;
			DWORD dwType;

			if ( RegEnumValue(hKey, i, szValueName, & nValueNameLen, NULL,
					& dwType, szValueData, & nValueDataLen) != ERROR_SUCCESS )
				break;

			pList->AddItem(0, szValueName);
		    pList->AddItem(1, (const char *) szValueData);
		}
		RegCloseKey(hKey);
	}
}


int KEnumFontFamily::EnumProc(ENUMLOGFONTEX *lpelfe, NEWTEXTMETRICEX *lpntme, int FontType)
{
	if ( (FontType & m_nType)==0 )
		return TRUE;

	if ( m_nLogFont < MAX_LOGFONT )
		m_LogFont[m_nLogFont ++] = lpelfe->elfLogFont;

	m_pList->AddItem(0, (const char *) lpelfe->elfFullName);
    m_pList->AddItem(1, (const char *) lpelfe->elfScript);
	m_pList->AddItem(2, (const char *) lpelfe->elfStyle);
	m_pList->AddItem(3, (const char *) lpelfe->elfLogFont.lfFaceName);

	m_pList->AddItem(4, lpelfe->elfLogFont.lfHeight);
	m_pList->AddItem(5, lpelfe->elfLogFont.lfWidth);
	m_pList->AddItem(6, lpelfe->elfLogFont.lfWeight);

	TCHAR Result[MAX_PATH];

	DecodeFlag(lpntme->ntmTm.ntmFlags, NTM_Flags, Result);
	m_pList->AddItem(7, Result);

	DecodeFlag(lpelfe->elfLogFont.lfPitchAndFamily, NTM_Family, Result);
	m_pList->AddItem(8, Result);

	return TRUE;
}


void KEnumFontFamily::EnumFontFamilies(HDC hdc, KListView * pList, BYTE charset, 
									   TCHAR * FaceName, unsigned type)
{
	m_pList	   = pList;
	m_nLogFont = 0;
	m_nType    = type;

	LOGFONT lf;
	memset(& lf, 0, sizeof(lf));
	lf.lfCharSet		= charset;
	lf.lfFaceName[0]	= 0;

	if ( FaceName )
		_tcscpy(lf.lfFaceName, FaceName);

	lf.lfPitchAndFamily = 0;

    EnumFontFamiliesEx(hdc, & lf, (FONTENUMPROC) EnumFontFamExProc, (LPARAM) this, 0); 
}


void KListViewCanvas::DecodeFontFile(const TCHAR * fontfile)
{
	TCHAR fullname[MAX_PATH];

	if ( _tcschr(fontfile, ':') )
		_tcscpy(fullname, fontfile);
	else
	{
		GetWindowsDirectory(fullname, MAX_PATH);
		_tcscat(fullname, "\\Fonts\\");
		_tcscat(fullname, fontfile);
	}

	// ask frame window to create a new MDI child window to decode a font
	SendMessage(m_hFrame, WM_USER+1, 0, (LPARAM) fullname);
}


void UnicodeRange(LOGFONT * pLogFont, HINSTANCE hInstance)
{
	HFONT hFont  = CreateFontIndirect(pLogFont);
	HDC   hDC	 = GetDC(NULL);
	HGDIOBJ hOld = SelectObject(hDC, hFont);

	// query for size
	DWORD size = GetFontUnicodeRanges(hDC, NULL);

	GLYPHSET * pGlyphSet = (GLYPHSET *) new BYTE[size];

	// get real data
	pGlyphSet->cbThis = size;
	size = GetFontUnicodeRanges(hDC, pGlyphSet);

	KLogWindow * pLog = new KLogWindow;

	assert(pLog);

	pLog->Create(hInstance, "UNICODE Range");

	pLog->Log("%s \r\n", pLogFont->lfFaceName);

	pLog->Log("cbSize   %d\r\n",			pGlyphSet->cbThis);
	pLog->Log("flAccel  %d\r\n",			pGlyphSet->flAccel);
	pLog->Log("cGlyphsSupported %d\r\n",  pGlyphSet->cGlyphsSupported);
	pLog->Log("cRanges          %d\r\n",  pGlyphSet->cRanges);

	for (unsigned i=0; i<pGlyphSet->cRanges; i++)
		pLog->Log("%3d %04x..%04x (%d)\r\n", i, 
			pGlyphSet->ranges[i].wcLow, 
			pGlyphSet->ranges[i].wcLow + pGlyphSet->ranges[i].cGlyphs -1,
			pGlyphSet->ranges[i].cGlyphs);

	WORD gi[10];
	size = GetGlyphIndices(hDC, "A Quick Brown Fox", 10, gi, GGI_MARK_NONEXISTING_GLYPHS);

	delete [] (BYTE *) pGlyphSet;

	SelectObject(hDC, hOld);
	ReleaseDC(NULL, hDC);
	DeleteObject(hFont);
}


LRESULT KListViewCanvas::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch( uMsg )
	{
		case WM_CREATE:
			m_hWnd		= hWnd;
			m_hViewMenu = LoadMenu(m_hInst, MAKEINTRESOURCE(IDR_DIBVIEW));

			{
				RECT rect;

				GetClientRect(m_hWnd, & rect);
				m_Fonts.Create(hWnd, 101, 0, 0, rect.right, rect.bottom, m_hInst);
			}

//			m_Fonts.AddIcon(LVSIL_SMALL, m_hInst, IDI_EMPTY);
//          m_Fonts.AddIcon(LVSIL_SMALL, m_hInst, IDI_EQUAL);
//          m_Fonts.AddIcon(LVSIL_SMALL, m_hInst, IDI_CHANGE);

			if ( m_bFamily )
			{
				m_Fonts.AddColumn(0, 100, "Full Name");
				m_Fonts.AddColumn(1, 100, "Script");
				m_Fonts.AddColumn(2, 100, "Style");
	
			    m_Fonts.AddColumn(3, 80,  "Face Name");
		        m_Fonts.AddColumn(4, 60,  "Height");
				m_Fonts.AddColumn(5, 60,  "Width");
				m_Fonts.AddColumn(6, 60,  "Weight");
				m_Fonts.AddColumn(7, 130, "Flags");
				m_Fonts.AddColumn(8, 130, "Family");

				{
					HDC hdc = GetDC(NULL);
					enumfont.EnumFontFamilies(hdc, & m_Fonts, DEFAULT_CHARSET, NULL);
					ReleaseDC(NULL, hdc);
				}
			}
			else 
			{
				m_Fonts.AddColumn(0, 100, "Name");
				m_Fonts.AddColumn(1, 100, "File");

				ListFonts(& m_Fonts);
			}

			return 0;

		case WM_SIZE:
			MoveWindow(m_Fonts.GetHWND(), 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);	
			return 0;

		case WM_NOTIFY:
			if (wParam == 101)
			{
				NM_LISTVIEW * pInfo = (NM_LISTVIEW *) lParam;
				
				if ( (pInfo->hdr.code == NM_RCLICK) && (pInfo->iItem != -1) ) 
				{					
					POINT pt = pInfo->ptAction;
					
					ClientToScreen(m_hWnd, & pt);
					
					HMENU hMenu = LoadMenu(m_hInst, MAKEINTRESOURCE(IDR_POPUP));

					int id = TrackPopupMenu(GetSubMenu(hMenu, 0), TPM_RIGHTBUTTON | TPM_TOPALIGN | TPM_LEFTALIGN | TPM_RETURNCMD | TPM_NONOTIFY,
								 pt.x, pt.y, 0, m_hWnd, NULL);

					DestroyMenu(hMenu);

					if ( id==IDM_POP_DECODE )
					{
						if ( m_bFamily )
						{
							// ask frame window to create a new MDI child window to decode a font
							SendMessage(m_hFrame, WM_USER+2, 0, (LPARAM) & enumfont.m_LogFont[pInfo->iItem]);
						}
						else
						{
							TCHAR fontname[MAX_PATH];

							m_Fonts.GetItemText(pInfo->iItem, 1, fontname, MAX_PATH);

							DecodeFontFile(fontname);
						}

						return TRUE;
					}

					if ( id==IDM_POP_UNICODERANGE )
					{
						if ( m_bFamily )
							UnicodeRange(& enumfont.m_LogFont[pInfo->iItem], m_hInst);
					
						return TRUE;
					}
				}
			}

		default:
			return CommonMDIChildProc(hWnd, uMsg, wParam, lParam, m_hViewMenu, 3);
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久国产综合精品| 久久免费视频色| 91精品国产综合久久久久久漫画 | 日韩三级视频在线观看| 视频一区二区三区在线| 日韩三级中文字幕| 成人性视频免费网站| 亚洲欧美日韩中文字幕一区二区三区| 91久久精品一区二区三| 午夜精品123| 国产日韩欧美精品一区| 91久久精品一区二区三| 蜜桃一区二区三区在线观看| 日本一区二区视频在线| 欧美影视一区在线| 激情综合网天天干| 国产精品国产三级国产aⅴ原创 | 日本一区中文字幕| 欧美xxxx老人做受| 国产精品99久久不卡二区| 中文字幕亚洲在| 欧美一区日韩一区| va亚洲va日韩不卡在线观看| 午夜精品福利一区二区三区av| 久久综合中文字幕| 在线看不卡av| 国产一区二区三区综合| 亚洲激情一二三区| 久久久青草青青国产亚洲免观| 色国产综合视频| 激情小说欧美图片| 亚洲不卡一区二区三区| 久久久久久亚洲综合| 欧美日韩视频在线第一区| 福利一区二区在线| 视频一区中文字幕| 中文字幕一区二区三区四区不卡| 91精品免费观看| 极品瑜伽女神91| 精品一区二区av| 亚洲天堂成人在线观看| 欧美精品xxxxbbbb| 99re亚洲国产精品| 国产麻豆欧美日韩一区| 亚洲第一福利视频在线| 中文字幕在线观看一区| 欧美成人一区二区三区片免费| 欧美性猛交xxxxxx富婆| 成人国产在线观看| 国产在线精品免费| 日本91福利区| 五月激情六月综合| 一区二区三区中文在线| 亚洲欧洲日韩在线| 亚洲国产岛国毛片在线| 久久免费的精品国产v∧| 日韩欧美国产精品一区| 欧美日本一区二区| 欧美丝袜丝交足nylons图片| 97se亚洲国产综合自在线不卡| 国产成人久久精品77777最新版本| 日本亚洲免费观看| 欧美激情综合网| 亚洲精品成人在线| 国产亚洲1区2区3区| 精品国产免费久久| 日韩一区二区在线观看视频| 欧美日韩一级二级| 欧美美女一区二区在线观看| 在线观看91视频| 欧美色图天堂网| 欧洲一区二区三区免费视频| 91搞黄在线观看| 色综合中文综合网| 日本午夜一本久久久综合| 亚洲激情图片qvod| 亚洲线精品一区二区三区| 一区二区三区在线不卡| 一区二区三区在线视频免费| 国产精品的网站| 中文字幕亚洲在| 综合亚洲深深色噜噜狠狠网站| 国产精品不卡在线| 亚洲丝袜另类动漫二区| 自拍偷拍亚洲激情| 樱花影视一区二区| 亚洲综合色成人| 久久国产综合精品| 国产精品18久久久久久久网站| 国产麻豆91精品| 成人h动漫精品一区二| 色哟哟一区二区| 欧美日韩黄色影视| 精品国产污污免费网站入口| 国产天堂亚洲国产碰碰| 国产精品网站导航| 亚洲综合色区另类av| 秋霞午夜av一区二区三区| 国产毛片精品视频| 波多野结衣中文字幕一区| 在线观看国产91| 欧美剧情片在线观看| 精品国产乱码久久久久久影片| 国产精品麻豆视频| 天堂久久一区二区三区| 中文字幕一区二区三| 国产精品无码永久免费888| 亚洲美腿欧美偷拍| 欧美a级一区二区| 成人av在线播放网站| 欧美精品日韩精品| 国产精品日产欧美久久久久| 爽好多水快深点欧美视频| 国产精品一区二区在线观看网站 | 亚洲成av人片在www色猫咪| 精品一区二区在线播放| 色先锋aa成人| 久久久九九九九| 午夜久久久影院| 国产·精品毛片| 91精品国产入口| 亚洲精品日日夜夜| 国产一区二区网址| 欧美丝袜丝交足nylons图片| 亚洲国产高清aⅴ视频| 日本亚洲一区二区| 在线视频综合导航| 亚洲午夜羞羞片| 国产99久久久国产精品免费看 | 亚洲主播在线观看| 国产精品自拍网站| 91精品国产综合久久久久久久久久| 国产丝袜美腿一区二区三区| 日本不卡在线视频| 91久久免费观看| 一区在线观看免费| 国产成人激情av| 久久中文娱乐网| 蜜臀av一级做a爰片久久| 欧美亚洲综合另类| 亚洲欧美日韩国产成人精品影院 | 欧美国产激情一区二区三区蜜月| 日韩精品国产欧美| 欧美少妇一区二区| 亚洲精选视频免费看| 成人a免费在线看| 欧美国产激情二区三区| 国产一区二区美女诱惑| 日韩精品中文字幕在线一区| 日韩精品一二区| 欧美日韩另类一区| 亚洲尤物在线视频观看| 色一区在线观看| 伊人性伊人情综合网| 99国产欧美另类久久久精品| 国产精品久久久久久久久动漫| 国产麻豆一精品一av一免费 | 亚洲无线码一区二区三区| aaa欧美日韩| 亚洲欧洲av色图| 99riav久久精品riav| 日韩理论电影院| 久久色成人在线| 国产成人精品免费网站| 国产情人综合久久777777| 国产91精品免费| 国产精品无圣光一区二区| 波多野结衣的一区二区三区| 中文字幕亚洲区| 91免费视频大全| 亚洲综合久久久久| 欧美人体做爰大胆视频| 日韩主播视频在线| 欧美xxxxx牲另类人与| 国产精品一区二区在线播放| 欧美国产1区2区| 日本韩国欧美一区二区三区| 亚洲成人第一页| 精品欧美一区二区在线观看| 国产九九视频一区二区三区| 国产精品无人区| 欧美性大战久久久| 日本亚洲电影天堂| 国产日韩欧美电影| 一本色道久久加勒比精品| 视频一区视频二区在线观看| 日韩精品专区在线| av电影在线观看一区| 性感美女极品91精品| 欧美精品一区视频| av亚洲精华国产精华精| 亚洲国产wwwccc36天堂| 亚洲精品一线二线三线无人区| 成人黄色av电影| 香蕉久久夜色精品国产使用方法| 日韩欧美成人一区| 99久久精品免费看| 日韩成人dvd| 国产精品福利影院| 欧美精品aⅴ在线视频|