我想让一个窗体重任务栏返回桌面 ,但不知道怎么用代码  请高手帮忙

解决方案 »

  1.   

    我吐血了   这个问题我想了两天了  因为我是菜!  但是我也不知道是不是我自己没有阐述清楚。楼上的人改Me.WindowState = 0  只是让他出来的窗口 不是最大也不是最小 我晕  我都不知道怎么说了,
      但是我的目的是:让一个正常运行的窗体  他的这个属性Me.WindowState = 0  是默认的不变  但是我将这个窗体  最小化  后    再点击  他在桌面上的图标让他 重窗体任务栏的最小化窗体   还原到刚才  我刚才将他最小化的位置  并激活  就像芊芊静听一样  最小化后 在点它在桌面上的图标  将其激活  并在桌面上打开!!!!!!!!!!!!
    求求各位了!!!!!
      

  2.   

    你要先明白一个概念:什么叫“窗体重任务栏返回桌面”?
    WindowState = 0  是默认,但不是不变的,
    窗体  最小化  后,WindowState 就变成 1 了
    这时“窗体重任务栏返回桌面”,就是WindowState由 1 变回 0你的意思好像是要防止重运行,并激活自己前一个实例?
    App.PrevInstance可以帮你一点忙,但并不可靠,且不能达到你的这个要求。用FindWindow与ShowWindow更好一些。找找相关API帮助,自己学着写会更有好处的。
      

  3.   

    http://www.moon-soft.com/doc/10663.htm
      

  4.   

    点击“开始→运行”,在弹出的“运行”对话框中输入“REGSVR32 /n /i:u shell32”(不含双引号)
      

  5.   

    Option ExplicitPrivate Type NOTIFYICONDATA
            cbSize As Long
            hwnd As Long
            uID As Long
            uFlags As Long
            uCallbackMessage As Long
            hIcon As Long
            szTip As String * 64
    End TypePrivate Type POINTAPI
        X As Long
        Y As Long
    End TypePrivate Type RECT
            Left As Long
            Top As Long
            Right As Long
            Bottom As Long
    End TypePrivate Type TPMPARAMS
        cbSize As Long
        rcExclude As RECT
    End TypePrivate Const NIF_MESSAGE = &H1
    Private Const NIF_ICON = &H2
    Private Const NIF_TIP = &H4Private Const NIM_ADD = &H0
    Private Const NIM_MODIFY = &H1
    Private Const NIM_DELETE = &H2Private Const TPM_LEFTALIGN = &H0&
    Private Const TPM_RIGHTBUTTON = &H2&Private Const WM_MOUSEMOVE = &H200
    Private Const WM_LBUTTONDOWN = &H201
    Private Const WM_LBUTTONUP = &H202
    Private Const WM_LBUTTONDBLCLK = &H203
    Private Const WM_RBUTTONDOWN = &H204
    Private Const WM_RBUTTONUP = &H205
    Private Const WM_RBUTTONDBLCLK = &H206
    Private Const WM_USER = &H400
    Private Const WM_NOTIFYICON = WM_USER + &H100
    Private Const WM_COMMAND = &H111
    Private Const WM_DESTROY = &H2
    Private Const WM_DRAWITEM = &H2B
    Private Const WM_INITDIALOG = &H110
    Private Const WM_PAINT = &HF
    Private Const WM_MENUSELECT = &H11F
    Private Const WM_ENDSESSION = &H16
    Private Const WM_QUERYENDSESSION = &H11Private Const SCK_MSG = 1025Private Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    Private Declare Function TrackPopupMenuEx Lib "user32" (ByVal hMenu As Long, ByVal un As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal hwnd As Long, lpTPMParams As TPMPARAMS) As Long
    Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
    Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
    Private Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
    Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Private Declare Function DefWindowProc Lib "user32" Alias "DefWindowProcA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongPrivate Const GWL_WNDPROC = (-4)Dim SMenu As Long
    Dim lProc As LongPrivate mvarfrmMenuTarget As FormPublic Property Set frmMenuTarget(ByVal vData As Form)
        Set mvarfrmMenuTarget = vData
    End PropertyPublic Property Get frmMenuTarget() As Form
        Set frmMenuTarget = mvarfrmMenuTarget
    End Property'隐藏主程序窗口
    Public Sub FormHide()
        frmMenuTarget.Hide
        AddIcon
        MenuGet
    End Sub'打开主程序窗口
    Public Sub FormShow()
        DelIcon
        frmMenuTarget.Show        '显示主窗体
    End Sub'获得菜单句柄
    Private Sub MenuGet()
     Dim CMenu As Long
        CMenu = GetMenu(frmMenuTarget.hwnd)     '得到窗体菜单(系统托盘菜单专用窗体)
        SMenu = GetSubMenu(CMenu, 0)
    End Sub'添加系统栏图标
    Private Sub AddIcon()
     Const GWL_WNDPROC = (-4) '替换窗口处理函数
     Dim NData As NOTIFYICONDATA
        
        NData.cbSize = Len(NData)
        NData.hwnd = frmMenuTarget.hwnd
        NData.uID = 1
        NData.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
        NData.uCallbackMessage = WM_NOTIFYICON
        NData.hIcon = frmMenuTarget.Icon
        NData.szTip = "天恩计件工资" & Chr$(0)
        
        Shell_NotifyIcon NIM_ADD, NData
        lProc = SetWindowLong(frmMenuTarget.hwnd, GWL_WNDPROC, AddressOf DialogProc)
    End Sub'删除系统栏图标
    Private Sub DelIcon()
     Dim NData As NOTIFYICONDATA
     Dim RetProc As Long
        
        NData.cbSize = Len(NData)
        NData.hwnd = frmMenuTarget.hwnd
        NData.uID = 1
        
        Shell_NotifyIcon NIM_DELETE, NData
        SetWindowLong frmMenuTarget.hwnd, GWL_WNDPROC, lProc
    End Sub'该函数为TaskForm的窗口处理函数。
    Private Function DialogProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
     Dim MPos As POINTAPI
     Dim TPM As TPMPARAMS
      
        Select Case uMsg'    Case SCK_MSG
            '处理网络传输
            'ProcessMessage wParam, lParam'    Case WM_INITDIALOG
    '    Case WM_COMMAND
    '    Case WM_DRAWITEM
    '    Case WM_DESTROY
            
        Case WM_ENDSESSION '系统即将关闭
            FormShow
            '处理退出
        Case WM_QUERYENDSESSION
            FormShow
            '处理退出
        Case WM_NOTIFYICON  '有鼠标事件产生
            Select Case lParam
            Case WM_LBUTTONUP
                FormShow
            Case WM_RBUTTONUP
                  If SMenu Then
                    '获得光标位置
                    GetCursorPos MPos
                    '在光标位置处弹出菜单
                    TPM.cbSize = Len(TPM)
                    TPM.rcExclude.Left = MPos.X
                    TPM.rcExclude.Top = MPos.Y
                    TrackPopupMenuEx SMenu, (TPM_LEFTALIGN Or TPM_RIGHTBUTTON), MPos.X, MPos.Y, frmMenuTarget.hwnd, TPM
                  End If
    '        Case WM_LBUTTONDOWN
    '        Case WM_RBUTTONDOWN
    '        Case WM_LBUTTONDBLCLK
    '        Case WM_MOUSEMOVE
            Case Else   '其它项交给系统处理
                DialogProc = DefWindowProc(hwnd, uMsg, wParam, lParam)
            End Select
        Case Else
            DialogProc = CallWindowProc(lProc, hwnd, uMsg, wParam, lParam)
        End Select
    End Function
    你要的是这个吧?
    复制上面的代码保存成 *.bas
    MenuTarget 是你要加入托盘的Form
    调用 FormShow  FormHide显示或还原