登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

miaozk2006

点滴积累与收藏:关于技术,关于生活

 
 
 

日志

 
 

【引用】窗口处理技巧大全 vb(窗体控件)  

2012-03-06 00:25:37|  分类: 编程-VB |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

        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


相关参考


关于三个概念:ActiveXOLECOM

注册ActiveX控件的几种方法() 分享

VB 单击ListView控件某列表头进行排序


控件关文章:


VB表格控件总览与例程分析

VB 设置控件边框颜色(如:ListTextPicture)

VB控件注册 - 利用资源文件将dllocx打包进exe文件

VB的,经常注册和反注册OCX控件和DLL

VB表格控件总览与例程分析

根据窗体自动调整窗体内控件大小 注:实用,可以直接引用

用户控件制作讲解与实例

VB制作OCX控件的步骤

【引用】窗口处理技巧大全 vb(窗体控件)

VB让控件可以当标题栏拖动

VB 调用腾讯截图控件CameraDLL.dll

VB表格控件总览与例程分析

VB表格控件总览与例程分析

Mp3Play.ocx控件让音乐之声响起来

为系统加载右键注册控件选项【VB 注册控件】

VBMsFlexGrid控件的使用细则

点击MSFlexGrid数据控件的标题进行数据排序


VB相关


vbline的用法[]

画图工具的VB实现

VB 一个获得自己外网 IP 地址的程序代码

VB程序中实现IP地址子网掩码网关DNS的更改 []

VB 中应用 FSO 对象模型介绍(摘自网络)

[] VbFSO 对象的介绍

VB 画坐标轴

VB 二进制文件的操作

[VB]BMPJPGVBKeyCode常数用法

vb实时曲线的绘制和保存

VB操作EXCEL

vb初学回顾:最大公约数 最小公倍数 素数求取

vb 关于窗口样式的API以及处理文本的API参考

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

【引用】URLDownloadToFile_VB下载文件!

利用WinRar压缩和解压缩文件

VB 剪切板

VB实现指示窗口中拖动方框的程序

VB绘制走动的表针

如何用VB制作DLL文件

【引用】VB修改IP地址

VB多窗体退出代码

[]VB:如何检测到U盘的插拔(源代码)

巧用SendMessage函数扩展Treeview功能

vb中如何在任务管理器里面隐藏应用程序进程

如何实现VBEXCEL的无缝连接

一个API方式存取日志文件的模块[VB]

VB用记录集填充表格函数

VB打开文本文件各种方法

vb ClipBoard 剪切板应用(复制剪切粘贴)

【引用】窗口处理技巧大全 vb(窗体控件)

【转】 Md rd命令之VB

vb:读写文本文件

vb中实现真正锁定的带自定义菜单的文本控件

【引用】使用CommonDialogShowSave后如何判断是保存还是取消?

vb 关于commondialog的多选VB获取Windows操作系统所有版本

vb UTF文本文件访问

VB编程中的Unicode vs Ansi

VBPiView4注册机

VB获取超过2G文件的大小

CopyMemory还要快的函数SuperCopyMemory

VB:编程效率快步提高之:十七种可用一行代码完成的技巧

VB画出来的五星红旗

Qt第一印象——QteQt


更多精彩>>>

  评论这张
 
阅读(680)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018