[blue]Option Compare Database
Option Explicit
Private Type DLGTEMPLATE
style As Long
dwExtendedStyle As Long
cdit As Integer
x As Integer
y As Integer
cx As Integer
cy As Integer
End Type
Private Type dlg
dlgtemp As DLGTEMPLATE
menu As Long
classname As String
title As String
End Type
Private Declare Function CreateDialogIndirectParam Lib "user32.dll" Alias "CreateDialogIndirectParamW" (ByVal hInstance As Long, ByRef lpTemplate As DLGTEMPLATE, ByVal hWndParent As Long, ByVal lpDialogFunc As Long, ByVal lParamInit As Long) As Long
'Private Declare Function EndDialog Lib "user32.dll" (ByVal hDlg As Long, ByVal nResult As Long) As Long
Private Declare Function DestroyWindow Lib "user32.dll" (ByVal hwnd As Long) As Long
Private Declare Function SetWindowText Lib "user32.dll" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long
Public Declare Function SetParent Lib "user32.dll" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Public Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Const GWL_STYLE As Long = -16
Public Const GWL_EXSTYLE As Long = -20
' Window styles. Probably don't need all of these.
Public Const WS_CHILD As Long = &H40000000
Public Const WS_POPUP As Long = &H80000000
Public Const WS_SYSMENU As Long = &H80000
Public Const WS_BORDER As Long = &H800000
Public Const WS_DISABLED As Long = &H8000000
Private Const WS_VISIBLE As Long = &H10000000
Private Const WS_CAPTION As Long = &HC00000
Public Const WS_POPUPWINDOW As Long = (WS_POPUP Or WS_BORDER Or WS_SYSMENU)
Public Const WS_EX_NOPARENTNOTIFY As Long = &H4&
Private Const WS_EX_APPWINDOW As Long = &H40000
Private Const WS_EX_CONTROLPARENT As Long = &H10000 ' Don't need
Public Declare Function GetWindowRect Lib "user32.dll" (ByVal hwnd As Long, ByRef lpRect As RECT) As Long
Public Declare Function AdjustWindowRect Lib "user32.dll" (ByRef lpRect As RECT, ByVal dwStyle As Long, ByVal bMenu As Long) As Long
Public Declare Function MoveWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Const WM_SYSCOMMAND As Long = &H112
Private Const SC_CLOSE As Long = &HF060&
Private Const WM_INITDIALOG As Long = &H110
Private Const DS_MODALFRAME As Long = &H80
Public Function MakeDialog(hwnd As Long, Optional strTitle As String = "") As Long
Dim hWndDlg As Long
Dim d As dlg
d.dlgtemp.style = DS_MODALFRAME + WS_VISIBLE + WS_CAPTION + WS_SYSMENU
d.dlgtemp.dwExtendedStyle = WS_EX_APPWINDOW + WS_EX_CONTROLPARENT
d.dlgtemp.cdit = 0
d.dlgtemp.x = 100
d.dlgtemp.y = 100
d.dlgtemp.cx = 200
d.dlgtemp.cy = 200
d.menu = 0
d.title = ""
d.classname = ""
hWndDlg = CreateDialogIndirectParam(0, d.dlgtemp, hwnd, AddressOf DlgFunc, 0)
If strTitle <> "" Then SetWindowText hWndDlg, strTitle
MakeDialog = hWndDlg
End Function
Public Function DlgFunc(ByVal hWndDlg As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case uMsg
Case WM_INITDIALOG
DlgFunc = True
Case WM_SYSCOMMAND
If wParam = SC_CLOSE Then
DoCmd.Close acForm, "Form2" ' We may get leaks here becasue of the way Access has heavily subclassed the Form
'EndDialog hwndDlg, 0& ' for modal dialogs
DestroyWindow hWndDlg
DlgFunc = True
End If
Case Else
DlgFunc = False
End Select
End Function[/blue]