250 lines
4.4 KiB
C
250 lines
4.4 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1990-1995 Microsoft Corporation
|
||
|
All rights reserved
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
pfdlg.c
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Environment:
|
||
|
|
||
|
User Mode -Win32
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include "precomp.h"
|
||
|
#pragma hdrstop
|
||
|
|
||
|
#include "client.h"
|
||
|
#include "pfdlg.h"
|
||
|
|
||
|
static const DWORD g_aHelpIDs[]=
|
||
|
{
|
||
|
IDD_PF_EF_OUTPUTFILENAME, 8810218, // Print to File: "" (Edit)
|
||
|
0, 0
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
*
|
||
|
*/
|
||
|
BOOL APIENTRY
|
||
|
PrintToFileDlg(
|
||
|
HWND hwnd,
|
||
|
WORD msg,
|
||
|
WPARAM wparam,
|
||
|
LPARAM lparam
|
||
|
)
|
||
|
{
|
||
|
switch(msg)
|
||
|
{
|
||
|
case WM_INITDIALOG:
|
||
|
return PrintToFileInitDialog(hwnd, (LPWSTR *)lparam);
|
||
|
|
||
|
case WM_COMMAND:
|
||
|
switch (LOWORD(wparam))
|
||
|
{
|
||
|
case IDOK:
|
||
|
return PrintToFileCommandOK(hwnd);
|
||
|
|
||
|
case IDCANCEL:
|
||
|
return PrintToFileCommandCancel(hwnd);
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case WM_HELP:
|
||
|
case WM_CONTEXTMENU:
|
||
|
return PrintToFileHelp(hwnd, msg, wparam, lparam);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
|
||
|
/*
|
||
|
*
|
||
|
*/
|
||
|
BOOL
|
||
|
PrintToFileInitDialog(
|
||
|
HWND hwnd,
|
||
|
LPWSTR *ppFileName
|
||
|
)
|
||
|
{
|
||
|
BringWindowToTop( hwnd );
|
||
|
|
||
|
SetFocus(hwnd);
|
||
|
|
||
|
SetWindowLongPtr( hwnd, GWLP_USERDATA, (LONG_PTR)ppFileName );
|
||
|
|
||
|
SendDlgItemMessage( hwnd, IDD_PF_EF_OUTPUTFILENAME, EM_LIMITTEXT, MAX_PATH-2, 0);
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
/*
|
||
|
*
|
||
|
*/
|
||
|
BOOL
|
||
|
PrintToFileCommandOK(
|
||
|
HWND hwnd
|
||
|
)
|
||
|
{
|
||
|
WCHAR pFileName[MAX_PATH];
|
||
|
WIN32_FIND_DATA FindData;
|
||
|
HANDLE hFile;
|
||
|
HANDLE hFind;
|
||
|
LPWSTR *ppFileName;
|
||
|
|
||
|
ppFileName = (LPWSTR *)GetWindowLongPtr( hwnd, GWLP_USERDATA );
|
||
|
|
||
|
GetDlgItemText( hwnd, IDD_PF_EF_OUTPUTFILENAME,
|
||
|
pFileName, MAX_PATH );
|
||
|
|
||
|
hFind = FindFirstFile( pFileName, &FindData );
|
||
|
|
||
|
/* If the file already exists, get the user to verify
|
||
|
* before we overwrite it:
|
||
|
*/
|
||
|
if( hFind != INVALID_HANDLE_VALUE )
|
||
|
{
|
||
|
FindClose( hFind );
|
||
|
|
||
|
if( Message( hwnd, MB_OKCANCEL | MB_ICONEXCLAMATION, IDS_LOCALMONITOR,
|
||
|
IDS_OVERWRITE_EXISTING_FILE )
|
||
|
!= IDOK )
|
||
|
{
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
hFile = CreateFile( pFileName, GENERIC_WRITE, FILE_SHARE_READ, NULL,
|
||
|
OPEN_ALWAYS,
|
||
|
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN,
|
||
|
NULL );
|
||
|
|
||
|
if( hFile != INVALID_HANDLE_VALUE )
|
||
|
{
|
||
|
LPWSTR pTempFileName;
|
||
|
WCHAR szCurrentDir[MAX_PATH];
|
||
|
WCHAR szQualifiedPath[MAX_PATH];
|
||
|
LPWSTR pszIgnore;
|
||
|
DWORD cchLen;
|
||
|
|
||
|
CloseHandle(hFile);
|
||
|
|
||
|
if (!GetCurrentDirectory(sizeof(szCurrentDir)/sizeof(szCurrentDir[0]),
|
||
|
szCurrentDir))
|
||
|
goto Fail;
|
||
|
|
||
|
cchLen = SearchPath(szCurrentDir,
|
||
|
pFileName,
|
||
|
NULL,
|
||
|
sizeof(szQualifiedPath)/sizeof(szQualifiedPath[0]),
|
||
|
szQualifiedPath,
|
||
|
&pszIgnore);
|
||
|
|
||
|
if (!cchLen)
|
||
|
goto Fail;
|
||
|
|
||
|
pTempFileName = LocalAlloc(LMEM_FIXED,
|
||
|
(cchLen + 1) * sizeof(szQualifiedPath[0]));
|
||
|
|
||
|
if (!pTempFileName)
|
||
|
goto Fail;
|
||
|
|
||
|
wcscpy(pTempFileName, szQualifiedPath);
|
||
|
*ppFileName = pTempFileName;
|
||
|
|
||
|
EndDialog( hwnd, TRUE );
|
||
|
|
||
|
} else {
|
||
|
|
||
|
Fail:
|
||
|
ReportFailure( hwnd, IDS_LOCALMONITOR, IDS_COULD_NOT_OPEN_FILE );
|
||
|
}
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/*
|
||
|
*
|
||
|
*/
|
||
|
BOOL
|
||
|
PrintToFileCommandCancel(
|
||
|
HWND hwnd
|
||
|
)
|
||
|
{
|
||
|
EndDialog(hwnd, FALSE);
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Name:
|
||
|
|
||
|
PrintToFileHelp
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Handles context sensitive help.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
UINT uMsg,
|
||
|
HWND hDlg,
|
||
|
WPARAM wParam,
|
||
|
LPARAM lParam
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
TRUE if message handled, otherwise FALSE.
|
||
|
|
||
|
--*/
|
||
|
BOOL
|
||
|
PrintToFileHelp(
|
||
|
IN HWND hDlg,
|
||
|
IN UINT uMsg,
|
||
|
IN WPARAM wParam,
|
||
|
IN LPARAM lParam
|
||
|
)
|
||
|
{
|
||
|
BOOL bStatus = FALSE;
|
||
|
|
||
|
switch( uMsg ){
|
||
|
|
||
|
case WM_HELP:
|
||
|
|
||
|
bStatus = WinHelp((HWND)((LPHELPINFO)lParam)->hItemHandle,
|
||
|
szHelpFile,
|
||
|
HELP_WM_HELP,
|
||
|
(ULONG_PTR)g_aHelpIDs );
|
||
|
break;
|
||
|
|
||
|
case WM_CONTEXTMENU:
|
||
|
|
||
|
bStatus = WinHelp((HWND)wParam,
|
||
|
szHelpFile,
|
||
|
HELP_CONTEXTMENU,
|
||
|
(ULONG_PTR)g_aHelpIDs );
|
||
|
break;
|
||
|
|
||
|
}
|
||
|
|
||
|
return bStatus;
|
||
|
}
|
||
|
|
||
|
|