如何建一個表單A,這個表單A在別的軟體視窗B上可自由拖動,就像VB的工程管理器一樣,當A靠近B邊緣時就融合在一起,離開邊緣時就懸浮著。
我也不知道這樣描述對不,反正就是要達到VB中工程管理器一樣的效果
uj5u.com熱心網友回復:
一、目標你不能隨便哪個視窗都要停靠(Dock)上去吧,總得有個目標吧。用 API 的 FindWindow() 獲得目標視窗的句柄。
二、方式
a)如果象工程管理器一樣內部停靠,基本上不現實:軟體鑒別不出停靠視窗,不會相應調整界面布局,白搭。
b)如果在目標視窗上下左右緊貼的“外部停靠”,則是可能的。
下載這個代碼單類模塊子類化,更精簡的版本,作者為PctGL(VB6.0代碼)
稍作改動即可
Private Sub oSubClass_GetWindowMessage(Result As Long, ByVal cHwnd As Long, ByVal Message As Long, ByVal wParam As Long, ByVal lParam As Long)
Select Case Message
Case WM_MOVING '拖動表單時'
Dim rc As RECT
'獲得拖動時的表單位置'
Call CopyMemory(rc, ByVal lParam, Len(rc))
Label1.Caption = "(" & rc.Left & "," & rc.Top & ")-(" & rc.Right & "," & rc.bottom & ")"
'和目標視窗的位置比較,如果需要靠上去,這里可以改坐標。'
'下面是左側固定在 x=100 處的例子'
rc.Right = 100 + (rc.Right - rc.Left)
rc.Left = 100
Call CopyMemory(ByVal lParam, rc, Len(rc))
End Select
Result = oSubClass.CallDefaultWindowProc(cHwnd, Message, wParam, lParam)
End Sub
三、同步
進入停靠狀態后,目標視窗移動后也要跟隨移動。
跨行程子類化難度太高,開個定時器不停獲取目標視窗的位置好了,有變化跟隨移動。
uj5u.com熱心網友回復:
將A用setparent設定為B的子視窗,此時A只能在B中移動,想拖到哪里就拖到哪里......但是不明白你說的融合是什么情況。
uj5u.com熱心網友回復:
謝謝Tiger_Zhao 給的思路,回Topc008 ,我要的效果就像Code VB中的code explorer那樣,可以在指定表單中停靠轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/113906.html
標籤:VB基礎類
上一篇:10平方米大的空間能干什么
下一篇:asp還能存活多久
