home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 1_2002.ISO / Data / Zips / CODE_UPLOAD41343222000.psc / ntImgToIcon / modWinFunctions.bas < prev    next >
Encoding:
BASIC Source File  |  2000-02-28  |  9.9 KB  |  349 lines

  1. Attribute VB_Name = "modWinFunctions"
  2. Option Explicit
  3.  
  4. 'This file was created 1/10/00
  5. 'by Shannon Little
  6. 'http://go.to/neotrix
  7. 'This file contains functions relating to the shell
  8. 'Such as window position, colors and systemmetrics
  9.  
  10. '**** Window Animation W98/2000 only
  11. Private Declare Function AnimateWindow Lib "user32" ( _
  12.             ByVal hWnd As Long, _
  13.             ByVal dwTime As Long, _
  14.             ByVal dwFlags As Long) As Long
  15.  
  16. Public Enum WindowTransition
  17.     LeftToRight_ = &O1
  18.     RightToLeft_ = &H2
  19.     TopToBottom_ = &H4
  20.     BottomToTop_ = &H8
  21.     Hide_ = &H10000
  22.     Activate_ = &H20000
  23.     Blend_ = &H40000
  24.     Slide_ = &H40000
  25.     Center_ = &H10
  26. End Enum
  27. '****
  28.  
  29. '**** System Colors
  30. Public Enum SysColorItems
  31.     SCROLLBAR = 0
  32.     BACKGROUND = 1
  33.     ACTIVECAPTION = 2
  34.     INACTIVECAPTION = 3
  35.     Menu = 4
  36.     WINDOW = 5
  37.     WINDOWFRAME = 6
  38.     MENUTEXT = 7
  39.     WINDOWTEXT = 8
  40.     CAPTIONTEXT = 9
  41.     ACTIVEBORDER = 10
  42.     INACTIVEBORDER = 11
  43.     APPWORKSPACE = 12
  44.     HIGHLIGHT = 13
  45.     HIGHLIGHTTEXT = 14
  46.     BTNFACE = 15
  47.     BTNSHADOW = 16
  48.     GRAYTEXT = 17
  49.     BTNTEXT = 18
  50.     INACTIVECAPTIONTEXT = 19
  51.     BTNHIGHLIGHT = 20
  52. End Enum
  53.  
  54. Private Declare Function GetSysColor Lib "user32" ( _
  55.             ByVal nIndex As Long) As Long
  56. 'Private Declare Function SetSysColors Lib "user32" ( _
  57.             'ByVal nChanges As Long, _
  58.             'lpSysColor As Long, _
  59.             'lpColorValues As Long) As Long
  60.       
  61. '****
  62.  
  63. Private Declare Function CreateRoundRectRgn Lib "gdi32" ( _
  64.             ByVal x1 As Long, _
  65.             ByVal Y1 As Long, _
  66.             ByVal X2 As Long, _
  67.             ByVal Y2 As Long, _
  68.             ByVal X3 As Long, _
  69.             ByVal Y3 As Long) As Long
  70.         
  71. Private Declare Function SetWindowRgn Lib "user32" ( _
  72.             ByVal hWnd As Long, _
  73.             ByVal hRgn As Long, _
  74.             ByVal bRedraw As Boolean) As Long
  75.         
  76. Public Declare Function FlashWindow Lib "user32" ( _
  77.             ByVal hWnd As Long, _
  78.             ByVal bInvert As Long) As Long
  79.             
  80. Private Declare Function SetWindowPos Lib "user32" _
  81.             (ByVal hWnd As Long, _
  82.             ByVal hWndInsertAfter As Long, _
  83.             ByVal x As Long, _
  84.             ByVal y As Long, _
  85.             ByVal cx As Long, _
  86.             ByVal cy As Long, _
  87.             ByVal wFlags As Long) As Long
  88. '*****
  89. Private Const LB_FINDSTRING = &H18F
  90. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
  91.             ByVal hWnd As Long, _
  92.             ByVal wMsg As Long, _
  93.             ByVal wParam As Long, _
  94.             lParam As Any) As Long
  95. '*****
  96. '***** System Menu ****
  97.  
  98. 'SetMenuItemInfo fState constants.
  99. Private Const MFS_GRAYED     As Long = &H3&
  100. Private Const MFS_CHECKED    As Long = &H8&
  101.  
  102. 'SendMessage constants.
  103. Private Const WM_NCACTIVATE  As Long = &H86
  104.  
  105. 'User-defined Types.
  106. Private Type MENUITEMINFO
  107.     cbSize        As Long
  108.     fMask         As Long
  109.     fType         As Long
  110.     fState        As Long
  111.     wID           As Long
  112.     hSubMenu      As Long
  113.     hbmpChecked   As Long
  114.     hbmpUnchecked As Long
  115.     dwItemData    As Long
  116.     dwTypeData    As String
  117.     cch           As Long
  118. End Type
  119.  
  120. 'Application-specific constants and variables.
  121. Private Const xSC_CLOSE  As Long = -10
  122. Private Const DisableID     As Long = 1
  123. Private Const EnableID     As Long = 2
  124. Private Const ResetID    As Long = 3
  125. Private MII    As MENUITEMINFO
  126.  
  127. 'Menu item constants
  128. Const SC_SIZE         As Long = &HF000&
  129. Const SC_SEPARATOR    As Long = &HF00F&
  130. Const SC_MOVE         As Long = &HF010&
  131. Const SC_MINIMIZE     As Long = &HF020&
  132. Const SC_MAXIMIZE     As Long = &HF030&
  133. Const SC_CLOSE        As Long = &HF060&
  134. Const SC_RESTORE      As Long = &HF120&
  135.  
  136. 'SetMenuItemInfo fMask Constants
  137. Const MIIM_STATE      As Long = &H1&
  138. Const MIIM_ID         As Long = &H2&
  139. Const MIIM_SUBMENU    As Long = &H4&
  140. Const MIIM_CHECKMARKS As Long = &H8&
  141. Const MIIM_TYPE       As Long = &H10&
  142. Const MIIM_DATA       As Long = &H20&
  143.        
  144.        
  145. Private Declare Function GetSystemMenu Lib "user32" ( _
  146.             ByVal hWnd As Long, _
  147.             ByVal bRevert As Long) As Long
  148.  
  149. Private Declare Function GetMenuItemInfo Lib "user32" Alias "GetMenuItemInfoA" ( _
  150.             ByVal hMenu As Long, _
  151.             ByVal un As Long, _
  152.             ByVal b As Boolean, _
  153.             lpMenuItemInfo As MENUITEMINFO) As Long
  154.  
  155. Private Declare Function SetMenuItemInfo Lib "user32" Alias "SetMenuItemInfoA" ( _
  156.             ByVal hMenu As Long, _
  157.             ByVal un As Long, _
  158.             ByVal bool As Boolean, _
  159.             lpcMenuItemInfo As MENUITEMINFO) As Long
  160.  
  161. '***** End System Menu *****
  162.       
  163. Private hWnd As Long
  164. Private hMenu As Long
  165.  
  166. 'Use: Locates nearest match for text in a list box
  167. 'Sub Text1_Change()
  168. '       List1.ListIndex = SendMessage(List1.hwnd, LB_FINDSTRING, -1, _
  169. '       ByVal CStr(Text1.Text))
  170. '    End Sub
  171. '*****
  172.  
  173. 'Creates 1/10/00
  174. 'Copied
  175. Public Function SetTopWindow(hWnd As Long, blnTopOrNormal As Boolean) As Long
  176.     Dim SWP_NOMOVE
  177.     Dim SWP_NOSIZE
  178.     Dim FLAGS
  179.     Dim HWND_TOPMOST
  180.     Dim HWND_NOTOPMOST
  181.     
  182.     SWP_NOMOVE = 2
  183.     SWP_NOSIZE = 1
  184.     FLAGS = SWP_NOMOVE Or SWP_NOSIZE
  185.     HWND_TOPMOST = -1
  186.     HWND_NOTOPMOST = -2
  187.     
  188.     If blnTopOrNormal = True Then 'Make the window the topmost
  189.         SetTopWindow = SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS)
  190.     Else    'Make it normal
  191.         SetTopWindow = SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, FLAGS)
  192.         SetTopWindow = False
  193.     End If
  194. End Function
  195.  
  196. 'Created 1/10/00
  197. 'Copied
  198. Public Sub Initialize(myForm As Form)
  199.     'All initialization for all function is done here
  200.     hWnd = myForm.hWnd
  201.     hMenu = GetSystemMenu(myForm.hWnd, 0)
  202.     Dim Ret As Long
  203.  
  204.     '**** System Menu *****
  205.     MII.cbSize = Len(MII)
  206.     MII.dwTypeData = String(80, 0)
  207.     MII.cch = Len(MII.dwTypeData)
  208.     MII.fMask = MIIM_STATE
  209.     MII.wID = SC_CLOSE
  210.     Ret = GetMenuItemInfo(hMenu, MII.wID, False, MII)
  211.     '**** End System Menu ****
  212. End Sub
  213.  
  214. 'Created 1/10/00
  215. 'Copied
  216. '***** All part of changing the system menu *****
  217. Public Sub DiableCloseMenu()
  218.     Dim Ret As Long
  219.  
  220.     Ret = SetId(DisableID)
  221.     If Ret <> 0 Then
  222.         'If its is not already disabled then disable it
  223.         If MII.fState <> MFS_GRAYED Then
  224.             MII.fState = MFS_GRAYED
  225.             MII.fMask = MIIM_STATE
  226.             Ret = SetMenuItemInfo(hMenu, MII.wID, False, MII)
  227.             If Ret = 0 Then
  228.                 Ret = SetId(ResetID)
  229.             End If
  230.     
  231.             Ret = SendMessage(hWnd, WM_NCACTIVATE, True, 0)
  232.         End If
  233.     End If
  234. End Sub
  235.  
  236. 'Created 1/10/00
  237. 'Copied
  238. Public Sub EnableCloseMenu()
  239.     Dim Ret As Long
  240.  
  241.     Ret = SetId(EnableID)
  242.     If Ret <> 0 Then
  243.         If MII.fState = MFS_GRAYED Then     'Its already disabled so enable it
  244.             MII.fState = MII.fState - MFS_GRAYED    'Enable
  245.  
  246.             MII.fMask = MIIM_STATE
  247.             Ret = SetMenuItemInfo(hMenu, MII.wID, False, MII)
  248.             If Ret = 0 Then
  249.                 Ret = SetId(ResetID)
  250.             End If
  251.             'Send message that windows need to repaint the non-client area (sys menu)
  252.             Ret = SendMessage(hWnd, WM_NCACTIVATE, True, 0)
  253.         End If
  254.     End If
  255. End Sub
  256.  
  257. 'Created 1/10/00
  258. 'Copied
  259. Private Function SetId(Action As Long) As Long
  260.     Dim MenuID As Long
  261.     Dim Ret As Long
  262.  
  263.     MenuID = MII.wID
  264.     If MII.fState = (MII.fState Or MFS_GRAYED) Then 'If its disabled
  265.         If Action = EnableID Then                  'And the action is to enabled, enabled
  266.             MII.wID = xSC_CLOSE
  267.         End If
  268.         'If the action was to disabled, then do nothing
  269.     Else
  270.         If Action = DisableID Then
  271.             MII.wID = xSC_CLOSE
  272.         End If
  273.     End If
  274.  
  275.     MII.fMask = MIIM_ID
  276.     Ret = SetMenuItemInfo(hMenu, MenuID, False, MII)
  277.     If Ret = 0 Then
  278.         MII.wID = MenuID
  279.     End If
  280.     SetId = Ret
  281.     
  282. '   'User-defined Types.
  283. 'Private Type MENUITEMINFO
  284.     'cbSize        As Long
  285.     'fMask         As Long
  286.     'fType         As Long
  287.     'fState        As Long
  288.     'wID           As Long
  289.     'hSubMenu      As Long
  290.     'hbmpChecked   As Long
  291.     'hbmpUnchecked As Long
  292.     'dwItemData    As Long
  293.     'dwTypeData    As String
  294.     'cch           As Long
  295. 'End Type
  296. End Function
  297.  
  298. '**** End system menu change *****
  299.  
  300. 'Created 2/22/00
  301. 'Adds rounded edges to a window
  302. Public Sub MakeWindowEdgesRound(pForm As Form, lngValue As Long)
  303.     Dim lngRet As Long
  304.     Dim lng As Long
  305.     Dim lngWidth As Long
  306.     Dim lngHeight As Long
  307.             
  308.     'Get Form size in pixels
  309.     lngWidth = pForm.Width / Screen.TwipsPerPixelX
  310.     lngHeight = pForm.Height / Screen.TwipsPerPixelY
  311.     
  312.     'Create Form with Rounded Corners
  313.     lngRet = CreateRoundRectRgn(0, 0, lngWidth, lngHeight, lngValue, lngValue)
  314.                               
  315.     lng = SetWindowRgn(pForm.hWnd, lngRet, True)
  316. End Sub
  317.  
  318.  
  319. 'Created 2/22/00
  320. 'Returns the color of a system item
  321. Public Function GetSystemColor(ColorItem As SysColorItems)
  322.     GetSystemColor = GetSysColor(ColorItem)
  323. End Function
  324.  
  325. 'Sets the color of a system item
  326. 'Created 2/22/00
  327. 'Public Function SetSystemColor(SysColorItems)
  328.     'The first parameter indicates the total number of system colors you are attempting to change.
  329.     'The second parameter is an array of the numeric values for the display aspects you want to change.
  330.     'The third parameter is also an array whose elements are the new colors for the display aspects defined by the first array
  331.     
  332. 'End Function
  333.  
  334. 'Created 2/22/00
  335. 'Animates the window
  336. Public Sub AnimateWindowOpening(pForm As Form, Trans As WindowTransition, Optional Speed As Long)
  337.     Dim lngSpeed As Long
  338.     
  339.     If IsMissing(Speed) Then
  340.         lngSpeed = 1000
  341.     Else
  342.         lngSpeed = Speed
  343.     End If
  344.     
  345.     AnimateWindow pForm.hWnd, lngSpeed, Trans
  346.     pForm.Refresh
  347. End Sub
  348.  
  349.