`

VB 窗口处理技巧大全

    博客分类:
  • vb
VB 
阅读更多

VB提供了API函数SetWindowLong和GetWindowLong,可以让我们很容易取得对窗口的操作;通过对窗口属性的操作,可以更改窗口的显示风格。有些看来是正常情况下无法实现的窗口,现在你可以很容易的实现。只要你想到,更多希奇古怪的你也能做到。快试试下面的例子吧。

'以下例子中可能用到的API声明和常量、变量声明
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function
SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function
SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const
SWP_NOSIZE = &H1
Private Const SWP_NOZORDER = &H4
Private Const SWP_NOMOVE = &H2
Private Const SWP_DRAWFRAME = &H20
Private Const GWL_STYLE = (-16)
Private Const WS_THICKFRAME = &H40000
Private Const WS_DLGFRAME = &H400000
Private Const WS_POPUP = &H80000000
Private Const WS_CAPTION = &HC00000
Private Const WS_SYSMENU = &H80000
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_MAXIMIZEBOX = &H10000
Private Const WS_MINIMIZE = &H20000000
Private Const WS_MAXIMIZE = &H1000000


--------------------------------------------------------------------------------

'例子一:任何一个控件(只要有窗口,这是我们的前提,下同),你可以在运行时随便更改它的大小。
Private Sub ControlSize(ControlName As Control, SetTrue As Boolean)
Dim dwStyle As Long
dwStyle = GetWindowLong(ControlName.hwnd, GWL_STYLE)
If SetTrue Then
dwStyle = dwStyle Or WS_THICKFRAME
Else
dwStyle = dwStyle - WS_THICKFRAME
End If
dwStyle = SetWindowLong(ControlName.hwnd, GWL_STYLE, dwStyle)
SetWindowPos ControlName.hwnd, ControlName.Parent.hwnd,
0, 0, 0, 0, SWP_NOZORDER Or SWP_NOSIZE Or SWP_NOMOVE Or SWP_DRAWFRAME
End Sub
'用法:ControlSize picture1,true;设置第二个参数为False取消这种设置,下同


--------------------------------------------------------------------------------

'例子二:任何一个控件,我们都可以控制其显示风格为对话框的风格。
Private Sub ControlDialog(ControlName As Control, SetTrue As Boolean)
Dim dwStyle As Long
dwStyle = GetWindowLong(ControlName.hwnd, GWL_STYLE)
If SetTrue Then
dwStyle = dwStyle Or WS_DLGFRAME
Else
dwStyle = dwStyle - WS_DLGFRAME
End If
dwStyle = SetWindowLong(ControlName.hwnd, GWL_STYLE, dwStyle)
SetWindowPos ControlName.hwnd, ControlName.Parent.hwnd,
0, 0, 0, 0, SWP_NOZORDER Or SWP_NOSIZE Or SWP_NOMOVE Or SWP_DRAWFRAME
End Sub
'用法:ControlSize picture1,true


--------------------------------------------------------------------------------

'例子三:任何一个控件,我们都可以控制其显示风格为模式对话框的风格
Private Sub ControlModal(ControlName As Control, SetTrue As Boolean)
Dim dwStyle As Long
dwStyle = GetWindowLong(ControlName.hwnd, GWL_STYLE)
If SetTrue Then
dwStyle = dwStyle Or WS_POPUP
Else
dwStyle = dwStyle - WS_POPUP
End If
dwStyle = SetWindowLong(ControlName.hwnd, GWL_STYLE, dwStyle)
SetWindowPos ControlName.hwnd, ControlName.Parent.hwnd,
0, 0, 0, 0, SWP_NOZORDER Or SWP_NOSIZE Or SWP_NOMOVE Or SWP_DRAWFRAME
End Sub
'用法:ControlModal Picture1,true


--------------------------------------------------------------------------------

'例子四:任何一个控件,我们都可以给它加上标题栏,通过拖动标题栏,可以实现控件的运行时移动。
Private Sub ControlCaption(ControlName As Control, SetTrue As Boolean) Dim dwStyle As Long
dwStyle = GetWindowLong(ControlName.hwnd, GWL_STYLE)
If SetTrue Then
dwStyle = dwStyle Or WS_CAPTION
Else
dwStyle = dwStyle - WS_CAPTION
End If
dwStyle = SetWindowLong(ControlName.hwnd, GWL_STYLE, dwStyle)
SetWindowPos ControlName.hwnd, ControlName.Parent.hwnd,
0, 0, 0, 0, SWP_NOZORDER Or SWP_NOSIZE Or SWP_NOMOVE Or SWP_DRAWFRAME
End Sub
'用法:ControlCaption picture1,true


--------------------------------------------------------------------------------

'例子五:任何一个控件,我们都可以给它加上ControlBox(所谓ControlBox,就是窗体的图标+最小化+最大化+关闭按钮)。
Private Sub ControlSysMenu(ControlName As Control, SetTrue As Boolean)
Dim dwStyle As Long
dwStyle = GetWindowLong(ControlName.hwnd, GWL_STYLE)
If SetTrue Then
dwStyle = dwStyle Or WS_SYSMENU
Else
dwStyle = dwStyle - WS_SYSMENU
End If
dwStyle = SetWindowLong(ControlName.hwnd, GWL_STYLE, dwStyle)
SetWindowPos ControlName.hwnd, ControlName.Parent.hwnd,
0, 0, 0, 0, SWP_NOZORDER Or SWP_NOSIZE Or SWP_NOMOVE Or SWP_DRAWFRAME
End Sub
'用法:ControlCaption picture1,true:ControlSysmenu picture1,true

 

分享到:
评论

相关推荐

    VB窗口处理技巧大全

    ### VB窗口处理概述 #### API函数介绍 - **SetWindowLong**:此函数用于设置指定窗口的一个或多个长期存储属性值。 - **GetWindowLong**:此函数用于检索指定窗口的一个或多个长期存储属性值。 这两个API函数是...

    嵌入窗口_窗口处理_VB嵌入窗口_vb6_

    在VB6(Visual Basic 6)编程环境中,"嵌入窗口_窗口处理"涉及一系列用于控制和操作Windows应用程序窗口的技术。这些技术可以帮助开发者实现高级功能,例如...通过这些文件,开发者可以学习并实践VB6中的窗口处理技巧。

    窗口处理技巧大全...

    根据提供的文件信息,本文将详细解析与VB编程中窗口处理相关的高级技巧,特别是涉及窗口样式的修改、调整等操作。 ### 一、引言 在Visual Basic (简称VB)编程中,窗口处理是一项非常重要的技能。它涉及到如何创建...

    VB多种窗口设计源代码

    学习和分析这些源码,可以帮助开发者更深入地理解VB窗口设计的技巧,以及如何结合API函数和VB内置功能来扩展窗口的表现力。这些源代码不仅可以作为参考,还可以直接应用于实际项目,提升软件的用户体验。 总之,VB...

    窗体句柄_vb句柄获取窗口_

    标签"vb句柄获取窗口"进一步强调了VB编程中处理窗口句柄的能力。通过掌握这个技能,开发者能够实现更多高级的系统级操作,比如控制其他应用程序的窗口,或者与已存在的窗口进行交互。 综上所述,了解并熟练运用VB...

    vb三个窗口操作相互调用

    在VB(Visual Basic)编程中,多窗口操作和相互调用是常见的应用场景,尤其是在开发具有多个界面或工作空间的桌面应用程序时。以下是对这个主题的详细讲解。 首先,我们需要理解VB中的窗口对象。在VB中,窗口通常指...

    一个趣味的VB图形窗口的实现实例.rar

    在这个"一个趣味的VB图形窗口的实现实例"中,开发者通过巧妙地利用图片框(PictureBox)控件,实现了像素级别的窗口定制,并能够动态调整窗口大小以适应图片,最终创建了一个不规则形状的窗口。以下是对这个实例的...

    超级窗口(VB 源代码)

    通过分析这个项目,初学者能深入理解VB的窗体设计和事件处理机制,而经验丰富的开发者则可以借鉴其中的设计模式和技巧,提升自己的编程技能。此外,由于VB的广泛使用和兼容性,这样的源代码也对学习.NET框架和其他...

    vb 透明窗口边框

    总的来说,VB实现透明窗口边框涉及了API调用、窗口样式管理、图像处理等多个方面,需要一定的编程技巧和对Windows操作系统的理解。通过学习和实践,开发者可以创造出具有独特视觉效果的应用程序。

    超棒的VB6.0程序窗口皮肤实例.rar

    在本实例中,我们关注的是“超棒的VB6.0程序窗口皮肤实例”,这是一份源代码,展示了如何为VB6.0应用程序设计自定义的窗口皮肤,以及添加功能丰富的菜单。 首先,让我们理解窗口皮肤的概念。窗口皮肤是指改变应用...

    VB源码, 仿QQ窗口吸附屏幕边缘

    综上所述,这个VB源码项目是一个关于窗口操作和用户交互的实践案例,它涵盖了Windows编程的一些核心概念,如API调用、消息处理和事件驱动编程,同时也涉及到了提高软件用户界面友好性的技巧。对于学习VB和Windows...

    图像处理VB代码

    DIPvbNet可能包含了实现这些功能的源代码,通过学习和理解这些代码,开发者可以掌握图像处理的基本技巧,并在此基础上进行更复杂的图像分析和处理。对于学习和实践图像处理的VB程序员来说,这是一个宝贵的资源。

    VB 只建立一个窗口就可以重复打开很多次的代码

    本篇文章将深入解析如何在VB中实现窗口的重复打开,并讨论其背后的逻辑与技巧。 ### VB中的窗口管理 在VB中,窗口通常通过Form类来创建和管理。每个Form对象代表一个可视化的窗口,开发者可以通过设置其属性和编写...

    16种VB关闭窗口的特效演示及代码.7z

    总之,"16种VB关闭窗口的特效演示及代码"资源是一个很好的学习材料,可以帮助开发者掌握VB中创建动态效果的技巧,提升编程技能。通过深入理解和实践,可以为自己的VB应用程序创造出更多独特且引人注目的用户体验。

    vb大漠注册找字以及VB后台指定窗口鼠标点击详解

    同时,为了提高代码的稳定性和可维护性,还需注意错误处理、日志记录、调试技巧等方面。 通过阅读《vb大漠找字以及后台鼠标点击详解.txt》文件,你应该能深入理解这些知识点,并掌握如何在VB2008环境中运用大漠插件...

    VB6.0实现透明窗口

    在VB6.0中,创建一个具有透明效果的...然而,由于VB6.0的局限性,实现高级的透明特性可能需要更多的编程技巧和对底层Windows API的深入理解。在实践中,开发者通常会根据项目需求和性能考虑选择合适的透明实现方式。

    VB仿QQ窗口靠边隐藏

    在VB(Visual Basic)编程中,"VB仿QQ窗口靠边隐藏"是一个常见的用户界面(UI)设计技巧,它使得程序窗口能够模仿QQ聊天窗口的行为,即当窗口靠近屏幕边缘时,可以自动隐藏,鼠标经过时又会动态显示。这个功能可以...

    设置窗口在屏幕中的位置VB6.0源代码.rar

    在VB6.0(Visual Basic 6.0)中,开发者经常需要控制应用程序窗口在启动时或运行过程中在屏幕上的位置。这个“设置窗口在屏幕中的位置VB6.0源代码”提供了一种方法来实现这个功能。让我们深入探讨一下这个主题。 在...

    VB 实现抓屏功能(实现全屏,活动窗口和自定义的截屏)

    通过学习和理解这些代码,你可以加深对VB和GDI+绘图的理解,并掌握屏幕抓取的实践技巧。记得运行程序并调试代码,以确保其在不同系统和环境下都能正常工作。 总结,VB实现抓屏功能主要涉及GDI+的使用,包括`Bitmap`...

    十分炫酷的VB关于窗口

    在VB(Visual Basic)编程中,创建一个"关于...通过学习和实践这个炫酷的VB关于窗口,我们可以提升VB编程技巧,尤其是对用户界面和动态效果的处理能力。同时,也可以为自己的项目增添更多个性化元素,提高用户体验。

Global site tag (gtag.js) - Google Analytics