📄 iesave.c
字号:
MemFree (img_file);
MemFree (imginfo);
AllowRestoreOption( node );
SetIsSaved( node->hwnd, TRUE );
return( TRUE );
} /* saveImgToData */
static BOOL CreateNewImageLNODE( img_node *node, uint_16 type )
{
char fn[_MAX_FNAME];
WResID *tname;
WResID *rname;
WResLangType lang;
int dup;
BOOL ok;
lang.lang = DEF_LANG;
lang.sublang = DEF_SUBLANG;
ok = ( node && node->wrinfo );
if( ok ) {
if( node->wrinfo->dir == NULL ) {
node->wrinfo->dir = WResInitDir();
ok = ( node->wrinfo->dir != NULL );
}
}
if( ok ) {
tname = WResIDFromNum( type );
ok = ( tname != NULL );
}
if( ok ) {
_splitpath( node->fname, NULL, NULL, fn, NULL );
rname = WResIDFromStr( fn );
ok = ( rname != NULL );
}
if( ok ) {
ok = !WResAddResource( tname, rname, DEF_MEMFLAGS, 0, 0,
node->wrinfo->dir, &lang, &dup ) && !dup;
}
if( ok ) {
node->lnode = WRFindLangNode( node->wrinfo->dir, tname, rname, &lang );
ok = ( node->lnode != NULL );
}
if( tname != NULL ) {
MemFree( tname );
}
if( rname != NULL ) {
MemFree( rname );
}
return( ok );
}
static BOOL SaveResourceFile( img_node *node )
{
BYTE *data;
uint_32 size;
uint_16 type;
WRFileType save_type;
BOOL info_created;
BOOL was32bit;
BOOL is32bit;
BOOL ok;
WPI_PROC cb;
info_created = FALSE;
data = NULL;
type = 0;
ok = ( node != NULL );
if( ok ) {
switch( node->imgtype ) {
case BITMAP_IMG:
type = (uint_16)RT_BITMAP;
break;
case ICON_IMG:
type = (uint_16)RT_GROUP_ICON;
break;
case CURSOR_IMG:
type = (uint_16)RT_GROUP_CURSOR;
break;
default:
ok = FALSE;
}
}
if( ok ) {
if( node->wrinfo == NULL ) {
node->wrinfo = WRAllocWRInfo();
info_created = TRUE;
ok = ( node->wrinfo != NULL );
}
}
if( ok ) {
if( info_created ) {
ok = CreateNewImageLNODE( node, type );
}
ok = ( ok && ( node->lnode != NULL ) );
}
if( ok ) {
was32bit = WRIs32Bit( node->wrinfo->file_type );
while( TRUE ) {
cb = _wpi_makeprocinstance( (WPI_PROC)IEHelpCallBack, Instance );
save_type = WRSelectFileType( HMainWindow, node->fname, was32bit, TRUE, cb );
_wpi_freeprocinstance( cb );
is32bit = WRIs32Bit( save_type );
if( was32bit ) {
if( is32bit ) {
break;
} else {
IEDisplayErrorMsg( WIE_SAVEIMAGETITLE2, WIE_NOSAVE32TO16,
MB_ICONSTOP | MB_OK );
}
} else {
if( is32bit ) {
IEDisplayErrorMsg( WIE_SAVEIMAGETITLE2, WIE_NOSAVE16TO32,
MB_ICONSTOP | MB_OK );
} else {
break;
}
}
}
ok = ( save_type != WR_DONT_KNOW );
}
// get rid of the old image resources for icons or cursors
if( ok ) {
if( type != (uint_16)RT_BITMAP ) {
ok = WRDeleteGroupImages( node->wrinfo, node->lnode, type );
}
}
if( ok ) {
// delete the data image of the resource
if( node->lnode->data != NULL ) {
MemFree( node->lnode->data );
node->lnode->data = NULL;
}
// create the data for this resource
switch( node->imgtype ) {
case BITMAP_IMG:
ok = saveBitmapToData( node, &data, &size );
break;
case ICON_IMG:
case CURSOR_IMG:
ok = saveImgToData( node, &data, &size );
break;
default:
ok = FALSE;
}
}
// massage and add the data back into the resource
if( ok ) {
switch( node->imgtype ) {
case BITMAP_IMG:
ok = WRStripBitmapFileHeader( &data, &size );
if( ok ) {
node->lnode->data = data;
node->lnode->Info.Length = size;
}
break;
case ICON_IMG:
ok = WRCreateIconEntries( node->wrinfo, node->lnode,
data, size );
break;
case CURSOR_IMG:
ok = WRCreateCursorEntries( node->wrinfo, node->lnode,
data, size );
break;
default:
ok = FALSE;
}
}
if( ok ) {
node->wrinfo->save_type = save_type;
node->wrinfo->save_name = node->fname;
ok = WRSaveResource( node->wrinfo, TRUE );
node->wrinfo->save_name = NULL;
}
if( ok ) {
AllowRestoreOption( node );
SetIsSaved( node->hwnd, TRUE );
PrintHintTextByID( WIE_IMAGESAVEDTO, node->fname );
}
if( type != (uint_16)RT_BITMAP ) {
if( data ) {
MemFree( data );
}
}
return( ok );
}
/*
* SaveFileFromNode - Saves the image file (bitmap, cursor or icon).
*/
BOOL SaveFileFromNode( img_node *node, short how )
{
img_node *rootnode;
char new_name[ _MAX_PATH ];
char ext[ _MAX_EXT ];
if (!node) return(FALSE);
rootnode = GetImageNode( node->hwnd );
if( !rootnode ) return( FALSE );
if( strnicmp( rootnode->fname, IEImageUntitled, strlen( IEImageUntitled ) ) == 0 ) {
how = SB_SAVE_AS;
}
if( how == SB_SAVE_AS ) {
if( !getSaveFName( new_name, rootnode->imgtype ) ) {
return( FALSE );
}
node = rootnode;
while( node ) {
strcpy( node->fname, new_name );
node = node->nexticon;
}
}
checkForExt( rootnode );
_splitpath( rootnode->fname, NULL, NULL, NULL, ext );
if( !stricmp(ext, ".res") || !stricmp(ext, ".exe") ||
!stricmp(ext, ".dll") ) {
return( SaveResourceFile( rootnode ) );
}
switch( rootnode->imgtype ) {
case BITMAP_IMG:
if (!saveBitmapFile( rootnode )) {
return(FALSE);
}
break;
case ICON_IMG:
case CURSOR_IMG:
if (!saveImgFile( rootnode )) {
return(FALSE);
}
break;
default:
return (FALSE);
}
return(TRUE);
} /* SaveFileFromNode */
/*
* SaveFile - Saves the image file (bitmap, cursor or icon).
*/
BOOL SaveFile( short how )
{
img_node *node;
node = GetCurrentNode();
return( SaveFileFromNode( node, how ) );
} /* SaveFile */
/*
* getSavePalName - Get the name of the palette file to be saved.
*/
static BOOL getSavePalName( char *fname )
{
static OPENFILENAME of;
char szFileTitle[_MAX_PATH];
int rc;
long of_size;
of_size = sizeof( OPENFILENAME );
#if defined (__NT__) && (WINVER >= 0x0500) && (_WIN32_WINNT >= 0x0500)
{
OSVERSIONINFO os_info;
os_info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(os_info);
if ( os_info.dwMajorVersion < 5 ) {
of_size = OPENFILENAME_SIZE_VERSION_400;
/* WIN32 major version < 5 detected */
/* See OPENFILENAME doc on www.msdn.com */
/* Added as future proofing... */
}
}
#endif
fname[ 0 ] = 0;
memset( &of, 0, of_size);
of.lStructSize = of_size;
of.hwndOwner = HMainWindow;
of.lpstrFilter = (LPSTR)IEPaletteFilter;
of.nFilterIndex = 0L;
of.lpstrFile = fname;
of.nMaxFile = _MAX_PATH;
of.lpstrFileTitle = szFileTitle;
of.nMaxFileTitle = sizeof(szFileTitle);
of.lpstrTitle = IESavePaletteTitle;
of.lpstrInitialDir = initialDir;
of.Flags = OFN_SHOWHELP | OFN_OVERWRITEPROMPT;
#if !defined(__NT__)
of.Flags |= OFN_ENABLEHOOK;
of.lpfnHook = (LPVOID) MakeProcInstance( (LPVOID) SaveHook, Instance );
#endif
rc = GetSaveFileName( &of );
#ifndef __NT__
FreeProcInstance( (LPVOID) of.lpfnHook );
#endif
return( rc );
} /* getSavePalName */
/*
* SaveColourPalette - saves the current colour palette.
*/
BOOL SaveColourPalette( void )
{
a_pal_file pal_file;
FILE *fp;
char fname[ _MAX_PATH ];
char filename[ _MAX_FNAME + _MAX_EXT ];
if ( !GetPaletteFile(&pal_file) ) {
WImgEditError( WIE_ERR_PALETTE_NOT16, NULL );
return(TRUE); // Just return ... no error
}
if ( !getSavePalName(fname) ) {
return( FALSE );
}
checkForPalExt(fname);
GetFnameFromPath( fname, filename );
fp = fopen( fname, "wb" );
if (fp == NULL) {
WImgEditError( WIE_ERR_SAVE_FAIL, filename );
return(FALSE);
}
if (fseek( fp, 0L, SEEK_SET )) {
WImgEditError( WIE_ERR_SAVE_FAIL, filename );
return(FALSE);
}
if ( fwrite(&pal_file, sizeof(a_pal_file), 1, fp) != 1 ) {
WImgEditError( WIE_ERR_SAVE_FAIL, filename );
return(FALSE);
}
fclose( fp );
PrintHintTextByID( WIE_PALETTESAVEDTO, filename );
return(TRUE);
} /* SaveColourPalette */
/*
* SetInitialSaveDir - sets the initial directory for the open filename
*/
void SetInitialSaveDir( char *new_dir )
{
if (new_dir) {
strcpy( initialDir, new_dir );
} else {
strcpy( initialDir, "" );
}
} /* SetInitialSaveDir */
/*
* GetInitSaveDir - gets the directory which we want to use as our initial one
* next time we run.
*/
char *GetInitSaveDir( void )
{
return(initialDir);
} /* GetInitSaveDir */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -