移动没有标题栏的窗口

我们一般是用鼠标按住窗口的标题栏,然后移动窗口,当窗口没有标题栏时,我们可以用下面的方法来移动窗口:
 
在 BAS 文件中声明:
Declare Function ReleaseCapture Lib "user32" () As Long
Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" ( _
ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) As Long
Public Const HTCAPTION = 2
Public Const WM_NCLBUTTONDOWN = &HA1
 
然后,在 Form_MouseDown 事件中:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
ReleaseCapture
SendMessage hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
End Sub

拖动无系统标准标题栏的窗口

  在VB6.0中可以通过设置Form的属性,制作无系统标题栏的窗口。可是,由于失去了系统标题栏,如何使用鼠标拖动窗口便成了一个棘手的问题。其实,借助API函数ReleaseCapture和SendMessage,这个问题便可迎刃而解了。
  首先,在module文件中加入下列声明语句:
  Declare Sub ReleaseCapture Lib"User"()
  Declare Function SendMessage Lib"User"(ByVal hWnd _
As Integer,ByVal wMsg As Integer,ByVal wParam As Integer,_lParam As Any)As Long
  Public Const WM_SYSCOMMAND=&H112
  Public Const SC_MOVE=&HF010
  Public Const HTCAPTION=2
  然后,在Form的MouseDown事件中加入下列代码:
  ReleaseCapture
  Ret&=SendMessage(Me.hWnd,WM_SYSCOMMAND,_SC_MOVE+HTCAPTION,0)
  ……
  程序运行后,只要当光标落在Form区域时按住鼠标左键,便可以拖动窗口了。在一些要求生动活泼的界面的程序设计中,开发者常常希望自制风格独特的标题栏,以满足整个界面的要求。通过这个方法,就可以使自制的标题栏达到乱真的地步。不过,用作自制标题栏的控件,必须具有MouseDown事件以摆放上述代码。

在VB6.0中如何拖动窗体或控件

许多Windows下的应用程序,都采用了图形化的界面,这样做的好处是可以使程序界面更漂亮生动,更具吸引力。但是在这样的界面下就不能使用Windows原来的标题条了,否则将会影响界面的美观性。那么在没有标题条的情况下,如何用鼠标拖动窗体呢?或者拖动其它的控件呢?
其实,采用API函数调用很容易实现,下面我们以拖动窗体(Form1)为例来具体讲一下实现方法:
1.新建立一个项目,名称为:test.vbp.
2. 填加一个模块,名称为:test.bas,并且在声明部分加入以下代码:
Declare Function ReleaseCapture Lib "user32" () As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const WM_SYSCOMMAND = &H112
Public Const SC_MOVE = &HF012
其中ReleaseCapture函数是用来释放鼠标捕获的,SendMessage函数是一个在WindowsAPI中非常重要的函数,在这里的作用是用来向Windows发送移动窗体的消息。WM_SYSCOMMAND是向Windows发送消息的常量。SC_MOVE是控制移动窗体的常量。请注意:这里SC_MOVE的赋值一定要是&HF012,它表示鼠标对象。
3.在窗体的MouseDown过程中加入以下代码:
ReleaseCapture
SendMessage Form1.hwnd, WM_SYSCOMMAND, SC_MOVE, 0
其中ReleaseCapture函数用来释放鼠标捕获,SendMessage函数向Windows发送移动窗体的消息。
4.保存并运行程序,按下鼠标,你会发现窗体会随着鼠标的移动而移动。就和其它著名的应用程序一样。
以上讲述了如何在VB中用鼠标拖动窗体,其实,控件的拖动的原理是一样的。
例如以下代码可以实现图片框的拖动:
ReleaseCapture
SendMessage Picture1.hwnd, WM_SYSCOMMAND, SC_MOVE, 0
其实,运用API函数可以实现许多你意想不到的功能。如果需要更多有关VB的其它经验与技巧。建议访问http://vb2000.kstar.com站点。

VB6.0编程中窗体的控制技巧

在VB6.0中,每个应用程序都是从窗体(Form)开始的,窗体是构成用户接口的所有控件的容器。录活运用窗体的各项属性和操作,可以为用户设计出赏心悦目的操作界面。
1.窗体以当前屏幕分辨率全屏显示
在应用程序的编制调试过程中,用于经常用到菜单、工具条和工具框等辅助工具,一般不将窗体设为全屏显示,以便于操作;另外,当屏幕分辨率改变时,窗体可能不能正常显示,可以在窗体的Load事件中插入下列代码,即可使窗体启动时以当前屏幕分辨率全屏显示:
Private Sub Form_Load()
Form1.top=0 ‘设置窗体上边界位置
Form1.left=0 ‘设置窗体左边界位置
Form1.Width=Screen.Width ‘设置窗体宽度为屏幕宽度
Form1.Height=Screen.Height ‘设置窗体高度为屏幕高度
End Sub
2.使窗体保持在最上层
有时应用程序需要一个信息或查询窗体总保持在最上层,即使用读书切换到其他窗体也能看到该窗体,如Microsoft Word中的Find窗体,这是通过调用Windows API函数SetWindowPos()实现的,示例如下:
Option Explicit
Private Declare Function SetWindowPos Lib“User32”(ByValhwnd As Long,ByVal h WndInsertAfter As Long,ByVal x As Long,ByVAl y As Long,ByVal cx As Long,ByVal cy As Long,ByVal wFlags As Long)As Long
Const HWND_TOPMOST=-1
Const SWP_SHOWWINDOW=&H40
Private Sub Form_load()
Dim retValue As Long
RetValue=setWindowPos(me.hwnd,HWND_TOPMOST,Me.CurrentX,Me.CurrentY,300,300,SWP_SHOWWINDOW)
End Sub
3.窗体装入速度慢的处理技巧
在缺省情况下,Visual Basic装入和显示项目的第一个窗体。如果窗体装入过程超过一秒,用户只好耐心等待,特别是在窗体中含有大型位图或许多控件时。其实,微软在OFFICE组件中已经很好地处理了这一问题。下面的程序演示了处理低速窗体的装入技巧,在应用程序启动时,首先启动一个简单的快速装入窗体,可以将公司标志或其他信息显示在上面,然后在快速窗体后台中装入慢速窗体,慢速窗体装入后将快速窗体卸出,从而解决了让用户厌烦的等待问题。
Private Sub Form_Load()
Form1.Show
Form1.Refresh
Load Form2 ‘装入慢速窗体
Form2.Show ‘显示慢速窗体
End Sub
如果省略Form1.Show方法,则需装入慢速窗体后才能显示信息窗体。Refresh方法让Visual Basic更新显示后再执行后面的命令,缺省情况下,Visual Basic只在不执行其他代码时,才有机会刷新显示。慢速窗体Form2装入后,用下列代码将快速窗体Fomr1卸出:
Private Sub Form_Load()
UnLoad Form1 ‘卸出快速窗体
End Sub
一旦装入窗体,它就占用了所要的资源,所以不再需要的窗体应及时卸出,将占用的资源交还系统。另外,由于窗体装入比较慢,特别是包含位图或其他资源的大文件装入更慢,所以应用程序运行期间应尽量避免频繁装入/卸出窗体,而最好在应用程序启动时把窗体装入内存,需要时再显示。

利用VB6.0控制窗口显示风格

软件界面生动与否很大程度上决定于你对窗口的设计和控制。事实上,Windows程序员可以对系统中的任何窗口进行操纵,它意味着,Windows程序员可以直接操纵任何正在运行的应用窗口;可以发现一个特定的应用是否在运行,如果该应用没有运行还可以启动它;可以重新排列屏幕上的所有窗口;还可以使其他应用的窗口最大化或最小化。下面我们探讨一种十分有意义的应用。
我们很希望在程序激活其它窗口时仍使得封面窗口处于前台,也就是说该窗口具有“ 总在最前面”(“Always On Top”)这一特性。其实Microsoft系列软件都是这样做的,当你运行Word、Excel或PowerPoint时,你会发现它们的封面窗口不随系统激活其它窗口而消失。
Visual Basic For Windows(以下简称VB)作为一种可视化编程软件,以其优秀的图形化界面设计风格而著称。利用它可使软件开发周期大为缩短,然而VB对Windows DLL(动态链接库)调用的强大功能却易受不少程序员所忽略。事实上,灵活应用Windows DLL的API(应用程序接口)才能使你开发的系统更加充满活力。正是由于VB支持DLL使得我们可以随心所欲地控制窗口显示风格,从而我们可以让系统封面总处于前台,下面说明用到的API函数。
.SetWindowPOS
VB定义:
Declare Sub SetWindowPosLib“User” (Bybal hWnd as Integer ,hWndInsertAfter as Integer,ByVal X as Integer,ByVal Y as Integer,ByVal cx as Integer ,ByVal cy as Integer,ByVal wFlags as Integer)
说明:能改变窗口的位置和大小,并能修改窗口在内部窗口列表中所处的位置,
以控制显示次序。
参数 类型/说明
hWnd Integer-需定位的窗口
hWndInsertAfter Integer-窗口句柄,在窗口列表里,窗口 hWnd 将放在该窗口句柄的后面,它可以取以下值:
hWnd_BOTTOM:把窗口放在窗口列表的底部;
hWnd-TOP:把窗口放在Z序的顶部。Z序是窗口按层次级别显示的顺序;
hWnd_TOP(MOST):把窗口放在列表的顶部,位于所有最顶窗口之后。
X Integer—窗口新的X坐标,如果hWnd是一个子窗口,X给出的是父窗口的客户坐标。
Y Integer—窗口新的Y坐标,如果hWnd是一个子窗口,Y给出的是父窗口的客户坐标。
cx Integer—指定新窗口宽度。
cy Integer—指定新窗口高度。
wFlags Integer—包含下列标志之一的整数:
SWP_DRAWFRAME:围绕窗口画一个边框;
SWP_HIDEWINDOW:隐藏该窗口;
SWP_NOACTIVATE:不激活该窗口;
SWP_NOMOVE:保持当前位置(X和Y被忽略);
SWP_NOREDRAW:窗口不自动重画;
SWP_NOSIZE:保持当前大小(cx和cy被忽略);
SWP_NOZORDER:保持窗口列表中的当前位置(hWndInsertAfter被忽略);
SWP_SHOWWINDOW:显示该窗口。
注释:当一个窗口成为最顶窗口时,它所有的从属窗口也成为最顶窗口;当它成为非最顶窗口时,它全部的从属窗口和拥有窗口也成为非最顶窗口,Z序表示窗口沿着从屏幕里向外延伸的假想Z轴,从顶到底的排列次序。
VB实现窗口拥有“Always On Top”特性:
首先,定义全局常量及函数。
Global Const hWnd_TOPMOST=-1
Global Const SWP_NOACTIVATE=&H10
Global Const SWP_SHOWWINDOW=&H40
Declare Sub SetWindowPosLib “User” ByBal hWnd as Integer,hWndInsertAfter as Integer,ByVal X as Integer,ByVal Y as Integer,ByVal cx as Integer,ByVal cy as Integer,ByVAL wFlags as Integer)
主程序如下编写:
Sub Main 0
Screen.MousePointer=11'使鼠标变为漏斗状
Load SystemCover'装载系统封面窗体
SetWindowPos SystemCover.hWnd,hWnd_TOPMOST,0,0,0,0,SWP_NOACTIVATE Or SWP_SHOWWINDOW'使得封面总处于最前面
Load InitWindow1'装载初始化窗体1
Load InitWindow2'装载初始化窗体2

Unload SystemCover'关闭系统封面窗体
Screen.MousePointer=0
'使鼠标变为缺省形状
End Sub

VB6.0中的窗口控制技巧(1)相关推荐

  1. 浅谈VB6.0中的实用技巧

    浅谈VB6.0中的实用技巧 (一) VB6.0中文本框处理技巧 在Visual Basic中,文本框(TextBox)是最常用的控件,熟练运用文本框 是开发出高质量的应用程序的基础.笔者在从事应用程序 ...

  2. VB6.0中创建和使用文本资源文件

    不少网友问及如何在VB中建立和使用文本资源文件.我想这也是很多VB初学者迫切想掌握的技巧.为此,将回答网友的信件整理了一下,形成此文,希望对大家有些帮助. 一.文本资源文件的建立 第一步:启动资源编辑 ...

  3. 【引用】在VB6.0中实现弹出式菜单的几种方法

    在Windows应用程序中,利用弹出式菜单(Pop-up Menu)是增加软件易用性的一个重要方式.本文将向大家介绍在VB6.0中实现弹出式菜单的几种方法. 利用VB6.0内置的PopupMenu方法 ...

  4. 【转】VB6.0中用户类和数据源类的设计和使用技术

    本文转自: http://www.pcworld.com.cn/99/script/9907/072601b.asp 摘要:用户自定义类(Class)是Visual Basic 6.0中实现软件重用的 ...

  5. 在VB6.0中怎么实现escape和unescape

    两套方案,一是调用JAVAscript对象,二是自己写代码编码与解码,代码在CSDN中的以下帖子里贴出: 方案一代码: 复制内容到剪贴板 程序代码 Function Escape(ByVal pstr ...

  6. VB6.0中,DTPicker日期、时间控件不允许为空时,采用文本框与日期、时间控件相互替换赋值(解决方案)...

    VB6.0中,日期.时间控件不允许为空时,采用文本框与日期.时间控件相互替换赋值,或许是一个不错的选择. 实现效果如下图: 文本框txtStopTime1 时间框DTStopTime1(DTPicke ...

  7. VB6.0中,DTPicker日期、时间控件不允许为空时,采用文本框与日期、时间控件相互替换赋值(解决方案)

    VB6.0中,DTPicker日期.时间控件不允许为空时,采用文本框与日期.时间控件相互替换赋值(解决方案) 参考文章: (1)VB6.0中,DTPicker日期.时间控件不允许为空时,采用文本框与日 ...

  8. VB6.0中快速实现大面积不规则区域的填充

    VB6.0中快速实现大面积不规则区域的填充 ------------------------------------------------------------------------------ ...

  9. VB6.0中用户类和数据源类的设计和使用技术

    ---- Visual Basic 6.0是面向对象的编程语言,允许开发人员设计自定义类.用户自定义类(Class)是VB 6.0中实现软件重用的最基本方法,也是设计和使用Active X EXE/D ...

最新文章

  1. redis源码笔记-endian
  2. 吴恩达、Jeff Dean、Bengio对话:如何用机器学习应对气候变化 | NeurIPS 2019
  3. Android教程之实现动作感应技术
  4. python中的join函数连接dataframe_python pandas DataFrame.join用法及代码示例
  5. Scala代码案例:统计三个班成绩情况,每个班有5名同学,求出各个班的平均分和所有班级的平均分
  6. 【教程】jQuery打造动态下滑菜单
  7. 二叉树祖先节点_二叉树的祖先
  8. 聊聊基准测试的MVP方案
  9. 恢复误删文件 Windows File Recovery
  10. Unity3D物理渲染算法研究【PBR】
  11. CRT使用(一)CRT软件安装和部署
  12. AI证件照背景色修改,几行代码搞定
  13. VMware Workstation15.5下载安装教程(win10)
  14. 2019年日历 打印 备注_2010年日历:可打印的日历和墙纸
  15. leet160:相交链表
  16. 基于ESP32与OLED12864的主机状态监视器(MicroPython)
  17. 数组名arr与arr之间的关系
  18. 关于Hanoi塔的实现
  19. indesign页眉如何左右分布_InDesign排版技巧
  20. 问题 C: 旅行者的背包

热门文章

  1. 印象笔记不能同步 显示服务器端出现,印象笔记同步失败,服务器端出现问题...
  2. 哪些地区容易受到地震威胁?地震图告诉你答案
  3. 【谷歌学术】使用指南
  4. 什么是cookie?
  5. Glid load支持加载类型
  6. linux文件管理环境,linux教程环境搭建,基本命令及文件管理
  7. Pandas 官方文档 翻译
  8. 运营商的“大网”怎么建? 三大运营商纷纷SDN/NFV三步走
  9. DevExpress破解版下载
  10. 企业微信H5网页费用报销操作界面 Vue