#E6E6E6 【VB】實現表單的無邊框與全屏顯示 作者:吳文成

  在我近期開發的多功能影音播放程式 ExtraPlayer 裡,有個選項需要使有功能表或快顯功能表(PopupMenu)的表單能夠在執行階段裡 ,無邊框地,全螢幕顯示影像畫面 。我們知道 Visual Basic 的程式開發 ,表單是不允許在執行階段改變 BorderStyle 屬性 , 也就是說 ,表單的邊框樣式在執行階段是唯讀的。
[[img src=computer/fullScreen.gif height=248 width=282 align=left]]  為了使 ExtraPlayer 具有全螢幕播放的功能,我們必須先藉助 Windows API 的 SetWindowLong 函數來動態改變表單的邊框樣式
(改成無邊框樣式),然後再改變表單的位置大小以舖滿整個螢幕(有必要先紀錄原先表單的位置大小,這樣才能夠在後來回復其原位置大小)。相關的程式碼
,我列舉在後面。但是這裡有一點必須要注意:全螢幕顯示的時候,不要有任何改變表單標題(
Caption )的指令 , 不然表單會取消全螢幕顯示,而恢復成有標題列或功能表的視窗狀態。

  在一般模組(或表單模組)裡,加入以下的程式碼:

Option Explicit

Private Const GWL_STYLE = -16
' 在窗口結構中為指定的窗口設置信息
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Public Enum BorderStyle
 [沒有框線] = 100663296
 [單線固定] = 113770496
 [大小可調整] = 114229248
 [雙線固定對話方塊] = 113770624
End Enum

' 依據指定形式,在執行階段重設表單的 BorderStyle
Public Sub SetBorderStyle(objForm As Form, ByVal wndStyle As BorderStyle)
 With objForm
  SetWindowLong .hWnd, GWL_STYLE, wndStyle
  .Hide
  ' 必須使表單 Resize 與重繪才能夠實現新邊框樣式
  .Width = .Width - Screen.TwipsPerPixelX
  .Width = .Width + Screen.TwipsPerPixelX
  .Show
 End With
End Sub


  在表單裡,加入以下的程式碼:

Option Explicit

' 滑鼠雙擊表單時,即可切換全螢幕顯示
Private Sub Form_DblClick()
 Static isBsNone As Boolean
 Static preLeft As Long, preTop As Long
 Static preWidth As Long, preHeight As Long

 isBsNone = Not isBsNone
 SetBorderStyle Me, IIf(isBsNone, 沒有框線, 大小可調整)
 If isBsNone Then
  ' 在實現全螢幕之前,先紀錄表單的位置大小
  preLeft = Me.Left: preTop = Me.Top
  preWidth = Me.Width: preHeight = Me.Height
  Me.Move 0, 0, Screen.Width, Screen.Height
 Else
  ' 恢復全螢幕之前的表單位置大小
  Me.Move preLeft, preTop, preWidth, preHeight
 End If
End Sub
2004/11/02