選択されたデバイスコンテキストのパスをリージョンに変換          <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