/*++ 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; }