📄 wreimg.c
字号:
if( data ) {
WREMemFree( data );
}
if( name ) {
WREMemFree( name );
}
return( ok );
}
Bool WRESetBitmapSessionResData( WREImageSession *session,
void *data, uint_32 size )
{
Bool ok;
ok = ( session != NULL );
if( ok ) {
WREStripBitmapFileHeader( (BYTE **)&data, &size );
if( session->lnode->data ) {
WREMemFree( session->lnode->data );
}
session->lnode->data = data;
session->lnode->Info.Length = size;
session->rinfo->modified = TRUE;
}
return( ok );
}
Bool WRESetCursorSessionResData( WREImageSession *session,
void *data, uint_32 size )
{
WRECurrentResInfo curr;
Bool ok;
ok = ( session != NULL );
if( ok ) {
curr.info = session->rinfo;
curr.type = session->tnode;
curr.res = session->rnode;
curr.lang = session->lnode;
if( !session->new ) {
ok = WREDeleteGroupImages( &curr, (uint_16)RT_GROUP_CURSOR );
}
}
if( ok ) {
session->rinfo->modified = TRUE;
ok = WRECreateCursorEntries( &curr, data, size );
}
return( ok );
}
Bool WRESetIconSessionResData( WREImageSession *session,
void *data, uint_32 size )
{
WRECurrentResInfo curr;
Bool ok;
ok = ( session != NULL );
if( ok ) {
curr.info = session->rinfo;
curr.type = session->tnode;
curr.res = session->rnode;
curr.lang = session->lnode;
if( !session->new ) {
ok = WREDeleteGroupImages( &curr, (uint_16)RT_GROUP_ICON );
}
}
if( ok ) {
session->rinfo->modified = TRUE;
ok = WRECreateIconEntries( &curr, data, size );
}
return( ok );
}
Bool WRESetImageSessionResData( HCONV server, HDDEDATA hdata )
{
WREImageSession *session;
void *data;
uint_32 size;
Bool ok;
ok = ( ( server != (HCONV)NULL ) && ( hdata != (HDDEDATA)NULL ) );
if( ok ) {
session = WREFindImageSession( server );
ok = ( session != NULL );
}
if( ok ) {
ok = WREHData2Mem( hdata, &data, &size );
}
if( ok ) {
if( session->type == (uint_16)RT_BITMAP ) {
ok = WRESetBitmapSessionResData( session, data, size );
} else if( session->type == (uint_16)RT_GROUP_CURSOR ) {
ok = WRESetCursorSessionResData( session, data, size );
} else if( session->type == (uint_16)RT_GROUP_ICON ) {
ok = WRESetIconSessionResData( session, data, size );
}
}
return( ok );
}
WREImageSession *WREStartImageSession( WRESPT service,
WRECurrentResInfo *curr,
Bool new )
{
WREImageSession *session;
BYTE *data;
uint_32 size;
if( !curr ) {
return( NULL );
}
session = WREAllocImageSession();
if( !session ) {
return( NULL );
}
session->new = new;
session->info.data_size = 0;
session->info.data = NULL;
data = NULL;
size = 0;
switch( service ) {
case CursorService:
if( !new && !WRECreateCursorDataFromGroup( curr, &data, &size ) ) {
return( NULL );
}
session->info.data_size = size;
session->info.data = data;
break;
case IconService:
if( !new && !WRECreateIconDataFromGroup( curr, &data, &size ) ) {
return( NULL );
}
session->info.data_size = size;
session->info.data = data;
break;
case BitmapService:
if( !new ) {
session->info.data_size = curr->lang->Info.Length;
session->info.data = curr->lang->data;
}
break;
case NoServicePending:
default:
return( NULL );
}
session->info.file_name = WREStrDup( WREGetQueryName( curr->info ) );
session->info.res_name = WRECopyWResID( &curr->res->Info.ResName );
session->info.lang = curr->lang->Info.lang;
session->info.MemFlags = curr->lang->Info.MemoryFlags;
session->info.is32bit = curr->info->is32bit;
session->type = curr->info->current_type;
session->tnode = curr->type;
session->rnode = curr->res;
session->lnode = curr->lang;
session->rinfo = curr->info;
WRESetPendingService( service );
PendingSession = session;
if( WinExec( "wimgedit.exe -dde", SW_SHOW ) < 32 ) {
WREDisplayErrorMsg( WRE_IMGEDITNOTSPAWNED );
WREFreeEditSession( session );
PendingSession = NULL;
WRESetPendingService( NoServicePending );
}
return( session );
}
Bool WREEditImageResource( WRECurrentResInfo *curr )
{
WREImageSession *session;
WRESPT service;
Bool ok;
ok = ( curr && curr->lang );
if( ok ) {
session = WREFindLangImageSession( curr->lang );
if( session ) {
WREBringSessionToFront( session );
return( TRUE );
}
}
if( ok ) {
if( curr->info->current_type == (uint_16)RT_BITMAP ) {
service = BitmapService;
} else if( curr->info->current_type == (uint_16)RT_GROUP_CURSOR ) {
service = CursorService;
} else if( curr->info->current_type == (uint_16)RT_GROUP_ICON ) {
service = IconService;
} else {
ok = FALSE;
}
}
if( ok ) {
if( !curr->lang->data && curr->lang->Info.Length ) {
curr->lang->data = WREGetCurrentResData( curr );
ok = ( curr->lang->data != NULL );
}
}
if( ok ) {
ok = ( WREStartImageSession( service, curr, FALSE ) != NULL );
}
return( ok );
}
Bool WREEndAllImageSessions( Bool fatal_exit )
{
WREImageSession *session;
LIST *slist;
Bool ok;
_wre_touch(fatal_exit);
ok = TRUE;
if( WREImageSessions ) {
for( slist = WREImageSessions; ok && slist; slist = ListNext(slist) ) {
session = (WREImageSession *) ListElement(slist);
if( session ) {
WREDisconnectSession( session );
WREFreeEditSession( session );
}
}
if( ok ) {
ListFree( WREImageSessions );
WREImageSessions = NULL;
}
}
return( ok );
}
void WREEndLangImageSession( WResLangNode *lnode )
{
WREImageSession *session;
session = WREFindLangImageSession( lnode );
while( session ) {
WREDisconnectSession( session );
WRERemoveImageEditSession( session );
session = WREFindLangImageSession( lnode );
}
}
void WREEndResImageSessions( WREResInfo *rinfo )
{
WREImageSession *session;
session = WREFindResImageSession( rinfo );
while( session ) {
WREDisconnectSession( session );
WRERemoveImageEditSession( session );
session = WREFindResImageSession( rinfo );
}
}
WREImageSession *WREAllocImageSession( void )
{
WREImageSession *session;
session = (WREImageSession *) WREMemAlloc( sizeof(WREImageSession) );
if( session ) {
memset( session, 0, sizeof(WREImageSession) );
}
return( session );
}
WREImageSession *WREFindImageSession( HCONV conv )
{
WREImageSession *session;
LIST *slist;
for( slist = WREImageSessions; slist; slist = ListNext(slist) ) {
session = (WREImageSession *) ListElement(slist);
if( ( session->server == conv ) || ( session->client == conv ) ) {
return( session );
}
}
return( NULL );
}
WREImageSession *WREFindResImageSession( WREResInfo *rinfo )
{
WREImageSession *session;
LIST *slist;
for( slist = WREImageSessions; slist; slist = ListNext(slist) ) {
session = (WREImageSession *) ListElement(slist);
if( session->rinfo == rinfo ) {
return( session );
}
}
return( NULL );
}
WREImageSession *WREFindLangImageSession( WResLangNode *lnode )
{
WREImageSession *session;
LIST *slist;
for( slist = WREImageSessions; slist; slist = ListNext(slist) ) {
session = (WREImageSession *) ListElement(slist);
if( session->lnode == lnode ) {
return( session );
}
}
return( NULL );
}
void WRERemoveImageEditSession( WREImageSession *session )
{
if( session ) {
ListRemoveElt( &WREImageSessions, session );
WREFreeEditSession( session );
}
}
void WREFreeEditSession( WREImageSession *session )
{
if( session ) {
if( session->info.file_name ) {
WREMemFree( session->info.file_name );
}
if( session->info.res_name ) {
WREMemFree( session->info.res_name );
}
WREMemFree( session );
}
}
void WREDisconnectSession( WREImageSession *session )
{
if( session ) {
WREPokeImageCmd( session, "endsession", TRUE );
DumpEmptyResource( session );
if( session->server != (HCONV)NULL ) {
DdeDisconnect( session->server );
session->server = (HCONV)NULL;
}
if( session->client != (HCONV)NULL ) {
DdeDisconnect( session->client );
session->client = (HCONV)NULL;
}
}
}
void WREBringSessionToFront( WREImageSession *session )
{
WREPokeImageCmd( session, "bringtofront", FALSE );
}
void WREShowAllImageSessions( Bool show )
{
WREImageSession *session;
LIST *slist;
if( WREImageSessions ) {
for( slist = WREImageSessions; slist; slist = ListNext(slist) ) {
session = (WREImageSession *) ListElement(slist);
if( session ) {
WREShowSession( session, show );
}
}
}
}
void WREShowSession( WREImageSession *session, Bool show )
{
if( show ) {
WREPokeImageCmd( session, "show", FALSE );
} else {
WREPokeImageCmd( session, "hide", FALSE );
}
}
void WREPokeImageCmd( WREImageSession *session, char *cmd, Bool retry )
{
if( session && cmd ) {
WREPokeData( session->client, cmd, strlen(cmd) + 1, retry );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -