FC2ブログ

リージョン1:フォームの変形について

リージョン1:フォームの変形

リージョンを使用し,フォームを変形させる方法についてです。
変形といっても枠無しフォームや角丸フォーム,楕円くらいです。

'=======================================================================
'
' リージョン関連
'
'=======================================================================

'--------------------
' API宣言
'--------------------
  '---長方形のリージョン作成
    Declare Function CreateRectRgn Lib "gdi32" (ByVal x1 As Long, ByVal Y1 As Long, _
                                   ByVal x2 As Long, ByVal Y2 As Long) As Long
  '---角丸四角形のリージョン作成
    Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal x1 As Long, ByVal Y1 As Long, _
                                      ByVal x2 As Long, ByVal Y2 As Long, _
                                      ByVal Height As Long, ByVal Width As Long) As Long

  '---円形・楕円形のリージョン作成(領域をRECT構造体に基づいて作成)
    Declare Function CreateEllipticRgnIndirect Lib "gdi32.dll" (lprc As RECT) As Long

  '---リージョンをウインドウにセット
    Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, _
                                   ByVal bRedraw As Boolean) As Long
  '---2つのリージョンを結合
    Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, _
                                ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
  '---オブジェクトの削除
    Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
  '---システムメトリックの取得
    Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long

  '---定数宣言
    '[定数1]
    Public Const RGN_AND = 1  '両方のリージョンの重なりあう領域
    Public Const RGN_OR = 2   '両方のリージョンのすべてを結合してリージョンを作成
    Public Const RGN_XOR = 3  '両方のリージョンを結合し、重なりあう部分だけを除去
    Public Const RGN_DIFF = 4  'リージョン1の中で、リージョン2と交わらない部分
    Public Const RGN_COPY = 5 'リージョン1のコピー

    '[定数2]
    Public Const NULLREGION = 1     '空のリージョン
    Public Const SIMPLEREGION = 2    '境界が重なっていません
    Public Const COMPLEXREGION = 3  '境界が重なっています

    '[定数3]
    Public Const SM_CXBORDER = 5  'サイズ変更できないウィンドウ枠の幅
    Public Const SM_CYBORDER = 6  'サイズ変更できないウィンドウ枠の高さ
    Public Const SM_CYCAPTION = 4 'ウィンドウ タイトルの高さ(SM_CYBORDERを含む)
    Public Const SM_CXFRAME = 32  'サイズ変更できるウィンドウ枠の幅
    Public Const SM_CYFRAME = 33  'サイズ変更できるウィンドウ枠の高さ

  '---構造体宣言
    Public Type RECT
      Left   As Long '矩形の左上隅のX座標
      Top   As Long '矩形の左上隅のY座標
      Right  As Long '矩形の右下隅のX座標
      Bottom As Long '矩形の右下隅Y座標
    End Type





'---------------------------------------------------
' 利用方法(以下必要に応じてプロシージャに貼り付けて下さい。)
'---------------------------------------------------

  '---<< フォーム透明化 >>
    Dim X_Sabun
    Dim Y_Sabun

    '---システムメトリックの取得
      X_BORDER = GetSystemMetrics(SM_CXBORDER)
      Y_BORDER = GetSystemMetrics(SM_CYBORDER)
      Y_CAPTION = GetSystemMetrics(SM_CYCAPTION)
      X_FRAME = GetSystemMetrics(SM_CXFRAME)
      Y_FRAME = GetSystemMetrics(SM_CYFRAME)

    '---'長方形(角有り/フレーム無し)
      With Form1
        'フォーム自体のリージョンを作成
        hRgn = CreateRectRgn((X_BORDER + X_FRAME), _
                       (Y_BORDER + Y_FRAME + Y_CAPTION), _
                       .Width \ Screen.TwipsPerPixelX - (X_BORDER + X_FRAME) / 2, _
                       .Height \ Screen.TwipsPerPixelY - (Y_BORDER + Y_FRAME) / 2)

        'リージョン設定
        lRet = SetWindowRgn(.hwnd, hRgn, True)
      End With


  '---<< フォーム透明化 >>
     '---リージョン解除
      With Form1
        Call SetWindowRgn(.hwnd, 0, True)
      End With



【宣伝・・・(*´ω`)】

タイトルロゴ3

 システム葵では、個人様向けでも企業様向けでも、パソコン修理から、パソコン設定、パソコンの使い方、LAN環境構築、ソフトウェア開発まで、様々な実績がありますので、困ったことがあれば、お気軽にご相談下さい。
関連記事

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

検索フォーム
最新記事
カテゴリ
全記事表示リンク

全ての記事を表示する

最新コメント
プロフィール

ITLife

Author:ITLife
システム葵新井聡太です。
東京都東村山市に生まれ、ここで育ち、ここで結婚し、システムエンジニア一筋で十数年やってきました。
ここでは主に、パソコンを中心にITに関わることを備忘録として残していきたいと思います。
少しでも来ていただいた方のお役に立てたら幸いです。
m(_ _)m

p.s
ここで紹介している内容は一例です。すべては、自己責任でお願いします。

カレンダー
07 | 2019/08 | 09
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
訪問数
月別アーカイブ
リンク