領域内の塗り潰し(U) <TOP>
RoundRectで指定した領域内を塗り潰します。
CreateSolidBrush 純色(ソリッドカラー)で論理ブラシを作成
DeleteObject グラフィックスオブジェクトを削除
ExtFloodFill 選択されているブラシで一定の範囲内を塗りつぶす
SelectObject デバイスコンテキストにオブジェクトを選択
RoundRect 角の丸い矩形を描画
GetSystemMetrics 表示要素の寸法とシステム構成の設定を取得
フォームにはサイズグリップを表示させています。
フォームをリサイズした場合、同じ比率で枠を作成しランダムな色で塗り潰します。
塗り潰し領域をフォームの中央にくるよう、メニュー・フレーム・ボーダー等の幅を取得計算しています。
'================================================================ '= 領域内の塗り潰し(U)
'= (CreateSolidBrush.bas) '================================================================ #include "Windows.bi" ' 純色(ソリッドカラー)で論理ブラシを作成 Declare Function Api_CreateSolidBrush& Lib "gdi32" Alias "CreateSolidBrush" (ByVal crColor&) ' グラフィックスオブジェクトを削除 Declare Function Api_DeleteObject& Lib "gdi32" Alias "DeleteObject" (ByVal hObject&) ' 選択されているブラシで一定の範囲内を塗りつぶす Declare Function Api_ExtFloodFill& Lib "gdi32" Alias "ExtFloodFill" (ByVal hDC&, ByVal nXStart&, ByVal nYStart&, ByVal crColor&, ByVal fuFillType&) ' デバイスコンテキストにオブジェクトを選択 Declare Function Api_SelectObject& Lib "gdi32" Alias "SelectObject" (ByVal hDC&, ByVal hObject&) ' 角の丸い矩形を描画 Declare Function Api_RoundRect& Lib "gdi32" Alias "RoundRect" (ByVal hDC&, ByVal nLeftRect&, ByVal nTopRect&, ByVal nRightRect&, ByVal nBottomRect&, ByVal nWidth&, ByVal nHeight&) ' 表示要素の寸法とシステム構成の設定を取得 Declare Function Api_GetSystemMetrics& Lib "user32" Alias "GetSystemMetrics" (ByVal nIndex&) ' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得 Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&) ' デバイスコンテキストを解放 Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&) #define FLOODFILLBORDER 0 #define FLOODFILLSURFACE 1 #define SM_CXFRAME 32 'サイズ可変ウィンドウの境界線の、X方向の幅 #define SM_CYFRAME 33 ' 〃Y方向の幅 #define SM_CYSIZE 31 'タイトルバー内のビットマップの高さ #define SM_CYBORDER 6 'サイズ固定ウィンドウの境界線のY方向の幅 Var Shared Text1 As Object Var Shared zX As Integer Var Shared zY As Integer '================================================================ '= '================================================================ Declare Sub MainForm_Start edecl () Sub MainForm_Start() Var fs As Integer fs = 14 Text1.Attach GetDlgItem("Text1") Text1.SetFontSize fs Text1.SetWindowSize fs, fs Text1.SetFontName "Marlett" Text1.SetWindowText "o" ShowWindow -1 zX = Api_GetSystemMetrics(SM_CXFRAME) * 2 zY = Api_GetSystemMetrics(SM_CYFRAME) * 2 + Api_GetSystemMetrics(SM_CYBORDER) + Api_GetSystemMetrics(SM_CYSIZE) End Sub '================================================================ '= '================================================================ Declare Sub MainForm_Resize edecl () Sub MainForm_Resize() Var hBrush As Long Var hOldBrush As Long Var RndCol As Long Var hDC As Long Var Ret As Long on error goto *Er_Trap '/ サイズグリップ表示 Text1.MoveWindow (Getwidth - Text1.GetWidth) - zX, GetHeight - Text1.GetHeight - zY cls hDC = Api_GetDC(GethWnd) ' Left Top Right Bottom Corner Ret = Api_RoundRect(hDC, (GetWidth - zX) / 5, (GetHeight - zY) / 5, (GetWidth - zX) / 5 * 4, (GetHeight - zY) / 5 * 4, 20, 20) '/ ランダムなブラシ作成 Randomize time RndCol = rgb(int(rnd(1) * 255 + 1), int(rnd(1) * 255 + 1), int(rnd(1) * 255 + 1)) hBrush = Api_CreateSolidBrush(RndCol) hOldBrush = Api_SelectObject(hDC, hBrush) '/ RoundRect内を塗り潰し Ret = Api_ExtFloodFill(hDC, (GetWidth - zX) / 2, (GetHeight - zY) / 2, rgb(0, 0, 0), FLOODFILLBORDER) Ret = Api_SelectObject(hDC, hOldBrush) Ret = Api_DeleteObject(hBrush) Ret = Api_ReleaseDC(GethWnd, hDC) Exit Sub *Er_Trap resume Next End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End