フォントの情報

  フォントオブジェクトの作成



任意のコントロールに対するフォントの設定するには、まずフォントオブジェクトを作成する必要があり、フォントオブジェクトを作成するには、以下の2つのうちのいずれかの API 関数を実行します

1) CreateFont
2) CreateFontIndirect

CreateFont 関数は、必要な情報を1つ1つ引数で設定する必要がある為、複雑なフォント情報について熟知している必要があります。それに反して、CreateFontIndirect では、LOGFONT 構造体を引き渡すだけで作成できます。この LOGFONT 構造体の中身を設定するのに、ChooseFont という 「フォント設定ダイアログ」を呼び出す為の API を実行します。必要なフォント情報は、この API であらかじめ取得しておいて LOGFONT 構造体に初期値として収めておけば、比較的簡単にフォントを作成する事ができます



  目的とするフォント情報の取得



  
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <commdlg.h.>

int main(int argc, char* argv[])
{
	CHOOSEFONT cf;
	LOGFONT lf;

	ZeroMemory( &cf, sizeof( cf ) );
	cf.lStructSize = sizeof(CHOOSEFONT);
	cf.hwndOwner = NULL;
	cf.lpLogFont = &lf;
	// システムがサポートするスクリーンフォントが対象
	cf.Flags = CF_SCREENFONTS;
	
	ChooseFont( &cf );

	printf( "フォントの高さ : %d\n", lf.lfHeight );
	printf( "フォントの文字の平均幅 : %d\n", lf.lfWidth );
	printf( "各テキスト行の角度 : %d\n", lf.lfEscapement );
	printf( "ベースラインの角度 : %d\n", lf.lfOrientation );
	printf( "フォントの太さ : %d\n", lf.lfWeight );
	printf( "斜体フォント : %d\n", lf.lfItalic );
	printf( "下線付きフォント : %d\n", lf.lfUnderline );
	printf( "打ち消し線付きフォント : %d\n", lf.lfStrikeOut );
	printf( "文字セット : %d\n", lf.lfCharSet );
	printf( "フォントの出力精度 : %d\n", lf.lfOutPrecision );
	printf( "クリッピング精度 : %d\n", lf.lfClipPrecision );
	printf( "フォントの出力品質 : %d\n", lf.lfQuality );
	printf( "フォントのピッチとファミリ : %d\n", lf.lfPitchAndFamily );
	printf( "フォントの書体名 : %s\n", lf.lfFaceName );
	
	return 0;
}

  

(例) MS ゴシック の サイズ 12 を選択した場合
  
フォントの高さ : -16
フォントの文字の平均幅 : 0
各テキスト行の角度 : 0
ベースラインの角度 : 0
フォントの太さ : 400
斜体フォント : 0
下線付きフォント : 0
打ち消し線付きフォント : 0
文字セット : 128
フォントの出力精度 : 3
クリッピング精度 : 2
フォントの出力品質 : 1
フォントのピッチとファミリ : 49
フォントの書体名 : MS ゴシック
  

(例) MS ゴシック の サイズ 10 を選択した場合
  
フォントの高さ : -13
フォントの文字の平均幅 : 0
各テキスト行の角度 : 0
ベースラインの角度 : 0
フォントの太さ : 400
斜体フォント : 0
下線付きフォント : 0
打ち消し線付きフォント : 0
文字セット : 128
フォントの出力精度 : 3
クリッピング精度 : 2
フォントの出力品質 : 1
フォントのピッチとファミリ : 49
フォントの書体名 : MS ゴシック
  



  フォントデータの初期化テキストを作成

  
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <commdlg.h.>

int main(int argc, char* argv[])
{
	CHOOSEFONT cf;
	LOGFONT lf;

	ZeroMemory( &cf, sizeof( cf ) );
	cf.lStructSize = sizeof(CHOOSEFONT);
	cf.hwndOwner = NULL;
	cf.lpLogFont = &lf;
	// システムがサポートするスクリーンフォントが対象
	cf.Flags = CF_SCREENFONTS;
	
	ChooseFont( &cf );
	
	printf( "%s\n", "LOGFONT lfbase = {" );
	printf( "%d // フォントの高さ\n", lf.lfHeight );
	printf( ",%d // フォントの文字の平均幅\n", lf.lfWidth );
	printf( ",%d // 各テキスト行の角度\n", lf.lfEscapement );
	printf( ",%d // ベースラインの角度\n", lf.lfOrientation );
	printf( ",%d // フォントの太さ\n", lf.lfWeight );
	printf( ",(BYTE)%d // 斜体フォント\n", lf.lfItalic );
	printf( ",(BYTE)%d // 下線付きフォント\n", lf.lfUnderline );
	printf( ",(BYTE)%d // 打ち消し線付きフォント\n", lf.lfStrikeOut );
	printf( ",(BYTE)%d // 文字セット\n", lf.lfCharSet );
	printf( ",(BYTE)%d // フォントの出力精度\n", lf.lfOutPrecision );
	printf( ",(BYTE)%d // クリッピング精度\n", lf.lfClipPrecision );
	printf( ",(BYTE)%d // フォントの出力品質\n", lf.lfQuality );
	printf( ",(BYTE)%d // フォントのピッチとファミリ\n", lf.lfPitchAndFamily );
	printf( ",\"%s\" // フォントの書体名\n", lf.lfFaceName );
	printf( "%s\n", "};" );

	return 0;
}
  

以下は、実行結果をコピーしたものです

  
LOGFONT lfbase = {
-16 // フォントの高さ
,0 // フォントの文字の平均幅
,0 // 各テキスト行の角度
,0 // ベースラインの角度
,400 // フォントの太さ
,(BYTE)0 // 斜体フォント
,(BYTE)0 // 下線付きフォント
,(BYTE)0 // 打ち消し線付きフォント
,(BYTE)128 // 文字セット
,(BYTE)3 // フォントの出力精度
,(BYTE)2 // クリッピング精度
,(BYTE)1 // フォントの出力品質
,(BYTE)49 // フォントのピッチとファミリ
,"MS ゴシック" // フォントの書体名
};
  



  リストボックスのフォント設定

  
// バージョン情報ボックス用メッセージ ハンドラ
HFONT hFont;
LOGFONT lfbase = {
-16 // フォントの高さ
,0 // フォントの文字の平均幅
,0 // 各テキスト行の角度
,0 // ベースラインの角度
,400 // フォントの太さ
,(BYTE)0 // 斜体フォント
,(BYTE)0 // 下線付きフォント
,(BYTE)0 // 打ち消し線付きフォント
,(BYTE)128 // 文字セット
,(BYTE)3 // フォントの出力精度
,(BYTE)2 // クリッピング精度
,(BYTE)1 // フォントの出力品質
,(BYTE)49 // フォントのピッチとファミリ
,"MS ゴシック" // フォントの書体名
};
LRESULT CALLBACK About( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
{
	switch( message ) {
		case WM_INITDIALOG:
			hFont = CreateFontIndirect( &lfbase );
			SendMessage( 
				GetDlgItem( hDlg, IDC_LIST1 ),
				WM_SETFONT,
				(WPARAM)hFont,
				MAKELPARAM(true, 0)
			);

			return TRUE;

		case WM_COMMAND:
			if( LOWORD(wParam) == IDOK || 
				LOWORD(wParam) == IDCANCEL ) {
				DeleteObject( hFont );
				EndDialog(hDlg, LOWORD(wParam));
				return TRUE;
			}
			if( LOWORD(wParam) == IDC_BUTTON1 ) {
				char szBuffer[128];

				GetDlgItemText( hDlg, IDC_EDIT1, szBuffer, 128 );
				SendMessage(
					GetDlgItem( hDlg, IDC_LIST1),
					LB_ADDSTRING,
					0L,
					(LPARAM)(LPCTSTR)szBuffer
				);
			}
			break;
	}
	return FALSE;
}
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ