本文的主要内容:
1、窗口之间的显示优先级
简述:在一个较为复杂的系统中,往往存在多个窗口,为了使用方便,往往需要设置窗口之间的显示优先级顺序,通过查找资料,本文找到了以下几种可行的方法。
内容一:窗口之间的显示优先级说明:如何在所有窗口中将一个窗口置顶或者置底显示,通常情况下,鼠标点击的窗口会在最前面显示,从而覆盖某些我们需要显示的其他窗口上的内容,如何避免这种情况?
方法一:利用窗口的topmost属性
窗口有一个重要的topmost属性,将该属性值设置为true,可将窗口直接置顶显示。
方法二:利用API函数
利用一个API函数,setWindowPos,本文主要参考以下文献:
让窗口始终在最前面显示 VB
对上述文档做一个解释说明,这份文献比较完整的对这个进行了说明,这里就不在赘述,不难发现,这篇文档主要是应对vb语言,这与VB.NET还是有一些区别,如果完全引用文章中的例子,则会出错,但是方法和属性是对的。本文贴出参考文章中的关键程序,再对它进行相应的修改。
修改前:
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 SWP_NOSIZE& = &H1 ’ 保持窗口大小
Private Const SWP_NOMOVE& = &H2 ’ 保持窗口位置
Private Sub Form_Load()
SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE '将窗口设为总在最前
End Sub
修改后:
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Integer, ByValhWndInsertAfter As Integer,
ByVal x As Integer, ByVal y As Integer, ByVal cx As Integer,
ByVal cy As Integer, ByVal wFlags As Integer) As Integer
Private Const HWND_TOPMOST& = -1 ' 将窗口置于列表顶部,并位于任何最顶部窗口的前面
Private Const SWP_NOSIZE& = &H1 ' 保持窗口大小
Private Const SWP_NOMOVE& = &H2 ' 保持窗口位置
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
SetWindowPos(Me.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE) '将窗口设为总在最前
End Sub
注:此方法的窗口置顶显示可能运行时看不出效果,但编译成.exe之后就可以了
方法三:form2.showdailog()语句
调用form2窗口时,用form2.showdailog()语句,而不用form2.show()语句,这样可以将窗口form2置顶显示,但有一个弊端,再点击其他窗口时,form2窗口虽然不会被覆盖,但是form2窗口的显示阻止了其他窗口上事件的响应,除非form2窗口再次关闭,其他窗口上的事件才能响应。



