LOGFONT構造体 <TOP>
LOGFONT構造体に値を入れ変化を確認します。
CreateFontIndirect 論理フォントを作成
SelectObject 指定されたデバイスコンテキストのオブジェクトを選択
CreateSolidBrush ソリッドカラーで論理ブラシを作成
BeginPath 指定されたデバイスコンテキストのパスを作成
TextOut 文字を描画
EndPath パスブラケットのクローズ
StrokeAndFillPath パスの輪郭を描画
FillPath パスを塗り潰す
DeleteObject システムリソースの解放
GetDC デバイスコンテキストのハンドルを取得
ReleaseDC デバイスコンテキストの解放
'================================================================ '= LOGFONT構造体 '= (Paths.bas) '================================================================ #include "Windows.bi" #define LF_FACESIZE 32 Type LOGFONT lfHeight As Long '文字セルまたは文字の高さ lfWidth As Long '平均文字幅 lfEscapement As Long '文字送りの方向とX軸との角度 lfOrientation As Long 'ベースラインとX軸との角度 lfWeight As Long 'フォントの太さ lfItalic As Byte 'イタリック体指定 lfUnderline As Byte '下線付き指定 lfStrikeOut As Byte '打ち消し線付き指定 lfCharSet As Byte 'キャラクタセット lfOutPrecision As Byte '出力精度 lfClipPrecision As Byte 'クリッピングの精度 lfQuality As Byte '出力品質 lfPitchAndFamily As Byte 'ピッチとファミリ lfFaceName(LF_FACESIZE) As Byte'フォント名 End Type ' 論理フォントを作成 Declare Function Api_CreateFontIndirect& Lib "gdi32" Alias "CreateFontIndirectA" (lpLogFont As LOGFONT) ' 指定されたデバイスコンテキストのオブジェクトを選択 Declare Function Api_SelectObject& Lib "gdi32" Alias "SelectObject" (ByVal hDC&, ByVal hObject&) ' ソリッドカラーで論理ブラシを作成 Declare Function Api_CreateSolidBrush& Lib "gdi32" Alias "CreateSolidBrush" (ByVal crColor&) ' 指定されたデバイスコンテキストのパスの作成 Declare Function Api_BeginPath& Lib "gdi32" Alias "BeginPath" (ByVal hDC&) ' 文字を描画 Declare Function Api_TextOut& Lib "gdi32" Alias "TextOutA" (ByVal hDC&, ByVal nXStart&, ByVal nYStart&, ByVal lpString$, ByVal cbString&) ' パスブラケットのクローズ Declare Function Api_EndPath& Lib "gdi32" Alias "EndPath" (ByVal hDC&) ' パスの輪郭を描画 Declare Function Api_StrokePath& Lib "gdi32" Alias "StrokePath" (ByVal hDC&) ' パスの描画と塗りつぶし Declare Function Api_StrokeAndFillPath& Lib "gdi32" Alias "StrokeAndFillPath" (ByVal hDC&) ' パスを塗りつぶす Declare Function Api_FillPath& Lib "gdi32" Alias "FillPath" (ByVal hDC&) ' ペン、ブラシ、フォント、ビットマップ、リージョン、パレットのいずれかの論理オブジェクトを削除し、そのオブジェクトに関連付けられていたすべてのシステムリソースを解放。オブジェクトを削除した後は、指定されたハンドルは無効になる Declare Function Api_DeleteObject& Lib "gdi32" Alias "DeleteObject" (ByVal hObject&) ' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得。その後、GDI 関数を使って、返されたデバイスコンテキスト内で描画を行える Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&) ' デバイスコンテキストを解放 Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&) #define FW_DONTCARE 0 'LOGFONT(lfWeight) #define FW_BOLD 700 'LOGFONT(lfWeight) Var Shared Picture1 As Object Var Shared Text(1)As Object Var Shared Edit(1) As Object Var Shared Check(3) As Object Var Shared Button1 As Object Picture1.Attach GetDlgItem("Picture1") For i = 0 To 3 If i < 2 Then Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i + 1))) : Text(i).SetFontSize 14 Edit(i).Attach GetDlgItem("Edit" & Trim$(Str$(i + 1))) : Edit(i).SetFontSize 14 End If Check(i).Attach GetDlgItem("Check" & Trim$(Str$(i + 1))) CHeck(i).SetFontSize 14 Next Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 '================================================================ '= '================================================================ Declare Sub MainForm_Start edecl () Sub MainForm_Start() ShowWindow -1 Edit(0).SetWindowText "50" Edit(1).SetWindowText "0" End Sub '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var LF As LOGFONT Var rFont As Long Var hBrush As Long Var oldBrush As Long Var crColor As Long Var hDC As Long Var sText As String Var size As Integer Var angle As Integer Var Ret As Long hDC = Api_GetDC(Picture1.GethWnd) Picture1.Cls sText = "北海道札幌市" size = Val(EDit(0).GetWindowText) angle = Val(EDit(1).GetWindowText) crColor = rgb(255, 255, 0) LF.lfCharSet = 128 '日本語(SHIFTJIS_CHARSET) LF.lfEscapement = angle * 10 '角度設定 LF.lfHeight = size '文字高さ設定 If Check(0).GetCHeck = 1 Then LF.lfWeight = FW_BOLD Else LF.lfWeight = FW_DONTCARE LF.lfItalic = Check(1).GetCheck 'イタリック LF.lfUnderline = Check(2).GetCheck '下線 LF.lfStrikeOut = Check(3).GetCheck '打ち消し線 rFont = Api_CreateFontIndirect(LF) '論理フォントの作成 Ret = Api_SelectObject(hDC, rFont) '指定されたデバイスコンテキストのオブジェクトを選択 Ret = Api_TextOut(hDC, 0, 0, sText, Len(sText)) 'フォームの指定位置に指定角度・大きさで文字列を描画 hBrush = Api_CreateSolidBrush(crColor) '塗り潰し色 oldBrush = Api_SelectObject(hDC, hBrush) '現在の塗り潰し色を設定 Ret = Api_BeginPath(hDC) Ret = Api_TextOut(hDC, 0, 0, sText, Len(sText)) Ret = Api_EndPath(hDC) Ret = Api_StrokePath(hDC) 'パスの輪郭を描画 Ret = Api_BeginPath(hDC) Ret = Api_TextOut(hDC, 0, LF.lfHeight + 1, sText, Len(sText)) Ret = Api_EndPath(hDC) Ret = Api_FillPath(hDC) 'パスを塗りつぶす Ret = Api_BeginPath(hDC) Ret = Api_TextOut(hDC, 0, LF.lfHeight * 2 + 1, sText, Len(sText)) Ret = Api_EndPath(hDC) Ret = Api_StrokeAndFillPath(hDC) 'パスの描画と塗りつぶし Ret = Api_SelectObject(hDC, oldBrush) 'ブラシを元に戻す Ret = Api_DeleteObject(hBrush) Ret = Api_ReleaseDC(Picture1.GethWnd, hDC) End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End