vb窗体或控件如何在一个已运行的程序上定位

已经把窗口设在最前以后,要使我编写的vb窗体覆盖在某程序表面,并且固定在这个窗口的某个位置,那个程序的窗口移动的话vb窗体也要跟着移动例如:我要让vb里的pictureb... 已经把窗口设在最前以后,要使我编写的vb窗体覆盖在某程序表面,并且固定在这个窗口的某个位置,那个程序的窗口移动的话vb窗体也要跟着移动
例如:我要让vb里的picturebox控件跟着某个已运行的程序的窗口移动
vb整个窗体跟着移动也可以
最好要在那个程序不运行的时候就不显示
展开
 我来答
djrm_yb
2008-08-17 · TA获得超过1927个赞
知道小有建树答主
回答量:1035
采纳率:100%
帮助的人:780万
展开全部
很简单,等下给你

这个最主要的就是要找到那个窗口的位置跟大小,然后移动自己到相应位置

代码如下:

Option Explicit

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long

Dim rRct As RECT

Function cmdGetClass(exeTitle As String) As Boolean
If exeTitle = "" Then cmdGetClass = False: Exit Function
Dim lngHand As Long
Dim strName As String * 255
Dim lngProcID As Long

lngHand = FindWindow(vbNullString, exeTitle)

GetClassName lngHand, strName, Len(strName)

If Left$(strName, 1) = vbNullChar Then
cmdGetClass = False
Else
GetWindowThreadProcessId lngHand, lngProcID
GetWindowRect lngHand, rRct

cmdGetClass = True
End If
End Function

Private Sub Command1_Click()
Dim sCaption As String '要找的窗口的标题
sCaption = "我的电脑"
If cmdGetClass(sCaption) Then
Me.Move rRct.Left * Screen.TwipsPerPixelX, rRct.Top * Screen.TwipsPerPixelY, (rRct.Right - rRct.Left) * Screen.TwipsPerPixelX, (rRct.Bottom - rRct.Top) * Screen.TwipsPerPixelY

End If
End Sub
greenleafbd
2008-08-15
知道答主
回答量:40
采纳率:0%
帮助的人:29.5万
展开全部
这个恐怕难吧,比判断一个外部程序是否运行都还难哟!
期待高手解决!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fzn000
2008-08-16 · TA获得超过1708个赞
知道小有建树答主
回答量:1857
采纳率:0%
帮助的人:135万
展开全部
分低了点吧,兄弟!高手是不会帮你解决这样的问题的,不过别人心情好,也说不一定
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ljl88900
2008-08-16 · TA获得超过2661个赞
知道大有可为答主
回答量:2197
采纳率:100%
帮助的人:2641万
展开全部
用setparent函数,把程序的某个控件设置为目标窗口下的子窗口,可以做到这一点。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ARTERIOSCLEROS
2008-08-16 · TA获得超过4185个赞
知道大有可为答主
回答量:1672
采纳率:0%
帮助的人:2459万
展开全部
建一个Timer1,打开一个记事本。其他要求可细谈。
代码如下。
================
Private Const HWND_TOPMOST = -1
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) 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 Sub Form_Load()
Timer1.Interval = 50
End Sub

Private Sub Timer1_Timer()
Dim h As Long, r As RECT
h = FindWindow("notepad", vbNullString)
GetWindowRect h, r
SetWindowPos hwnd, HWND_TOPMOST, r.Left, r.Top, r.Right - r.Left, r.Bottom - r.Top, 0
End Sub
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我不知道啊O
2008-08-17 · TA获得超过206个赞
知道小有建树答主
回答量:296
采纳率:0%
帮助的人:135万
展开全部
你的要求和你的分差距太多,高手一般懒的弄的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式