CreateFont
機能
指定の属性を持つ論理フォントを作成する
Declare Function CreateFont lib "gdi32.dll" Alias "CreateFontA" _
(ByVal nHeight As Long, ByVal nWidth As Long, ByVal nEscapement As Long, _
ByVal nOrientation As Long, ByVal fnWeight As Long, ByVal fdwItalic As Long, _
ByVal fwUnderline As Long, ByVal fdwStrinkeOut As Long, ByVal CharSet As Long, _
ByVal OutputPrecision As Long, ByVal ClipPrecision As Long, ByVal Quality As Long, _
ByVal fdwPitchAndFamily As Long, ByVal lpszFace As String) As Long
nHeight
フォントの高さ
nWidth
同、平均幅(通常0)
nEscaoement
相対的出力角度(単位:1/10度)
nOrientation
回転角度(単位:1/10度)
fnWeight
文字の線幅
fdwItalic
イタリック体のとき
fdwUnderline
アンダーライン付きのとき1
fdwStrikeOut
横線付きのとき1
fdwCharSet
文字セットの指定
fdwOutputPrecision
常にOUT_DEFAULT_PRECIS(=0)
fdwClipPrecision
同上
fdwQuality
xxx_QUALITY
fdw
PitchAndFamily xxx_PITCH
lpszFace
タイプフェース名
戻り値
正常終了のとき 論理フォントのハンドル
エラーのとき 0
備考
この関数はCreateFontIndirect()関数と同じである。
取得したハンドルは使用後、DeleteObject()関数を使って解放する。
fnWeightの定数
FW_DONTCARE = 0 デフォルト
FW_THIN = 100 (以下、数値が大きくなるほど太字になる)
FW_EXTRALIGHT = 200
FW_ULTRALIGHT = FW_EXTRALIGHT
FW_LIGHT = 300
FW_NORMAL = 400
FW_REGULAR = FW_NORMAL
FW_MEDIUM = 500
FW_SEMIBOLD = 600
FW_DEMIBOLD = FW_SEMIBOLD
FW_BOLD = 700
FW_EXTRABOLD = 800
FW_ULTRABOLD = FW_EXTRABOLD
FW_HEAVY = 900
FW_BLACK = FW_HEAVY
fdwCharSetの定数
ANSI_CHARSET = 0 Windowsの標準文字セット
DEFAULT_CHARSET = 1 デフォルトの文字セット
OEM_CHARSET = 255 OEM文字セット(システムに依存する)
SHIFTJIS_CHARSET = 128 シフトJIS文字セット
SYMBOL_CHARSET = 2 シンボル文字セット
BALTIC_CHARSET = 186
CHINESEBIG5_CHARSET = 136
EASTEUROPE_CHARSET = 238
GREEK_CHARSET = 161
HANGEUL_CHARSET = 129
MAC_CHARSET = 77
RUSSIAN_CHARSET = 204
TURKISH_CHARSET = 162
fdwQualityの定数
DEFAULT_QUALITY = 0 デフォルト(特に指定しない)
DRAFT_QUALITY = 1 PROOF_QUALITYほど品質を重視しない
PROOF_QUALITY = 2 論理フォントの属性に一致させることにより
フォントの品質を重視する
fdwPitchAndFamilyの定数
DEFAULT_PITCH = 0 デフォルトのピッチ
FIXED_PITCH = 1 固定ピッチ
VARIABLE_PITCH = 2 可変ピッチ
FF_DECORATIVE = 80 飾りフォント
FF_DONTCARE = 0 フォントファミリに分類する必要がないフォント
FF_MODERN = 48 固定幅ストローク、固定ピッチ、セリフあり・なし
FF_ROMAN = 16 可変幅ストローク、可変ピッチ、セリフあり・なし
FF_SCRIPT = 64 手書き風フォント
FF_SWISS = 32 可変幅ストローク、可変ピッチ、セリフなし
サンプル
ダウンロード(CreateFont.lzh)
Public Const IDM_BUTTON1 = &H100
Public Sub Main()
Dim wcl As WNDCLASSEX, msg As Message
Dim rc As Long
Dim hDlg As Long
With wcl
.cbSize = Len(wcl)
.lpszClassName = "test Class Name"
.lpfnWndProc = ChangeAddressOf(AddressOf WndProc)
.style = 0
.cbClsExtra = 0
.cbWndExtra = 0
.lpszMenuName = 0
.hbrBackground = GetStockObject(WHITE_BRUSH)
.hInstance = App.hInstance
.hIcon = LoadIcon(0, ByVal 32512)
.hCursor = LoadCursor(0, ByVal 32512)
End With
Call RegisterClassEx(wcl)
hDlg = CreateWindowEx(WS_EX_CLIENTEDGE, wcl.lpszClassName, "CreateFont()関数の実験", _
WS_CAPTION Or WS_VISIBLE Or WS_SYSMENU, _
CW_USEDEFAULT, CW_USEDEFAULT, 500, 300, 0, 0, App.hInstance, 0)
Call CreateWindowEx(0, "Button", "押す", WS_CHILD Or BS_PUSHLIKE Or WS_VISIBLE, _
400, 20, 50, 30, hDlg, IDM_BUTTON1, App.hInstance, 0)
Call ShowWindow(hDlg, SW_SHOW)
Do While (GetMessage(msg, 0, 0, 0))
Call TranslateMessage(msg)
Call DispatchMessage(msg)
Loop
End Sub
Public Function WndProc(ByVal hWnd As Long, ByVal msg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
Dim hdc As Long, n As Long
Dim temp As String, rc1 As Long, rc2 As Long, temp1 As String
Dim lpFontName(5) As String
Select Case msg
Case WM_COMMAND
Select Case LWORD(wParam)
Case IDM_BUTTON1
hdc = GetDC(hWnd)
Call SetTextColor(hdc, QBColor(0))
temp = "CreateFont()関数の実験"
rc2 = LenB(StrConv(temp, vbFromUnicode))
Call TextOut(hdc, 10, 10, temp, rc2)
temp = "日本語表示もできちゃう♪"
rc2 = LenB(StrConv(temp, vbFromUnicode))
lpFontName(1) = "system"
lpFontName(2) = "MS明朝"
lpFontName(3) = "MSゴシック"
lpFontName(4) = "MS P明朝"
lpFontName(5) = "MS Pゴシック"
y = 40
For a = 1 To 5
Call SetTextColor(hdc, QBColor(a))
temp1 = lpFontName(a)
rc1 = LenB(StrConv(temp1, vbFromUnicode))
Call SetFont(hWnd, hdc, 10, temp1)
Call TextOut(hdc, 10, y, temp1, rc1)
Call TextOut(hdc, 20, y + 20, temp, rc2)
y = y + 40
Next
Call ReleaseDC(hWnd, hdc)
End Select
Case WM_CLOSE
Call DestroyWindow(hWnd)
Call PostQuitMessage(0)
Case Else
WndProc = DefWindowProc(hWnd, msg, wParam, lParam)
End Select
End Function
Public Function ChangeAddressOf(ByVal Address As Long) As Long
ChangeAddressOf = Address
End Function
Public Function HWORD(ByVal LongValue As Long) As Integer
HWORD = (LongValue And &HFFFF0000) \ &H10000
End Function
Public Function LWORD(ByVal LongValue As Long) As Integer
If (LongValue And &HFFFF&) > &H7FFF Then
LWORD = (LongValue And &HFFFF&) - &H10000
Else
LWORD = LongValue And &HFFFF&
End If
End Function
Public Function GetLong(ByVal UpperWord As Integer, ByVal LowerWord As Integer) As Long
GetLong = (LowerWord And &HFFFF&) Or (UpperWord * &H10000)
End Function
Public Sub SetFont(ByVal hWnd As Long, ByVal hdc As Long, ByVal nPoint As Long, ByVal lpFontName As String)
Dim hFont As Long
Call SetMapMode(hdc, MM_TEXT)
hFont = CreateFont(-nPoint * 2, 0, 0, 0, _
FW_NOMAL, 0, 0, 0, DEFAULT_CHARSET, 0, 0, _
DEFAULT_QUALITY, DEFAULT_PITCH Or FF_SCRIPT, lpFontName)
Call SelectObject(hdc, hFont)
Call SendMessage(hWnd, WM_SETFONT, hFont, 1)
End Sub