注册 登录
编程论坛 VB6论坛

求高手指点,让某个子窗体固定在前面!

wxflw 发布于 2012-09-24 20:33, 536 次点击
我做了一个MDIForm1窗体,有两个子窗体form1和form2,我要在form1窗体上打开form2,但是form2比form1的窗体小,所以两个窗体打开后点中后面的大窗体后会把小窗体遮住,我希望能让小窗体打开的情况下,点击后面的大窗体无效,小窗体要固定在前面,怎么弄?求教!
5 回复
#2
bczgvip2012-09-24 23:58
用SDK方式设定置前:
SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE)
用SDK方式取消置前
SetWindowPos(m_hWnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE)
#3
wxflw2012-09-25 09:17
我是初学者!好多都不懂!那个“|”是什么意思?通道吗?有具体实例没有?有的话给一个研究一下!820660020@麻烦斑竹了!
#4
邵帅2012-09-25 09:35
把窗体始终显示在最前:
则要用到一个API函数
首先在窗体模块声明API以及一些常量
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 HWND_TOPMOST = -1
private Const HWND_NOTOPMOST = -2
private Const SWP_NOACTIVATE = &H10
private Const SWP_SHOWWINDOW = &H40
窗体最前需要执行以下代码:
SetWindowPos me.hwnd, HWND_TOPMOST, Form1.Left / 15, Form1.Top / 15, Form1.Width / 15, Form1.Height / 15, SWP_NOACTIVATE Or SWP_SHOWWINDOW
取消最前需要执行以下代码:
SetWindowPos me.hwnd, HWND_NOTOPMOST, Form1.Left / 15, Form1.Top / 15, Form1.Width / 15, Form1.Height / 15, SWP_NOACTIVATE Or SWP_SHOWWINDOW
就是上面的了,具体的参数你可以查一下API说明。
#5
wxflw2012-09-25 11:40
上面的大哥师傅没有给出我需要的答案!你们的只是让窗体打开的时候让窗口前置在最前面而不是固定在最前面
第二次打开的2号窗体如果没有第一次打开的1号窗体大,我只要点到1号窗体那么2号窗体就会隐藏到1号窗体后面
我就没法子找到2号窗体了,除非把1号窗体关闭才能显示小的2号窗体,
因为我用的是MDIForm1所以比较麻烦,求帮助谢谢!
   我用了个笨办法!把窗体选了0-None然后用下面的
retValue = SetWindowPos(Me.hwnd, HWND_TOPMOST, Me.CurrentX, Me.CurrentY, MDIForm1.ScaleWidth, MDIForm1.ScaleHeight, SWP_SHOWWINDOW)
这样就只能看到打开的窗体了!暂时是解决了,但不是我要的结果!求正解!
#6
张宏杰2013-07-27 08:07
在打开窗体2的按钮中,加入下面代码:

窗体2.Show 1, Me
1