9.円形・多角形のフォーム及びコントロールを作成する |
1.円形のフォームを作成する 2.多角形のフォーム及びコントロールを作成する 3. 4. 5. 6. |
下記プログラムコードに関する補足・注意事項 動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6) Option :[Option Explicit] 参照設定: 参照設定方法参照 使用 API:SetWindowRgn / CreateEllipticRgn / DeleteObject / CreatePolygonRgn その他 :このサンプルは、 Win32 APIを使用しておりますので、ある程度Win32 API が理解できる方がお使い下さい。 :
|
1.円形のフォームを作成する |
Option Explicit 'SampleNo:026 2002.04.27 '指定の領域をウィンドウ領域として設定する(P335) Private Declare Function SetWindowRgn Lib "user32" _ (ByVal hWnd As Long, ByVal hRgn As Long, _ ByVal bRedraw As Boolean) As Long '円形・楕円形の領域を作成する(P321) 'X1=左上隅のX座標 Y1=同Y座標 X2=右下隅のX座標 Y2=同Y座標 Private Declare Function CreateEllipticRgn Lib "gdi32" _ (ByVal X1 As Long, ByVal Y1 As Long, _ ByVal X2 As Long, ByVal Y2 As Long) As Long 'グラフィックオブジェクトを削除しシステムリソースを解放する(P261) Private Declare Function DeleteObject Lib "gdi32" _ (ByVal hObject As Long) As Long Private Sub Form_Load() Dim MaruSet As Long Dim Result As Long Form1.Move 700, 1000, 6000, 6000 Set Me.Picture = LoadPicture("c:\VBRescu1\Image.jpg") '丸い領域を作る()内の数値を変えると楕円や円の大きさが変わります MaruSet = CreateEllipticRgn(20, 20, 290, 290) Result = SetWindowRgn(Me.hWnd, MaruSet, True) 'オブジェクトを削除しシステムリソースを解放する Result = DeleteObject(MaruSet) End Sub 図1.上記実行結果 |
2.多角形のフォーム及びコントロールを作成する |
Option Explicit 'SampleNo:026 2002.04.27 @ 2006.12.28 '指定の領域をウィンドウ領域として設定する(P335) Private Declare Function SetWindowRgn Lib "user32" _ (ByVal hWnd As Long, ByVal hRgn As Long, _ ByVal bRedraw As Boolean) As Long '円形・楕円形の領域を作成する(P321) 'X1=左上隅のX座標 Y1=同Y座標 X2=右下隅のX座標 Y2=同Y座標 Private Declare Function CreateEllipticRgn Lib "gdi32" _ (ByVal X1 As Long, ByVal Y1 As Long, _ ByVal X2 As Long, ByVal Y2 As Long) As Long '多角形の領域を作成する(P322) Private Declare Function CreatePolygonRgn Lib "gdi32" _ (lpPoint As POINTAPI, ByVal nCount As Long, _ ByVal nPolyFillMode As Long) As Long 'グラフィックオブジェクトを削除しシステムリソースを解放する(P261) Private Declare Function DeleteObject Lib "gdi32" _ (ByVal hObject As Long) As Long Private Type POINTAPI X As Long '多角形の頂点のx座標 Y As Long ' 同 y座標 End Type Private Const WINDING = 2 '全域塗りつぶしモード Private Sub Form_Load() Dim hRgn As Long Dim lppt(4) As POINTAPI Dim nCount As Long Dim Result As Long Me.Move 0, 1000, 6000, 6000 Command1.Move 0, 0, 6000, 6000 'Command1.Style =1 'プロパティで設定して下さい Command1.BackColor = vbRed nCount = 5 '多角形の頂点の数 '星形の頂点の座標 lppt(0).X = 100: lppt(0).Y = 180 lppt(1).X = 380: lppt(1).Y = 180 lppt(2).X = 150: lppt(2).Y = 350 lppt(3).X = 240: lppt(3).Y = 80 lppt(4).X = 330: lppt(4).Y = 350 '関数を実行して領域のハンドルを取得 hRgn = CreatePolygonRgn(lppt(0), nCount, WINDING) 'ウィンドウ領域として設定する Result = SetWindowRgn(Me.hWnd, hRgn, True) 'オブジェクトを削除しシステムリソースを解放する Result = DeleteObject(hRgn) End Sub Private Sub Command1_Click() Command1.Visible = False Me.BackColor = vbBlue End Sub Private Sub Form_Click() Unload Me End Sub 図2.Command1 に描画した場合 図3.Form1 に描画した場合 |
3. |
4. |
5. |
6. |
検索キーワード及びサンプルコードの別名(機能名) |
円形のフォームを作成する 多角形のフォームを作成する 円形のコントロールを作成する 多角形のコントロールを作成する 円形のピクチャーコントロールを表示する |