📄 ide_misc.c
字号:
/*******************************************************/ /* "C" Language Integrated Production System */ /* */ /* A Product Of The */ /* Software Technology Branch */ /* NASA - Johnson Space Center */ /* */ /* CLIPS Version 6.00 01/01/93 */ /* IDE Text Editor 1.00 01/01/93 */ /* */ /* PRINT MODULE */ /*******************************************************//**************************************************************//* Purpose: Handle Dialogs, File I/O, and Printing. *//* *//* Principal Programmer(s): *//* Christopher J. Ortiz *//* *//* Contributing Programmer(s): *//* Sample Code from Microsoft SDK *//* Sample Code from Borland C++ *//* *//* Revision History: *//* *//**************************************************************/#include <windows.h>#include <commdlg.h>#include <io.h>#include <stdio.h>#include <string.h>#include <stdlib.h> // GDR#include "ide_ids.h"#include "ide_main.h"#include "ide_misc.h"#if ! WIN_32 #include <print.h>#endifPRINTDLG pd;BOOL bAbort = NULL;HWND hAbortDlgWnd = NULL;/******************************************************************* SaveFile: This saves the current contents of the Edit buffer*******************************************************************/BOOL SaveFile(hWnd) HWND hWnd;{ extern HWND hEditWnd; HANDLE hSaveCursor; extern HANDLE hHourGlass; // extern HANDLE hEditBuffer; int text_length; // GDR char *pEditBuffer; BOOL bSuccess; int IOStatus; extern HFILE hFile; // GDR extern OFSTRUCT OfStruct; extern char szFileName[]; if ((hFile = OpenFile(szFileName, &OfStruct, OF_CANCEL | OF_CREATE)) < 0) { extern char szTemp[]; /*---------------------------+ | If the file can't be saved | +---------------------------*/ sprintf(szTemp, "Cannot write to %s.", szFileName); MessageBox(hWnd, szTemp, NULL, MB_OK | MB_ICONHAND); return (FALSE); } // Begin GDR // hEditBuffer = (HANDLE)SendMessage(hEditWnd, EM_GETHANDLE, 0, 0L); // pEditBuffer = LocalLock(hEditBuffer); text_length = SendMessage(hEditWnd,WM_GETTEXTLENGTH,0,0); pEditBuffer = malloc(text_length+1); if (pEditBuffer == NULL) { extern char szTemp[]; sprintf(szTemp, "Not enough memory to save %s.", szFileName); MessageBox(hWnd, szTemp, NULL, MB_OK | MB_ICONHAND); _lclose(hFile); return (FALSE); } SendMessage(hEditWnd,WM_GETTEXT,text_length+1, (LPARAM) pEditBuffer); // End GDR /*--------------------------------------------------------+ | Set the cursor to an hourglass during the file transfer | +--------------------------------------------------------*/ hSaveCursor = SetCursor(hHourGlass); // Begin GDR IOStatus = _lwrite(hFile, pEditBuffer, strlen(pEditBuffer)); // close(hFile); _lclose(hFile); // End GDR SetCursor(hSaveCursor); if (IOStatus != (int) strlen(pEditBuffer)) { extern char szTemp[]; sprintf(szTemp, "Error writing to %s.", szFileName); MessageBox(hWnd, szTemp, NULL, MB_OK | MB_ICONHAND); bSuccess = FALSE; } else { extern BOOL bChanges; bSuccess = TRUE; /* Indicates the file was saved */ bChanges = FALSE; /* Indicates changes have been saved */ SendMessage(hEditWnd,EM_SETMODIFY, (WPARAM) (UINT) FALSE, (LPARAM) 0); } // Begin GDR // LocalUnlock(hEditBuffer); free(pEditBuffer); // End GDR return (bSuccess);}/******************************************************************* QuerySaveFile: Called when some action might lose current contents*******************************************************************/BOOL QuerySaveFile(hWnd,cancel) HWND hWnd; short *cancel; { int Response; extern BOOL bChanges; *cancel = FALSE; if (bChanges) { extern char szTemp[]; extern char szFileName[]; sprintf(szTemp, "Save current changes: %s", szFileName); Response = MessageBox(hWnd, szTemp, "EditFile", MB_YESNOCANCEL | MB_ICONEXCLAMATION); if (Response == IDYES) { /*-----------------------------------------+ | Make sure there is a filename to save to | +-----------------------------------------*/ while (!szFileName[0]) { extern OPENFILENAME ofn; if (! GetSaveFileName ((LPOPENFILENAME)&ofn)) { return FALSE; } } SaveFile(hWnd); } else if (Response == IDCANCEL) { *cancel = TRUE; return (FALSE); } } return ( TRUE ); }/******************************************************************* SetNewBuffer: Set new buffer for edit window*******************************************************************/void SetNewBuffer(hWnd, Title) HWND hWnd; // HANDLE hNewBuffer; char *Title;{ extern HWND hEditWnd; extern BOOL bChanges; // HANDLE hOldBuffer; // hOldBuffer = (HANDLE)SendMessage(hEditWnd, EM_GETHANDLE, 0, 0L); // LocalFree(hOldBuffer); /*----------------------------------+ | Allocates a buffer if none exists | +----------------------------------*/ // if (!hNewBuffer) // hNewBuffer = LocalAlloc(LMEM_MOVEABLE | LMEM_ZEROINIT, 1); /*-------------------------------------------+ | Updates the buffer and displays new buffer | +-------------------------------------------*/ // SendMessage(hEditWnd, EM_SETHANDLE, hNewBuffer, 0L); //SendMessage(hEditWnd, EM_SETHANDLE, // (WPARAM) hNewBuffer, 0L); // GDR SetWindowText(hWnd, Title); SetFocus(hEditWnd); bChanges = FALSE;}/******************************************************************* GetPrinterDC: Get hDc for current device on current output port* according to info in WIN.INI.*******************************************************************/HDC GetPrinterDC(void){ HDC hDC; LPDEVMODE lpDevMode = NULL; LPDEVNAMES lpDevNames; LPSTR lpszDriverName; LPSTR lpszDeviceName; LPSTR lpszPortName; if (!PrintDlg((LPPRINTDLG)&pd)) return(NULL); if (pd.hDC) { hDC = pd.hDC; } else { if (!pd.hDevNames) return(NULL); lpDevNames = (LPDEVNAMES)GlobalLock(pd.hDevNames); lpszDriverName = (LPSTR)lpDevNames + lpDevNames->wDriverOffset; lpszDeviceName = (LPSTR)lpDevNames + lpDevNames->wDeviceOffset; lpszPortName = (LPSTR)lpDevNames + lpDevNames->wOutputOffset; GlobalUnlock(pd.hDevNames); if (pd.hDevMode) lpDevMode = (LPDEVMODE)GlobalLock(pd.hDevMode); hDC = CreateDC(lpszDriverName, lpszDeviceName, lpszPortName, lpDevMode); if (pd.hDevMode && lpDevMode) GlobalUnlock(pd.hDevMode); } if (pd.hDevNames) { GlobalFree(pd.hDevNames); pd.hDevNames=NULL; } if (pd.hDevMode) { GlobalFree(pd.hDevMode); pd.hDevMode=NULL; } return(hDC);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -