【 tulaoshi.com - 编程语言 】
                             
                            方法一    
  这种方法是在窗体的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下调试通过。->