mMainHook.bas
上传用户:davilee3
上传日期:2015-04-22
资源大小:986k
文件大小:8k
源码类别:

浏览器

开发平台:

Visual Basic

  1. Attribute VB_Name = "mMainHook"
  2. Option Explicit
  3. Public lpPrevWndProc As Long
  4. Public gHW As Long
  5. '当前选中菜单的handle
  6. Public hMenuCurSelect As Long
  7. '=================================================================
  8. '=======================Subs======================================
  9. '=================================================================
  10.     
  11.     
  12.     
  13.  '以下过程为消息循环处理
  14. Private Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  15. On Error GoTo due
  16. Dim i As Integer
  17. 'Dim pSM As ClsSMenu
  18. Dim TempMIS As MEASUREITEMSTRUCT
  19. Dim TempDIS As DRAWITEMSTRUCT
  20. Select Case uMsg
  21.     Case WM_MEASUREITEM '告诉系统绘制的控件大小
  22.         CopyMemory TempMIS, ByVal lParam, Len(TempMIS) '取值
  23.         
  24.         '找到菜单
  25.         Select Case TempMIS.CtlType
  26.             Case ODT_MENU
  27.                 gODrawMenu.On_WM_MEASUREITEM lParam
  28. '                For Each pSM In SMenus
  29. '                    If pSM.MeID = TempMIS.itemID Then
  30. '                        pSM.SetSize lParam
  31. '                        Exit For
  32. '                    End If
  33. '                Next pSM
  34.         End Select
  35.         
  36.     Case WM_DRAWITEM '绘制控件
  37.         CopyMemory TempDIS, ByVal lParam, Len(TempDIS) '取值
  38.         '找到菜单
  39.         Select Case TempDIS.CtlType
  40.             Case ODT_MENU
  41.                 gODrawMenu.On_WM_DRAWITEM lParam
  42. '                For Each pSM In SMenus
  43. '                    If pSM.MeID = TempDIS.itemID Then
  44. '                        pSM.MeDraw lParam
  45. '                        Exit For
  46. '                    End If
  47. '                Next pSM
  48.         End Select
  49.         
  50.     Case WM_INITMENUPOPUP
  51.         Call gMainForm.SubCls_INITMENUPOPUP(wParam)
  52.         
  53.     'Case WM_MENURBUTTONUP
  54.        ' Call MENURBUTTONUP(hw, wParam, lparam)
  55.     
  56.     Case WM_MENUSELECT
  57.         If lParam <> 0 Then
  58.             hMenuCurSelect = lParam
  59.         End If
  60.         Call gMainForm.SubCls_MENUSELECT(wParam, lParam)
  61.     Case WM_MENUCOMMAND
  62.         Call gMainForm.SubCls_WM_MENUCOMMAND(lParam, wParam)
  63. '    Case WM_COMMAND
  64. '        Call gMainForm.SubCls_COMMAND(wParam)
  65.         
  66.     Case WM_MOVE, WM_SIZE
  67.         Call gMainForm.SubCls_MoveSize
  68.         
  69.     Case WM_SYSCOLORCHANGE
  70.         Call gMainForm.UpdateButtonColor
  71.         
  72.     Case WM_HOTKEY
  73.         Call gMainForm.ShowMe(True)
  74. End Select
  75. WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
  76. Exit Function
  77. due:
  78.     ErrorLog.AddLog "mainhook windowproc," & Err.Description
  79.     Resume Next
  80.     
  81. End Function
  82.     
  83. Public Sub mainHook(hMainWin As Long)  '将程序勾入消息环中
  84.  '利用AddressOf取得消息处理函数WindowProc的指针,并将其传给SetWindowLong
  85.  'lpPrevWndProc用来存储原窗口的指针
  86.  lpPrevWndProc = SetWindowLong(hMainWin, GWL_WNDPROC, AddressOf WindowProc)
  87. End Sub
  88.     
  89. Public Sub mainUnhook(hMainWin As Long)
  90. '将程序从消息环退出。用原窗口的指针替换WindowProc函数的指针,即关闭子类、退出消息循环
  91.  Dim temp As Long
  92.  temp = SetWindowLong(hMainWin, GWL_WNDPROC, lpPrevWndProc)
  93. End Sub
  94. '收藏夹菜单上的右键菜单
  95. Public Sub MENURBUTTONUP(ByVal hw As Long, ByVal wParam As Long, ByVal lParam As Long)
  96. Dim rbUpID As Long
  97. Dim tMID&
  98. Dim tHSubMenu&
  99. Dim i&, tSubCanPop As Boolean
  100. Dim tSubInfo As subMenuInfo
  101. Dim tShell As New cShowFilePropertyWindow
  102. Dim curSubIndex As Long
  103. tMID = GetMenuItemID(lParam, wParam)
  104. rbUpID = tMID - MenuIDOffset
  105. If rbUpID >= 1 And rbUpID <= itemMenuCount Then
  106.     Dim tId As Long
  107.     FavoriteURLPopMenu.SetDefault ID_FavUrl_OpenNew
  108.     tId = FavoriteURLPopMenu.Popup2(hw, , , , TPM_Default Or TPM_RECURSE)
  109.     If tId <> 0 Then Call PostMessage(hw, WM_CANCELMODE, 0&, 0)
  110.     Select Case tId
  111.         Case ID_FavUrl_OpenNew
  112.             gMainForm.favConet favoriteInfo(rbUpID).url
  113.             gMainForm.ClickFavorite favoriteInfo(rbUpID).Title, favoriteInfo(rbUpID).url
  114.         Case ID_FavUrl_Open
  115.             gMainForm.favConet favoriteInfo(rbUpID).url, False
  116.             gMainForm.ClickFavorite favoriteInfo(rbUpID).Title, favoriteInfo(rbUpID).url
  117.         Case ID_FavUrl_Property
  118.            tShell.ShowProps favoriteInfo(rbUpID).path, verbShowProperties
  119.         Case ID_FavUrl_OpenIE
  120.             Call gMainForm.NewIE(favoriteInfo(rbUpID).url)
  121.         Case ID_FavUrl_Float
  122.             Call ShowFloatSubFav(lParam)
  123.         Case ID_FavUrl_OpenAll
  124.             Call OpenAllLink(lParam)
  125.         Case ID_FavUrl_Delete
  126. '            If MsgBox("确实要删除 """ & favoriteInfo(rbUpID).Title & """ ?", vbOKCancel Or vbQuestion, "删除收藏") = vbOK Then
  127. '                Kill favoriteInfo(rbUpID).path
  128. '            End If
  129.     End Select
  130. ElseIf tMID = -1 Then
  131.     tHSubMenu = GetSubMenu(lParam, wParam)
  132.     'Debug.Print tHSubMenu
  133.     tSubCanPop = False
  134.     For i = 1 To subMenuCount
  135.         If tHSubMenu = loadSubInfo(i).hWnd Then
  136.             tSubCanPop = True
  137.             tSubInfo = loadSubInfo(i)
  138.             curSubIndex = i
  139.             Exit For
  140.         End If
  141.     Next i
  142.     If tSubCanPop Then
  143.         FavoriteFolderPopMenu.SetDefault ID_FavFolder_Explorer
  144.         tId = FavoriteFolderPopMenu.Popup2(hw, , , , TPM_Default Or TPM_RECURSE)
  145.         If tId <> 0 Then Call PostMessage(hw, WM_CANCELMODE, 0&, 0)
  146.         Select Case tId
  147.             Case ID_FavFolder_Explorer
  148.                 tShell.ShowProps tSubInfo.path, verbShowExplorer
  149.             Case ID_FavFolder_SideFav
  150.                 gMainForm.ShowFavorite = IDM_Main_View_SideBand_Favorite
  151.                 gMainForm.ExpandNode tSubInfo.hNode, True
  152.             Case ID_FavFolder_OpenAllLink
  153.                 If Not tSubInfo.isLoadSub Then
  154.                     'gMainForm.SeedFile tSubInfo.path, tSubInfo.hWnd, , , tSubInfo.hNode
  155.                     gMainForm.SeekFavoriteFolder tSubInfo.path, tSubInfo.hWnd, , , tSubInfo.hNode
  156.                     loadSubInfo(curSubIndex).isLoadSub = True
  157.                 End If
  158.                 Call OpenAllLink(tSubInfo.hWnd)
  159. '                For i = 1 To itemMenuCount
  160. '                    If favoriteInfo(i).hSubMenu = tSubInfo.hwnd Then
  161. '                        gMainForm.NewWebbrowser favoriteInfo(i).Url
  162. '                    End If
  163. '                Next i
  164.             
  165. ''==================================================
  166. '            Case ID_FavFolder_Float
  167. '                If Not tSubInfo.isLoadSub Then
  168. '                    gMainForm.SeedFile tSubInfo.path, tSubInfo.hwnd
  169. '                    loadSubInfo(curSubIndex).isLoadSub = True
  170. '                End If
  171. '                Call ShowFloatSubFav(tSubInfo.hwnd)
  172. ''===================================================
  173.         End Select
  174.     End If
  175. End If
  176. End Sub
  177. Public Function drawSmallButton(hw As Long) As Boolean
  178. If Not gFullScreenMode Then
  179.     Dim tTitleBar As PTITLEBARINFO
  180.     Dim bX As Long, bY As Long
  181.     Dim tRc As RECT
  182.     Dim tl As POINTAPI, br As POINTAPI
  183.     
  184.     Dim tdc&
  185.     
  186.     tTitleBar.cbSize = Len(tTitleBar)
  187.     Call GetTitleBarInfo(hw, tTitleBar)
  188.     bX = GetSystemMetrics(SM_CXSIZE) - 2
  189.     bY = GetSystemMetrics(SM_CYSIZE) - 4
  190.     tl.x = tTitleBar.rcTitleBar.Right - 4 * bX - 2 - 2 - 3
  191.     tl.y = tTitleBar.rcTitleBar.Top + 2
  192.     Call ScreenToClient(hw, tl)
  193.     tl.y = 6
  194.     br.x = tl.x + bX + 1
  195.     br.y = tl.y + bY
  196.     SetRect tRc, tl.x, tl.y, br.x, br.y
  197.     
  198.     tdc = GetWindowDC(hw)
  199.     
  200.     Call DrawFrameControl(tdc, tRc, DFC_BUTTON, DFCS_BUTTONPUSH)
  201.     ReleaseDC hw, tdc
  202. '    MoveWindow gMainForm.fraTitleButton.hwnd, tTitleBar.rcTitleBar.Right - 4 * bX - 2 - 2 - 3, tTitleBar.rcTitleBar.Top + 2, bX, bY, 1
  203. '    MoveWindow gMainForm.cmdTray.hwnd, 0, 0, bX, bY, 1
  204. End If
  205. End Function