程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 在VB中實現移動沒有標題欄的窗口

在VB中實現移動沒有標題欄的窗口

編輯:VB綜合教程
方法一
  
  
  這種方法是在窗體的MouseDown、MouseUp和MouseMove等事件的處理過程中添加代碼,實現在鼠標左鍵按下後移動時,改變窗體的Left和Top屬性,實現移動無標題欄的窗體。
  
  進入VB,把窗體Form1的BorderStyle屬性設置為0-None(無標題欄),再窗體上添加一個ButtonCommand組件,用來關閉程序。代碼如下:
  
  PrivateTypePOINT
  
   XAsSingle
  
   YAsSingle
  
  EndType
  
  DimFormPAsPOINT
  
  '記錄窗體原始位置
  
  DimMousePAsPOINT
  
  '記錄鼠標按下時的位置
  
  DimMouseLButtonDownAsBoolean
  
  '記錄鼠標左鍵是否按下
  
  PrivateSubCommand1_Click()
  
   End'退出程序
  
  EndSub
  
  PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
  
   FormP.X=Form1.Left
  
  '記下窗體原始坐標位置
  
   FormP.Y=Form1.Top
  
   MouseP.X=X
  
  '記下鼠標按下時的位置
  
   MouseP.Y=Y
  
   IfButton=1Then
  
   MouseLButtonDown=True
  
  '鼠標左鍵按下
  
   EndIf
  
  EndSub
  
  PrivateSubForm_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
  
   IfMouseLButtonDownThen
  
   Form1.Left=FormP.X (X-MouseP.X)'移動窗體
  
   Form1.Top=FormP.Y (Y-MouseP.Y)
  
   EndIf
  
  EndSub
  
  PrivateSubForm_MouseUp(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
  
   MouseLButtonDown=False
  
  '鼠標左鍵彈起
  
  EndSub
  
  上述方法不是很完善,制作出的窗體被拖動時,窗體會隨鼠標的移動而移動。而在默認的Windows設置中拖動窗體時,被拖動的窗體不會隨窗體的移動而移動,隨窗體移動的僅是一個與窗體形狀、大小一樣的虛框,只有釋放鼠標後,窗體才會移動到釋放鼠標時虛框的所在處。要實現這種效果,請看第二種方法。
  
  方法二
  
  這種方法通過消息的發送實現移動無標題窗體。當鼠標按下、移動或釋放時,將鼠標在窗體上按下的消息(消息值為HTCAPTION)發出,就可以拖動窗體了。代碼如下:
  
  PrivateDeclareFunctionReleaseCaptureLib"user32"()AsLong
  
  PrivateDeclareFunctionSendMessageLib"user32"Alias"SendMessageA"(ByValhwndAsLong,
  
  ByValwMsgAsLong,ByValwParamAsLong,lParamAsAny)AsLong
  
  PrivateConstWM_NCLBUTTONDOWN=&&HA1
  
  PrivateConstHTCAPTION=2
  
  '以上API函數和常數的聲明可在VB自帶的“API浏覽器”中找到
  
  PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
  
   '在窗體的MouseDown事件中添加以下代碼
  
   IfButton=1Then
  
   CallReleaseCapture
  
   CallSendMessage(hwnd,WM_NCLBUTTONDOWN,HTCAPTION,0)
  
   EndIf
  
  EndSub
  
  PrivateSubCommand1_Click()
  
  End  '退出程序
  
  EndSub
  
  這種方法實現起來比第一種方法更容易,只有幾行代碼,並且沒有那麼多的變量,窗體被拖動時與普通窗體一樣,只有一個虛框隨鼠標的移動而移動,當釋放鼠標時窗體才移動到相應的位置。用到了兩個API函數。
  
  以上程序在VB6.0和Windows98SE下調試通過。->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved