/*---------------------------------------------------------------------------- | | tools.c | ---------------------------------------------------------------------------*/ #include "precomp.h" #include "demo.h" /*---------------------------------------------------------------------------- | | StatusBarText | ---------------------------------------------------------------------------*/ L_VOID StatusBarText ( const L_CHAR *pszMessage, ... ) { #define BUF_SIZE (4096) static L_CHAR szBuffer[ BUF_SIZE ] = ""; va_list ap; if( pszMessage ) { va_start( ap, pszMessage ); vsprintf( szBuffer, pszMessage, ap ); va_end( ap ); } else strcpy( szBuffer, "" ); SendMessage( g_hWndStatus, SB_SETTEXTA, 0, (LPARAM) szBuffer ); } /*---------------------------------------------------------------------------- | | ShowMessageBox | ---------------------------------------------------------------------------*/ L_INT ShowMessageBox ( L_BOOL bLastError, L_UINT uType, const L_TCHAR *pszMessage, ... ) { #define BUF_SIZE (4096) static const L_TCHAR szUnknownError[] = TEXT("Unknown error."); static L_TCHAR szBuffer[ BUF_SIZE ] = TEXT(""); static L_TCHAR szTemp[ BUF_SIZE ] = TEXT(""); L_UINT32 dwLastError; L_TCHAR *pszLastErrorMessage; L_UINT32 cbSize; HWND hWndFocus; L_INT nRet; va_list ap; if( pszMessage ) { va_start( ap, pszMessage ); #ifdef UNICODE vswprintf( szBuffer, pszMessage, ap ); #else vsprintf( szBuffer, pszMessage, ap ); #endif va_end( ap ); } else lstrcpy( szBuffer, TEXT("") ); if( bLastError ) { dwLastError = GetLastError(); pszLastErrorMessage = NULL; cbSize = FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, dwLastError, 0L, (L_TCHAR*) pszLastErrorMessage, BUF_SIZE / 2, NULL ); if( !cbSize ) SetLastError( dwLastError ); if( szBuffer[ 0 ] != '\0' ) { wsprintf( szTemp, TEXT("%s\n\n%s"), szBuffer, pszLastErrorMessage ? pszLastErrorMessage : szUnknownError ); lstrcpy( szBuffer, szTemp ); } else lstrcpy( szBuffer, pszLastErrorMessage ? pszLastErrorMessage : szUnknownError ); if( pszLastErrorMessage ) LocalFree( pszLastErrorMessage ); } hWndFocus = GetFocus(); nRet = MessageBox( g_hWndFrame, szBuffer, g_szTitle, uType ); if( hWndFocus && IsWindow( hWndFocus ) ) SetFocus( hWndFocus ); return nRet; } /*---------------------------------------------------------------------------- | | ShowFileError | ---------------------------------------------------------------------------*/ L_VOID ShowLeadError ( L_INT nCode, const L_TCHAR *pszTitle, const L_TCHAR *pszFilename ) { L_TCHAR szErrorBuf[ 80 ]; switch( nCode ) { case ERROR_NO_MEMORY: wsprintf( szErrorBuf, TEXT("Not enough memory available!") ); break; case ERROR_NO_BITMAP: wsprintf( szErrorBuf, TEXT("Invalid bitmap handle!") ); break; case ERROR_MEMORY_TOO_LOW: wsprintf( szErrorBuf, TEXT("Not enough memory available!") ); break; case ERROR_FILE_LSEEK: wsprintf( szErrorBuf, TEXT("Error seeking to position!") ); break; case ERROR_FILE_WRITE: wsprintf( szErrorBuf, TEXT("Error writing file!") ); break; case ERROR_FILE_GONE: wsprintf( szErrorBuf, TEXT("File not present - abort!") ); break; case ERROR_FILE_READ: wsprintf( szErrorBuf, TEXT("Error reading file!") ); break; case ERROR_INV_FILENAME: wsprintf( szErrorBuf, TEXT("Invalid filename specified!") ); break; case ERROR_FILE_FORMAT: wsprintf( szErrorBuf,TEXT("Invalid file format!") ); break; case ERROR_FILENOTFOUND: wsprintf( szErrorBuf, TEXT("File not found!") ); break; case ERROR_INV_RANGE: wsprintf( szErrorBuf, TEXT("Invalid width/height!") ); break; case ERROR_IMAGE_TYPE: wsprintf( szErrorBuf, TEXT("Image format recognized, but sub-type not supported!") ); break; case ERROR_INV_PARAMETER: wsprintf( szErrorBuf, TEXT("Invalid parmameter!") ); break; case ERROR_FILE_OPEN: wsprintf( szErrorBuf, TEXT("Not able to open file!") ); break; case ERROR_UNKNOWN_COMP: wsprintf( szErrorBuf, TEXT("Unknown compression format!") ); break; case ERROR_FEATURE_NOT_SUPPORTED: wsprintf( szErrorBuf, TEXT("Feature not supported!") ); break; case ERROR_NOT_256_COLOR: wsprintf( szErrorBuf, TEXT("VGA card only supports 256 colors (8 bit)!") ); break; case ERROR_PRINTER: wsprintf( szErrorBuf, TEXT("Printer error!") ); break; case ERROR_CRC_CHECK: wsprintf( szErrorBuf, TEXT("Data CRC check error!") ); break; case ERROR_QFACTOR: wsprintf( szErrorBuf, TEXT("Invalid QFactor specified!") ); break; case ERROR_TARGAINSTALL: wsprintf( szErrorBuf, TEXT("TARGA not installed!") ); break; case ERROR_OUTPUTTYPE: wsprintf( szErrorBuf, TEXT("Invalid compression format!") ); break; case ERROR_XORIGIN: wsprintf( szErrorBuf, TEXT("X origin specified invalid!") ); break; case ERROR_YORIGIN: wsprintf( szErrorBuf, TEXT("Y origin specified invalid!") ); break; case ERROR_VIDEOTYPE: wsprintf( szErrorBuf, TEXT("Invalid video mode!") ); break; case ERROR_BITPERPIXEL: wsprintf( szErrorBuf, TEXT("Invalid bits/pixel!") ); break; case ERROR_WINDOWSIZE: wsprintf( szErrorBuf, TEXT("Invalid window size!") ); break; case ERROR_NORMAL_ABORT: wsprintf( szErrorBuf, TEXT("Escape key pressed!") ); break; case ERROR_NO_STAMP: wsprintf( szErrorBuf, TEXT("Stamp not found!") ); break; case ERROR_G3CODE_INVALID: wsprintf( szErrorBuf, TEXT("Invalid group 3 data!") ); break; case ERROR_G3CODE_EOF: case ERROR_G3CODE_EOL: wsprintf( szErrorBuf, TEXT("Group3 code end of code!") ); break; case ERROR_PREMATURE_EOF: wsprintf( szErrorBuf, TEXT("Premature EOF at scanline!") ); break; case ERROR_PREMATURE_EOL: case ERROR_UNCOMP_EOF: case ERROR_ACT_INCOMP: case ERROR_BAD_DECODE_STATE: wsprintf( szErrorBuf, TEXT("Premature end-of-line code!") ); break; case ERROR_VERSION_NUMBER: wsprintf( szErrorBuf, TEXT("Bad version number!") ); break; case ERROR_TWAIN_NODSM: wsprintf( szErrorBuf, TEXT("Source manager not found!") ); break; case ERROR_TWAIN_BUMMER: wsprintf( szErrorBuf, TEXT("Failure due to unknown causes!") ); break; case ERROR_TWAIN_LOWMEMORY: wsprintf( szErrorBuf, TEXT("Not enough memory to perform operation!") ); break; case ERROR_TWAIN_NODS: wsprintf( szErrorBuf, TEXT("No Data Source!") ); break; case ERROR_TWAIN_MAXCONNECTIONS: wsprintf( szErrorBuf, TEXT("DS is connected to max possible apps!") ); break; case ERROR_TWAIN_OPERATIONERROR: wsprintf( szErrorBuf, TEXT("DS or DSM reported error, app shouldn't!") ); break; case ERROR_TWAIN_BADCAP: wsprintf( szErrorBuf, TEXT("Unknown capability!") ); break; case ERROR_TWAIN_BADPROTOCOL: wsprintf( szErrorBuf, TEXT("Unrecognized MSG DG DAT combination!") ); break; case ERROR_TWAIN_BADVALUE: wsprintf( szErrorBuf, TEXT("Data parameter out of range!") ); break; case ERROR_TWAIN_SEQERROR: wsprintf( szErrorBuf, TEXT("DG DAT MSG out of expected sequence!") ); break; case ERROR_TWAIN_BADDEST: wsprintf( szErrorBuf, TEXT("Unknown destination App/Src in DSM_Entry!") ); break; case ERROR_TWAIN_CANCEL: wsprintf( szErrorBuf, TEXT("Operation was cancelled!") ); break; case ERROR_IMAGE_EMPTY: wsprintf( szErrorBuf, TEXT("Image is empty!") ); break; case ERROR_NO_CHANGE: wsprintf( szErrorBuf, TEXT("The image hasn't changed!") ); break; case ERROR_DOCUMENT_NOT_ENABLED: wsprintf( szErrorBuf, TEXT("Document capability is required to use this function!") ); break; case ERROR_FPX_FILE_IN_USE: wsprintf( szErrorBuf, TEXT("Error accessing file. The file is probably already open!") ); break; case ERROR_VECTOR_NOT_ENABLED: wsprintf( szErrorBuf, TEXT("Vector toolkit not enabled!") ); break; case ERROR_VECTOR_IS_LOCKED: wsprintf( szErrorBuf, TEXT("Vector handle is locked!") ); break; case ERROR_VECTOR_IS_EMPTY: wsprintf( szErrorBuf, TEXT("Vector is empty!") ); break; case ERROR_VECTOR_LAYER_NOT_FOUND: wsprintf( szErrorBuf, TEXT("Layer is not found!") ); break; case ERROR_VECTOR_LAYER_IS_LOCKED: wsprintf( szErrorBuf, TEXT("Layer is locked!") ); break; case ERROR_VECTOR_LAYER_ALREADY_EXISTS: wsprintf( szErrorBuf, TEXT("Layer already exists!") ); break; case ERROR_VECTOR_OBJECT_NOT_FOUND: wsprintf( szErrorBuf, TEXT("Object is not found!") ); break; case ERROR_VECTOR_INVALID_OBJECT_TYPE: wsprintf( szErrorBuf, TEXT("Invalid object type!") ); break; case ERROR_VECTOR_PEN_NOT_FOUND: wsprintf( szErrorBuf, TEXT("Pen is not found!") ); break; case ERROR_VECTOR_BRUSH_NOT_FOUND: wsprintf( szErrorBuf, TEXT("Brush is not found!") ); break; case ERROR_VECTOR_FONT_NOT_FOUND: wsprintf( szErrorBuf, TEXT("Font is not found!") ); break; case ERROR_VECTOR_BITMAP_NOT_FOUND: wsprintf( szErrorBuf, TEXT("Bitmap is not found!") ); break; case ERROR_VECTOR_POINT_NOT_FOUND: wsprintf( szErrorBuf, TEXT("Point is not found!") ); break; case ERROR_VECTOR_ENGINE_NOT_FOUND: wsprintf( szErrorBuf, TEXT("Vector engine not found!") ); break; case ERROR_VECTOR_INVALID_ENGINE: wsprintf( szErrorBuf, TEXT("Invalid vector engine!") ); break; case ERROR_VECTOR_CLIPBOARD: wsprintf( szErrorBuf, TEXT("Clipboard error!") ); break; case ERROR_VECTOR_CLIPBOARD_IS_EMPTY: wsprintf( szErrorBuf, TEXT("Clipboard is empty!") ); break; case ERROR_VECTOR_CANT_ADD_TEXT: wsprintf( szErrorBuf, TEXT("Cannot add text!") ); break; case ERROR_VECTOR_CANT_READ_WMF: wsprintf( szErrorBuf, TEXT("Cannot read WMF!") ); break; case ERROR_VECTOR_GROUP_NOT_FOUND: wsprintf( szErrorBuf, TEXT("Group is not found!") ); break; case ERROR_VECTOR_GROUP_ALREADY_EXISTS: wsprintf( szErrorBuf, TEXT("Group already exists!") ); break; case ERROR_USER_ABORT: case SUCCESS_DLG_CANCEL: return; break; default: wsprintf( szErrorBuf, TEXT("Internal or Unrecognized Error!")); break; } if( pszFilename && pszTitle ) ShowMessageBox( FALSE, MB_ICONEXCLAMATION, TEXT("%s\nFile Name:\n%s\n\nError %d\n%s"), pszTitle, pszFilename, nCode, szErrorBuf ); else ShowMessageBox( FALSE, MB_ICONEXCLAMATION, TEXT("Error %d\n%s"), nCode, szErrorBuf ); } /*---------------------------------------------------------------------------- | | DoDialogBoxParam | ---------------------------------------------------------------------------*/ L_INT DoDialogBoxParam ( L_INT nDialog, HWND hWnd, DLGPROC pfnDialog, LPARAM lParam ) { HWND hWndFocus; L_INT nRet; hWndFocus = GetFocus(); nRet = DialogBoxParam( g_hInstance, MAKEINTRESOURCE( nDialog ), hWnd, pfnDialog, lParam ); if( hWndFocus && IsWindow( hWndFocus ) ) SetFocus( hWndFocus ); return nRet; } /*---------------------------------------------------------------------------- | | Hourglass | ---------------------------------------------------------------------------*/ L_VOID Hourglass ( L_BOOL bHourglass ) { static HCURSOR hCursor = NULL; if( bHourglass ) hCursor = SetCursor( LoadCursor( NULL, IDC_WAIT ) ); else SetCursor( hCursor ); } /*---------------------------------------------------------------------------- | | SetMyDlgItemDouble | ---------------------------------------------------------------------------*/ L_VOID SetMyDlgItemDouble ( HWND hWnd, L_UINT uId, L_DOUBLE Value ) { L_TCHAR szBuffer[ 80 ]; #ifdef UNICODE swprintf( szBuffer, TEXT("%Lf"), Value ); #else sprintf( szBuffer, "%Lf", Value ); #endif SetWindowText( GetDlgItem( hWnd, uId ), szBuffer ); } /*---------------------------------------------------------------------------- | | GetMyDlgItemDouble | ---------------------------------------------------------------------------*/ L_BOOL GetMyDlgItemDouble ( HWND hWnd, L_UINT uId, L_DOUBLE *pValue ) { L_TCHAR szBuffer[ 80 ]; L_DOUBLE Value; GetWindowText( GetDlgItem( hWnd, uId ), szBuffer, sizeof( szBuffer ) ); #ifdef UNICODE if( EOF == swscanf( szBuffer, TEXT("%Lf"), &Value ) ) #else if( EOF == sscanf( szBuffer, "%Lf", &Value ) ) #endif { MessageBeep( 0 ); SetFocus( GetDlgItem( hWnd, uId ) ); return FALSE; } *pValue = Value; return TRUE; } /* EOF ----------------------------------------------------------------------*/