• 计算机讨论版
  • 电脑诊所
  • 菜鸟学院
  • 软件世界
  • 安全专区
  • 硬件世界
  • 网络世界
  • 网页设计
  • 图像设计
  • 程序设计
  • 操作系统
  • 计算机考试
  • 电脑故障
  • 电脑学习
  • 电脑技术
  • 电脑入门
  • 计算机知识
  • 电脑之家
  • 故障诊断
  • 电脑医院
  • 电脑学校
  • 电脑维护
  • 电脑医生
  • 电脑问答
  • 计算机问题
  • 电脑小知识
  • 电脑软件
  • 电脑diy
  • 你问我答
  • 网友俱乐部
  • 实用技巧
  • 初级应用
  • 心得分享
  • 软硬兼施
  • 电脑之家
  • 维护资料
  • 软件应用
  • 软件交流
  • 电脑硬件
  • 硬件知识
  • 电脑网络
  • windows
  • 程序设计

    程序设计
    ·求delphi的书!!!!!急用!谢谢!!
    ·求助!!!c++课程设计
    ·求助:关于数据结构JAVA版的课程设计
    ·哪位高手帮帮我!!!
    ·大家PP我的ASP页面~
    ·请教,关于学习c,vc
    ·[求助]
    ·[求助]
    ·公布模仿windows XP版本的 网页代码
    ·急救!!tTurbo2.0编程问题!
    ·求提供vb、vfp等语言编写的毕业设计论文及源程序
    ·高手帮忙,,帮我看看里面的函数功能是什么,,谢谢了
    ·急求汇编高手!!!帮我编个小程序吧,
    ·探求“堆排序”的过程
    ·求助:高手指点asp编程的问题!
    ·求foxpro的下载地址~
    ·[求助]!!!!!!!!
    ·莱鸟请教
    ·请问大虾,我的电脑XP无法装SQL。。。。
    ·c++高手来帮帮忙!谢谢了
    ·求假冒s3 86c375显卡驱动
    ·求助:《计算机网络》课程实验作业
    ·[求助]我想学SQL????
    ·这样的代码可以用什么代替???
    ·哪位大虾帮忙看一下这个程序是什么意思?
    ·各位帮我编个小程序好吗?
    ·求救 --- 关于VISUAL&...
    ·真心求救!!!!!!
    ·大家看看能不能打开!!!
    ·在本地调试  ASP 时遇到的问题!

    VB中实现“无标题”窗体的移动

    类别: 程序设计  时间: 2007.03.15

    jack_yu
    VB中实现“无标题”窗体的移动
    在一些流行的应用软件中,均采用了无标题栏的窗体设计,显得时尚美观。在VB中,只要将“caption”属性设为空即可实现。不过问题随之而来:一旦窗体栏消失,怎样实现窗体的移动呢?经过试验总结出如下代码,现与大家共享:

      首先,新建“工程1”,将Form1的“Caption”属性设为空,在窗体的通用声明区中加入如下代码:

    Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long '获取鼠标位置

    Private Type POINTAPI

    x As Long

    y As Long

    End Type

    Dim zb As POINTAPI 'zb是存放坐标的变量

    Dim cx As Integer

    Dim cy As Integer

    Dim moveit As Boolean

    注:以上的GetCursorPos API函数及POINTAPI类型可由VB自带的“API浏览器”中得到。

    窗体代码如下:

    Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)

    moveit = True '按下鼠标,进入可移动状态。

    cx = x 'cx记录下鼠标此时在窗体中的横坐标。

    cy = y 'cy记录下鼠标此时在窗体中的纵坐标。

    End Sub

    Private Sub Form_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)

    moveit = False '鼠标弹起,移动结束。

    End Sub

    Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)

    If moveit = True Then

    GetCursorPos z '得到鼠标的位置

    Form1.Move z.x * 15 - cx - 65, z.y * 15 - cy - 350 '这行代码是核心!由于VB中的缺省坐标单位是“Twips”,而用GetCursorPos得到的坐标是以“Pixel”为单位的。所以应将“z.x”,“z.y”转化为以“Twips”为单位的数值,“15(以分辨率为800*600为准)”就是Screen.Width与Screen.TwipsPerPixelX或(Screen.Height与Screen.TwipsPerPixelY)的比值,若屏幕使用其他的分辨率可依此类推。减去cx与cy为了使窗体从原地开始移动(大家可以去掉cx与cy,再看一看结果就明白了)。由于窗体的标题栏(虽然消失但移动还是以它为准)与边框有一定的高度和宽度,会造成开始移动时的窗体定位不精确,反复实践发现以上算法最合适。

    End If

    End Sub

    按下“F5”键,效果不错吧!

    供大家参考!!!!!!


    [此贴子已经被作者于2003-10-25 2:17:50编辑过]


    peacesoft

    我是VB新手,谢谢提供好资料!

    jack_yu

    可以的,你自己可以试试

    小鸟伊人

    有一个更简单的方法不只楼主知道否

    Private Declare Function ReleaseCapture Lib "user32" Alias "ReleaseCapture" () As Long
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Private Const WM_NCLBUTTONDOWN = &HA1
    Private Const HTCAPTION = 2

    Public Sub Drag_me(Object_Name As Object)
        ReleaseCapture
        SendMessage Object_Name.hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
    End Sub

    Object_Name 为任何的控件名,比如Libel控件,呵呵,可以试试啊


    上一篇:求delphi的书!!!!!急用!谢谢!! 下一篇:求foxpro的下载地址~

    计算机讨论版 © 版权所有

    提示:计算机讨论版致力于电脑信息的分享与传播,内容仅供参考,按此操作责任自负。