選択されたデバイスコンテキストのパスをリージョンに変換 <TOP>
CreateFontIndirect 論理フォントを作成
SelectObject 指定されたデバイスコンテキストのオブジェクトを選択
BeginPath hDCで指定されたデバイスコンテキストのパスを作成
EndPath BeginPathで開始したパスの作成を終了
PathToRegion hDCで指定したデバイスコンテキストで選択されているパスをリージョンに変換
TextOut 文字列を描画
SetWindowRgn 指定の領域をウィンドウ領域として設定
CreateSolidBrush ソリッドカラーで論理ブラシを作成
DeleteObject オブジェクトを削除
ReleaseCapture マウスキャプチャを解放
SendMessage ウィンドウにメッセージを送信
GetDC デバイスコンテキストのハンドルを取得
ReleaseDC デバイスコンテキストを解放
'================================================================ '= 選択されたDCパスをリージョンに変換 '= (PathToRegion.bas) '================================================================ #include "Windows.bi" #define LF_FACESIZE 32 Type LOGFONT lfHeight As Long lfWidth As Long lfEscapement As Long lfOrientation As Long 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&) ' hDCで指定されたデバイスコンテキストのパスの作成 Declare Function Api_BeginPath& Lib "gdi32" Alias "BeginPath" (ByVal hDC&) ' BeginPathで開始したパスの作成を終了 Declare Function Api_EndPath& Lib "gdi32" Alias "EndPath" (ByVal hDC&) ' hDCで指定したデバイスコンテキストで選択されているパスをリージョンに変換する Declare Function Api_PathToRegion& Lib "gdi32" Alias "PathToRegion" (ByVal hDC&) ' 文字を描画 Declare Function Api_TextOut& Lib "gdi32" Alias "TextOutA" (ByVal hDC&, ByVal nXStart&, ByVal nYStart&, ByVal lpString$, ByVal cbString&) ' 指定の領域をウィンドウ領域として設定 Declare Function Api_SetWindowRgn& Lib "user32" Alias "SetWindowRgn" (ByVal hWnd&, ByVal hRgn&, ByVal bRedraw&) ' ソリッドカラーで論理ブラシを作成 Declare Function Api_CreateSolidBrush& Lib "gdi32" Alias "CreateSolidBrush" (ByVal crColor&) ' ペン・ブラシ・フォント・ビットマップ・リージョン・パレットのいずれかの論理オブジェクトを削除し、関連付けられていた全てのシステムリソースを解放 Declare Function Api_DeleteObject& Lib "gdi32" Alias "DeleteObject" (ByVal hObject&) ' マウスのキャプチャを解放 Declare Function Api_ReleaseCapture& Lib "user32" Alias "ReleaseCapture" () ' ウィンドウにメッセージを送信。この関数は、指定したウィンドウのウィンドウプロシージャが処理を終了するまで制御を返さない Declare Function Api_SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, lParam As Any) ' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得 Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&) ' デバイスコンテキストを解放 Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&) #define HTCAPTION 2 'タイトルバーをクリックしたことを示す #define WM_NCLBUTTONDOWN &HA1 '非クライアント領域で左マウスボタンを押す Var Shared Button1 As Object Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var lf As LOGFONT Var rFont As Long Var hDC As Long Var hRgn As Long Var txt As String Var Ret As Long txt = "札幌市白石区" hDC = Api_GetDC(GethWnd) 'デバイスコンテキスト取得 lf.lfCharSet = 128 '日本語(SHIFTJIS_CHARSET) lf.lfEscapement = 0 '角度設定 lf.lfHeight = 50 '文字高さ設定(Point) lf.lfItalic = 1 'イタリック(0/1) rFont = Api_CreateFontIndirect(lf) '論理フォントの作成 Ret = Api_SelectObject(hDC, rFont) '指定されたデバイスコンテキストのオブジェクトを選択 Ret = Api_BeginPath(hDC) 'hDCで指定されたデバイスコンテキストのパスの作成 Ret = Api_TextOut(hDC, 0, 0, txt, Len(txt)) 'フォームの指定位置文字列を描画 Ret = Api_EndPath(hDC) 'BeginPathで開始したパスの作成を終了 hRgn = Api_PathToRegion(hDC) 'hDCで指定したパスをリージョンに変換 Ret = Api_SetWindowRgn(GethWnd, hRgn, True) '指定の領域をウィンドウ領域として設定 Ret = Api_DeleteObject(hRgn) '論理オブジェクトの削除、システムリソースの解放 Ret = Api_ReleaseDC(GethWnd, hDC) 'デバイスコンテキストの解放 End Sub '================================================================ '= '================================================================ Declare Sub MainForm_MouseDown edecl (Button%, Shift%, x!,y!) Sub MainForm_MouseDown(Button%, Shift%, x!,y!) Var Ret As Long Ret = Api_ReleaseCapture() Ret = Api_SendMessage(GethWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0) End Sub '================================================================ '= '================================================================ Declare Sub MainForm_DblClick edecl () Sub MainForm_DblClick() End End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End