zoukankan      html  css  js  c++  java
  • 我的应用程序在上面吗?

    介绍 这是一个有用的函数,用于估计表单是否按z顺序位于所有可见窗口的顶部。 Windows平台使用z顺序来布局可见窗口,因此可见窗口窗体可以绘制在桌面的顶部或被其他窗口覆盖。有时,当您使用通知图标来使您的GUI更加友好时,您可能会面临一个问题:当您单击图标时,应用程序应该执行什么样的操作?最小化窗口吗?把它带到前面?程序逻辑应该像这样: 通过访问windowstate属性,我们可以很容易地估计一个表单是否最小化了,但遗憾的是,没有函数或属性可以查明一个表单是否在其他窗口的顶部。 我的解决方案是枚举顶部窗口的句柄直到我的应用程序,并使用每个句柄来获取两种信息:第一,窗口是可见的吗?如果是,则第二个窗口的标题长度是否大于0?(这一步非常重要,以防止混淆气球的尖端和背景菜单。) 如果两个条件都为真,枚举的结果将增加1。枚举结束后,我们可以得到应用程序的z顺序号。 使用的代码 IsOnTop函数接受一个整数窗口句柄,并返回一个布尔值来指示句柄窗口是否在顶部。 隐藏,收缩,复制Code

    Private Function IsOnTop(ByVal hwnd As Integer) As Boolean
        Dim i As Integer = GetTopWindow(0)    'Initialize
        Dim x As Integer = 1
        Dim s As String
    
        ' Enumeration
        Do    
            i = GetNextWindow(i, 2)  ' Find next window in Z-order
            If i = hwnd Then
                Exit Do
            Else
                If i = 0 Then        ' Never find any window match the input handle
                    Return False
                End If
            End If
    
            If IsWindowVisible(i) = True Then
                s = Space(256)
                If GetWindowText(i, s, 255) <> 0 Then
                ' Very important to prevent confusing
                ' of BalloonTips and ContextMenuStrips
                    x += 1
                End If
            End If
        Loop
    
        ' x is Z-order number
    
        If x = 1 Then
            Return True
        Else
            Return False
        End If
    End Function

    在这个函数中,我们使用了四个Win32 API函数:GetTopWindow()、GetNextWindow()、IsWindowVisible()和GetWindowText()。声明如下: 隐藏,复制Code

    Private Declare Function GetTopWindow Lib "user32" Alias "GetTopWindow" _
                    (ByVal hwnd As Integer) As Integer
    Private Declare Function GetNextWindow Lib "user32" Alias "GetWindow" _
                    (ByVal hwnd As Integer, ByVal wFlag As Integer) As Integer
    Private Declare Function IsWindowVisible Lib "user32" Alias "IsWindowVisible" _
                    (ByVal hwnd As Integer) As Boolean
    Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _
                    (ByVal hwnd As Integer, ByVal lpString As String, _
                     ByVal cch As Integer) As Integer

    您可以参考MSDN查看这些API函数的详细信息: GetTopWindowGetNextWindowIsWindowVisibleGetWindowText 的兴趣点 通过使用这个功能,我们可以很容易地创建一个智能的通知图标。如果主窗体被最小化,单击图标将恢复窗口。如果主窗体是活动的,单击图标将使窗口最小化,如果主窗体没有最小化并且处于非活动状态,则通知图标将使其出现在前面。 我做了一个演示项目。当你运行演示程序时,Windows任务栏上会出现一个图标;右击图标将弹出一个菜单条,显示您可以做的操作。 对不起,我的英语很差。我曾经在这个网站上获得了很多人的帮助,我想贡献自己的力量。这个功能是我在最近的一个项目中完成的;我希望它能帮助你们中的一些人。 历史 2007年7月9日-第一个版本。 本文转载于:http://www.diyabc.com/frontweb/news6987.html

  • 相关阅读:
    stm32的hal之串口库函数总结复习
    关闭win10 任务栏窗口预览的步骤:
    sizeof的注意点
    goto语句——慎用,但是可以用
    #define的一个小技巧
    Chapter 1 First Sight——36
    Chapter 1 First Sight——35
    Chapter 1 First Sight——34
    leetcode409
    Chapter 1 First Sight——34
  • 原文地址:https://www.cnblogs.com/Dincat/p/13467464.html
Copyright © 2011-2022 走看看