三个窗口:frmA,frmB,frmC
frmA里面,frmB.show 0
frmB打开后,可以frmC.show 0我想实现这样一个功能,在frmA遮挡住frmB的时候,当frmC获取焦点,就可以让frmB处于frmA上层,但是不让frmB获取焦点,因为对frmC还要有操作的,我试过frmB.ZOrder,但是总是被frmB把焦点抢去了同样,在frmC被frmA遮住时,当frmB获取焦点,就可以让frmC处于frmA上层,用show也不是个好办法,每show一次,frmC都要读取一次数据库,这样不太划算除了ZOrder和show之外,还有什么好的办法,让这两个窗口随时可以把被遮挡住的对方至于frmA上方么?
frmA里面,frmB.show 0
frmB打开后,可以frmC.show 0我想实现这样一个功能,在frmA遮挡住frmB的时候,当frmC获取焦点,就可以让frmB处于frmA上层,但是不让frmB获取焦点,因为对frmC还要有操作的,我试过frmB.ZOrder,但是总是被frmB把焦点抢去了同样,在frmC被frmA遮住时,当frmB获取焦点,就可以让frmC处于frmA上层,用show也不是个好办法,每show一次,frmC都要读取一次数据库,这样不太划算除了ZOrder和show之外,还有什么好的办法,让这两个窗口随时可以把被遮挡住的对方至于frmA上方么?
frmC.show 0,me
frmC.show 0
SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE SetWindowPos Me.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
frmc.show 1
用 show 1
怎么不写写代码
这里是基础区
拜托!!!
Private Const HWND_TOP = 0
Private Const HWND_BOTTOM = 1
Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOZORDER = &H4
Private Const SWP_NOREDRAW = &H8Private 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
'
'设置窗口为最顶层
'函数:SetTopWindow
'参数:Winwnd 要设置为最顶层窗口的HWND
'返回值:
'例子:
Public Function SetTopWindow(WinWnd As Long)
SetWindowPos WinWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE
End Function
frmB是frmA的子窗体,一些数据来自frmA
frmC是frmB的子窗体,一些数据来自frmB
如果frmB.show一次,那就必须把frmC也show一下,读取数据库会很频繁
我想要的效果是:
frmA遮挡frmB时,当点击frmC里任何控件或者点击窗口,就把frmB至于frmA上方,但是不让frmB获取焦点,因为frmC里要在文本框里输入资料frmA遮挡frmC时,当点击frmB里任何控件或者点击窗口,就把frmC至于frmA上方,但是不让frmC获取焦点,因为frmB里要在文本框里输入资料最相似的案例就是QQ的对话框,对话框里可以点出聊天记录框,但它和和聊天记录是两个窗口,当有别的窗口遮挡住这两个中的任一个窗口时,随便点哪个窗口都可以显示另一个窗口,但是两个窗口的操作互不干扰,又互相联系,我就想知道如何实现这个功能
formC.show 0,formA
这可以保证formb和formc一直在forma上方。至于是否禁用,就比较简单了。
form3.show , me只是楼主把问题说得复杂了~其实就这样嘛
其实在click事件中加入show属性就行了
至于你说的焦点问题,QQ里面聊天记录和输入框里面还是有焦点的