VB里窗体嵌套的问题,请教高手!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VB里窗体嵌套的问题,请教高手!相关的知识,希望对你有一定的参考价值。

VB里窗体嵌套的问题,请教高手!我想实现如下操作:form1中嵌套其它窗体若干(form2,form3....),当点击form1的command1时候,其它form显示在form1中,并且任意拖动不会脱出form1,最好其它form在form1中固定的区域拖动,当form1移动时候其它form在窗体中位置不会变.那位大侠能搞定,小弟万分感激!我所有的分都给你了,后面挣了分也可都奉送!

参考技术A 建立MDI窗体和MDI子窗体 参考技术B '为指定窗口设置一个新父窗口
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

Private Sub Command1_Click()
Dim a As New Form1

a.Show

SetParent a.hWnd, Me.hWnd
End Sub

哈哈,超好玩的

参考资料:http://hi.baidu.com/%CE%DE%C1%C4%CB%A3%CB%A3%BF%E1

本回答被提问者采纳
参考技术C 你说的就是MDI窗体。 参考技术D 窗体有属性 模块和非模块2中
你用这样的语句
form1.show 1
就可以实现 显示form1

vb中设置窗体透明?

各位高手,在vb中如何设置窗体透明?就是设置它的背景色是透明的。在属性栏的backcolor好像没有透明选择。

参考技术A Option Explicit
Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, _
ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, _
ByVal hObject As Long) As Long

Private Sub Form_Load()
Form1.BorderStyle = 0
Dim Bitmap
Me.AutoRedraw = True
Bitmap = CreateCompatibleBitmap(Me.hdc, 0, 0)
SelectObject Me.hdc, Bitmap '设置窗体透明
End Sub

Private Sub Form_Click()
End '单击窗体任何地方都是退出程序
End Sub

自己写的一段代码。你看一下吧。。我写是完全的。直接没有了标题栏,如果想要标题栏的话。把其中的 Form1.BorderStyle = 0 这句去掉就可以了。本回答被提问者采纳
参考技术B 原理:
先把窗体背景设置为一种特殊色
然后用SetLayeredWindowAttributes函数扣除那个颜色

代码:

模块:
Public Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Public Const WS_EX_LAYERED = &H80000
Public Const GWL_EXSTYLE = (-20)
Public Const LWA_ALPHA = &H2
Public Const LWA_COLORKEY = &H1
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

窗体载入时候代码Form_Load:

Me.BackColor=&H458B34 '设置特殊颜色
SetWindowLong Me.hWnd,GWL_EXSTYLE, GetWindowLong(Me.hwnd, GWL_EXSTYLE)
SetLayeredWindowAttributes me.hwnd, &H458B34, 0, LWA_COLORKEY

楼上火星了 这只是一种
第二种合并区域 利用GDI 不过效率不高
第三种利用GDI+ 可以创建透明通道 不过代码复杂。只要扣色上个代码即可。

==================================
To 楼上:
楼上的代码是模拟没有自动重绘;但是有个问题就是在没有重绘的时候 窗体的背景就是固定的;而且一般这种窗口会支持移动,那么就出现错误了;如果你要不断刷新,那么你的程序的效率就会很低;任何此类的LayeredWindow都是正解;包括全透明或者是半透明或者是部分透明或者是 透明通道;只不过有一些有直接API实现;有一些需要结合一堆API实现。
参考技术C Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Const WS_EX_LAYERED = &H80000
Const GWL_EXSTYLE = (-20)
Const LWA_ALPHA = &H2
Const LWA_COLORKEY = &H1
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 Sub Form_Load()
Dim rtn As Long
rtn = GetWindowLong(Me.hwnd, GWL_EXSTYLE)
rtn = rtn Or WS_EX_LAYERED
SetWindowLong Me.hwnd, GWL_EXSTYLE, rtn
SetLayeredWindowAttributes Me.hwnd, 0, 150, LWA_ALPHA

End Sub

以上是关于VB里窗体嵌套的问题,请教高手!的主要内容,如果未能解决你的问题,请参考以下文章

用VB运行工程时,双击打开窗体文件,VB就自动关闭了,毫无提示,在此之前还出现对象库未注册,高手,咋办

vb高手看过来 我一个窗体中十个combobox,分别命名为combo1〜combo10,每个co

高分请教Inno Setup 编译器高手

c语言while,if表达式的问题,请教高手!

vb 如何隐藏菜单栏,VB高手进、、、、、、、、、、、、、、、、、

在Linux安装QT的问题:高手请教