VERSION 5.00
Begin VB.PropertyPage ppgViewFile 
   Caption         =   "File Viewer"
   ClientHeight    =   3600
   ClientLeft      =   0
   ClientTop       =   0
   ClientWidth     =   4800
   PaletteMode     =   0  'Halftone
   ScaleHeight     =   3600
   ScaleWidth      =   4800
   Begin FileViewerExtensionProj.ctlFileViewer ViewerCtl 
      Height          =   3615
      Left            =   0
      TabIndex        =   0
      Top             =   0
      Width           =   4815
      _ExtentX        =   8493
      _ExtentY        =   6376
   End
End
Attribute VB_Name = "ppgViewFile"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
'  ===========================================================================
' |    THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF      |
' |    ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO    |
' |    THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A         |
' |    PARTICULAR PURPOSE.                                                    |
' |    Copyright (c) 1998-1999  Microsoft Corporation                         |
'  ===========================================================================w

' =============================================================================
' File:         ppgViewFile.pag
' Project:      FileViewerExtensionProj
' Type:         Property Page
' =============================================================================

Option Explicit
Implements IMMCPropertyPage

' When the property page is part of a multiple selection this variable holds the
' index within SelectedControls() of the particular object for which the instance of
' the property page is being displayed.
Private m_Index As Integer

' MMC API DLL function declarations

Private Declare Function MMCPropertyHelp Lib "mssnapr.dll" (ByVal HelpTopic As String) As Long

' =============================================================================
' Method:       IMMCPropertyPage_Initialize
' Type:         Interface method
' Description:  Called when the property page is created to pass the last
'               parameter from MMCPropertySheet.AddPage to the property page
' Parameters:   Data          The final parameter from MMCPropertySheet.AddPage
' Output:       None
' Notes:        Store the parameter as the index of the file or folder for
'               which to display the file. Get the file name and initialize
'               the ctlFileViewer control.
'               Unlike a UserControl property page, SelectedControls(0) will
'               contain the MMCDataObject passed to
'               ExtensionSnapIn_CreatePropertyPages so that the property page
'               can access the data exported from the extended snap-in
'               (FileExplorer in this case).
' =============================================================================
'
Private Sub IMMCPropertyPage_Initialize(ByVal Data As Variant, _
                                        ByVal PropertySheet As SnapInLib.MMCPropertySheet)

    On Error GoTo ErrTrap_IMMCPropertyPage_Initialize

    Dim FileNames() As String
    Dim FileName As String
    Dim Paths() As String
    Dim Path As String
    Dim DataObj As MMCDataObject
    Dim Index As Integer
    
    ' Data is only passed when the property sheet is displayed for a multiple selection
    
    If Not VarType(Data) = vbError Then
        m_Index = Data
    End If

    Set DataObj = SelectedControls(0)

    ' If there is only one file selected then get its file name and path directly from
    ' the exported data. For multiple selection, FileExplorer exports arrays of
    ' file names and paths. Use the index stored in IMMCPropertyPage_Initialize as the
    ' index into the array (as passed to MMCPropertySheet.AddPage in
    ' ExtensionSnapIn_CreatePropertyPages).

    If DataObj.GetFormat("File") Then
        FileName = DataObj.GetData("File")
        Path = DataObj.GetData("Path")
    ElseIf DataObj.GetFormat("Files") Then
        FileNames = DataObj.FormatData(DataObj.GetData("Files"), 1, siMultiString)
        Paths = DataObj.FormatData(DataObj.GetData("Paths"), 1, siMultiString)
        Path = Paths(m_Index)
        FileName = FileNames(m_Index)
    End If

    ' Ask FileViewerCtl to display the contents of the file.

    ViewerCtl.DisplayFile Path, FileName

    Exit Sub

' Error Handler for this method
ErrTrap_IMMCPropertyPage_Initialize:
    DisplayError "IMMCPropertyPage_Initialize"

End Sub

' =============================================================================
' Method:       IMMCPropertyPage_Help
' Type:         Interface method
' Description:  Called when the user clicks the Help button on a property sheet
'
' Parameters:   None
' Output:       None
' Notes:        Calls the MMC API function MMCPropertyHelp() to display a topic
'               from FileExlporer's merged help file.
' =============================================================================
'
Private Sub IMMCPropertyPage_Help()
    MMCPropertyHelp "VBSnapInsSamples.chm::VBSnapInsSamples/VBSnapInsSamples_35.htm"
End Sub

' =============================================================================
' Method:       IMMCPropertyPage_GetDialogUnitSize
' Type:         Interface method
' Description:  Called when the property page is about to be created to allow
'               the page to specify its size in dialog units.
'
' Parameters:   None
' Output:       None
' Notes:        Returns the recommended height and width values for a snap-in
'               property page.
' =============================================================================
'
Private Sub IMMCPropertyPage_GetDialogUnitSize(Height As Variant, Width As Variant)
    Height = 218
    Width = 252
End Sub


' =============================================================================
' Method:       IMMCPropertyPage_QueryCancel
' Type:         Interface method
' Description:  Called when the user cancels the property sheet or wizard by
'               pressing Esc, clicking the Cancel button, or clicking the 'X'
'               button in the upper right corner.
'
' Parameters:   Allow - set to False to prevent the sheet or wizard from closing.
' Output:       None
' Notes:        None
' =============================================================================
'
Private Sub IMMCPropertyPage_QueryCancel(Allow As Boolean)

End Sub

' =============================================================================
' Method:       IMMCPropertyPage_Cancel
' Type:         Interface method
' Description:  Called when a property sheet or wizard is closed because the
'               user clicked the Cancel button.
'
' Parameters:   None
' Output:       None
' Notes:        None
' =============================================================================
'
Private Sub IMMCPropertyPage_Cancel()

End Sub

' =============================================================================
' Method:       IMMCPropertyPage_Close
' Type:         Interface method
' Description:  Called when a property sheet or wizard is closed because the
'               user clicked the 'X' button in the upper right corner.
'
' Parameters:   None
' Output:       None
' Notes:        None
' =============================================================================
'
Private Sub IMMCPropertyPage_Close()

End Sub

' =============================================================================
' Method:       DisplayError
' Type:         Subroutine
' Description:  A method to format and display a runtime error
' Parameters:   szLocation      A string identifying the source location
'                               (i.e. method name) where the error occurred
' Output:       None
' Notes:        The error will be displayed in a messagebox formatted as the
'               following sample:
'
'     Method:        SomeMethodName
'     Source:        MMCListSubItems
'     Error:         2527h  (9511)
'     Description:   There is already an item in the collection that has the specified key
'
' =============================================================================
'
Private Sub DisplayError(szLocation As String)
    
    MsgBox "Method:" & vbTab & vbTab & szLocation & vbCrLf _
           & "Source:" & vbTab & vbTab & Err.Source & vbCrLf _
           & "Error:" & vbTab & vbTab & Hex(Err.Number) & "h   (" & CStr(Err.Number) & ")" & vbCrLf _
           & "Description:" & vbTab & Err.Description, _
           vbCritical, "FileViewerExtension Runtime Error"
End Sub