文字列を描画(U) <TOP>
CreateFontIndirect
論理フォントを作成
SetGraphicsMode
指定されたデバイスコンテキストのグラフィックスモードを設定
SelectObject
指定されたデバイスコンテキストのオブジェクトを選択
DeleteObject
論理オブジェクトを削除し、そのオブジェクトに関連付けられていたすべてのシステムリソースを解放
GetDC
指定されたウィンドウのデバイスコンテキストのハンドルを取得
ReleaseDC
デバイスコンテキストを解放
CreateSolidBrush
純色で論理ブラシを作成
SetBkMode
バックグラウンドの塗りつぶしモード設定
SetBkColor
デバイスコンテキストの背景色を設定
TextOut 文字を描画
例では、EditBoxにフォント名を入れラジオボタンで文字修飾を選択します。CheckBoxにチェックを入れると30°傾斜させています。
'================================================================ '= 文字列を描画(U) '= (CreateFontIndirect.bas) '================================================================ #include "Windows.bi" #define LF_FACESIZE 32 #define GM_ADVANCED &H2 'WinNT・2K・XPグラフィックモード #define OPAQUE 2 '背景色を設定する 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 As String * 32'(LF_FACESIZE) As Byte'フォント名 End Type ' 論理フォントを作成 Declare Function Api_CreateFontIndirect& Lib "gdi32" Alias "CreateFontIndirectA" (lpLogFont As LOGFONT) ' 指定されたデバイスコンテキストのグラフィックスモードを設定 Declare Function Api_SetGraphicsMode& Lib "gdi32" Alias "SetGraphicsMode" (ByVal hDC&, ByVal iMode&) ' 指定されたデバイスコンテキストのオブジェクトを選択 Declare Function Api_SelectObject& Lib "gdi32" Alias "SelectObject" (ByVal hDC&, ByVal hObject&) ' 論理オブジェクトを削除し、そのオブジェクトに関連付けられていたすべてのシステムリソースを解放 Declare Function Api_DeleteObject& Lib "gdi32" Alias "DeleteObject" (ByVal hObject&) ' 指定されたウィンドウのデバイスコンテキストのハンドルを取得 Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&) ' デバイスコンテキストを解放 Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&) ' 純色で論理ブラシを作成 Declare Function Api_CreateSolidBrush& Lib "gdi32" Alias "CreateSolidBrush" (ByVal crColor&) ' バックグラウンドの塗りつぶしモード設定 Declare Function Api_SetBkMode& Lib "gdi32" Alias "SetBkMode" (ByVal hDC&, ByVal iBkMode&) ' デバイスコンテキストの背景色を設定 Declare Function Api_SetBkColor& Lib "gdi32" Alias "SetBkColor" (ByVal hDC&, ByVal crColor&) ' 文字を描画 Declare Function Api_TextOut& Lib "gdi32" Alias "TextOutA" (ByVal hDC&, ByVal nXStart&, ByVal nYStart&, ByVal lpString$, ByVal cbString&) Var Shared Button1 As Object Var Shared Radio(3) As Object Var Shared Check1 As Object Var Shared Edit1 As Object Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 Check1.Attach GetDlgItem("Check1") : Check1.SetFontSize 14 Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14 For i = 0 To 3 Radio(i).Attach GetDlgItem("Radio" & Trim$(Str$(i + 1))) Radio(i).SetFontSize 14 Next '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var lf As LOGFONT Var rFont As Long Var hDC As Long Var OldGM As Long Var rgbColor As Long Var txt As String Var Ret As Long txt = "札幌" 'Formの色 rgbColor = RGB(192, 192, 192) '30度傾斜をつける If Check1.GetCheck Then lf.lfOrientation = 300 lf.lfHeight = 60 lf.lfItalic = Radio(1).GetCheck lf.lfUnderline = Radio(2).GetCheck lf.lfStrikeOut = Radio(3).GetCheck 'Shift JIS に設定(設定しない場合全角が文字化けする) lf.lfCharSet = 128 'フォント名の最後尾にChr$(0)は必須 lf.lfFaceName = Edit1.GetWindowText & Chr$(0) 'Edit1の背景色のモードを設定 Ret = Api_SetBkMode(hDC, OPAQUE) 'DC取得 hDC = Api_GetDC(GethWnd) '描画色を設定 colBrush = Api_CreateSolidBrush(rgbColor) 'グラフィックモードを設定 OldGM = Api_SetGraphicsMode(hDC, GM_ADVANCED) '背景色を設定 Ret = Api_SetBkColor(hDC, rgbColor) Cls '論理フォントを作成 rFont = Api_CreateFontIndirect(lf) 'オブジェクトを選択 Ret = Api_SelectObject(hDC, rFont) '文字を描画 Ret = Api_TextOut(hDC, 0, 60, txt, Len(txt)) 'グラフィックモードを元に戻す Ret = Api_SetGraphicsMode(hDC, OldGM) Ret = Api_ReleaseDC(GethWnd, hDC) Ret = Api_DeleteObject(rFont) End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End