ふぢのVB小技集 |
丸いウィンドウを作りたい
(質問)
いつも、四角いウィンドウばかりで飽きちゃいました。四角以外のウィンドウは作れませんか?
(回答)
いくつかのWindowsAPIを使用すれば可能です。
(解説)
WindowsAPIを使用すれば、どんな形のウィンドウでも作成できます。
今回は、丸いウィンドウを作ってみましょう。
標準モジュール、またはFormのGeneralプロシージャに以下の宣言文を追加する
'************************************************************* '楕円形のリージョンを作成するAPI '************************************************************* Public Declare Function CreateEllipticRgn Lib "gdi32" _ (ByVal X1 As Long, ByVal Y1 As Long, _ ByVal X2 As Long, ByVal Y2 As Long) As Long '************************************************************* 'ウィンドウにリージョンをセットするAPI '************************************************************* Public Declare Function SetWindowRgn Lib "user32" _ (ByVal hWnd As Long, ByVal hRgn As Long, _ ByVal bRedraw As Boolean) As Long Public lngRegion As Long 'リージョン 'プログラムの終了時にオブジェクト(リージョン)を '解放する必要がある為、Publicで宣言する。
次に、フォームのloadイベントに以下の処理をいれましょう。
Private Sub Form_Load() '楕円形のリージョンを作成 lngRegion = CreateEllipticRgn(0, 0, _ (Me.Width \ Screen.TwipsPerPixelX), (Me.Height \ Screen.TwipsPerPixelY)) '形を変えたいフォーム内の任意の座標を指定する。 '指定された長方形に内接する楕円のオブジェクトが '取得できる。 '失敗した場合には、lngRegionに0が設定される。 '楕円形のリージョンをFormにセット lngAPIReVal = SetWindowRgn(Me.hWnd, lngRegion, 1) 'これで丸いウィンドウの出来上がり。簡単でしょ? End Sub
次に、フォームのUnloadイベント等に以下の処理をいれましょう。
Private Sub Form_UnLoad() 'リージョンが作成済か If lngRegion <> 0 Then '以前に取得したリージョンを削除する DeleteObject (lngRegion) '使い終わったリージョン(オブジェクト)は必ず削除 'しよう!! End If End Sub
うまくいったかな?