📄 wreres.c
字号:
}
ok = ( filter && title );
if( ok ) {
gf.file_name = NULL;
gf.title = title;
gf.filter = filter;
gf.save_ext = FALSE;
ok = ( ( name = WREGetOpenFileName( &gf ) ) != NULL );
}
if( ok ) {
ok = ( (res_info = WRELoadResource( name ) ) != NULL );
}
if( ok ) {
WREFindAndLoadSymbols( res_info );
ok = WRECreateResourceWindow( res_info );
}
if( ok ) {
ListAddElt( &WREResList, (void *)res_info );
}
if( ok ) {
ok = ( WREFindTypeNode( res_info->info->dir, type, NULL ) != NULL );
}
if( ok ) {
ok = WRESetResNamesFromType( res_info, type, FALSE, NULL, 0 );
}
if( ok ) {
ok = WREHandleResEdit();
}
if( ok ) {
SendMessage( old_info->res_win, WM_CLOSE, 0, 0 );
}
if( !ok ) {
if( res_info ) {
WREFreeResInfo( res_info );
res_info = NULL;
}
}
if( name ) {
WREMemFree( name );
}
if( title ) {
WREFreeRCString( title );
}
return( ok );
}
void WRESetCurrentRes ( WREResInfo *res_info )
{
WRECurrentRes = res_info;
}
WREResInfo *WREGetCurrentRes ( void )
{
return ( WRECurrentRes );
}
Bool WREIsCurrentMDIWindowZoomed ( void )
{
WREResInfo *info;
info = WREGetCurrentRes ();
if ( info && ( info->res_win != NULL ) ) {
return ( IsZoomed ( info->res_win ) );
} else {
return ( FALSE );
}
}
Bool WRERegisterResClass ( HINSTANCE app_inst )
{
WNDCLASS wc;
/* fill in the WINDOW CLASS structure for the resource window */
wc.style = CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW;
wc.lpfnWndProc = WREResWndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = sizeof (WREResInfo *);
wc.hInstance = app_inst;
wc.hIcon = LoadIcon ( app_inst, "ResIcon" );
wc.hCursor = NULL;
//wc.hbrBackground = GetStockObject ( WHITE_BRUSH );
wc.hbrBackground = CreateSolidBrush( GetSysColor( COLOR_BTNFACE ) );
wc.lpszMenuName = NULL;
wc.lpszClassName = WREResClass;
/* register the resource window class */
return ( RegisterClass ( &wc ) );
}
int WREIncNumRes ( void )
{
if( WRENumRes == 0 ) {
WREEnableMenus( TRUE );
}
return ( ++WRENumRes );
}
int WREDecNumRes ( void )
{
if( WRENumRes == 1 ) {
WREEnableMenus( FALSE );
if( WRENoInterface ) {
PostMessage( WREGetMainWindowHandle(), WM_CLOSE, 0, 0 );
}
}
return ( (WRENumRes) ? --WRENumRes : WRENumRes );
}
int WREGetNumRes ( void )
{
return ( WRENumRes );
}
WREResInfo *WRECreateNewResource( char *filename )
{
WREResInfo *res_info;
Bool ok;
ok = ( ( res_info = WREAllocResInfo() ) != NULL );
if( ok ) {
res_info->info = WRAllocWRInfo();
ok = ( res_info->info != NULL );
}
if( ok ) {
res_info->symbol_table = WRInitHashTable();
ok = ( res_info->symbol_table != NULL );
}
if( ok && filename ) {
res_info->info->save_name = WREStrDup( filename );
ok = ( res_info->info->save_name != NULL );
}
if( ok ) {
#ifdef __NT__
res_info->is32bit = TRUE;
#else
res_info->is32bit = FALSE;
#endif
if( res_info->is32bit ) {
res_info->info->internal_type = WR_WINNTW_RES;
} else {
res_info->info->internal_type = WR_WIN16W_RES;
}
WREFindAndLoadSymbols( res_info );
ok = WRECreateResourceWindow( res_info );
}
if( res_info ) {
if( ok ) {
ListAddElt( &WREResList, (void *) res_info );
} else {
WREFreeResInfo( res_info );
res_info = NULL;
}
}
return( res_info );
}
Bool WREOpenResource( char *fn )
{
char *name;
WREResInfo *res_info;
WREGetFileStruct gf;
Bool ok, got_name;
res_info = NULL;
name = NULL;
got_name = FALSE;
if( fn ) {
if( WRFileExists ( fn ) ) {
ok = ( ( name = WREStrDup( fn ) ) != NULL );
} else {
ok = FALSE;
}
} else {
gf.file_name = NULL;
gf.title = WREResOpenTitle;
gf.filter = WREResFilter;
gf.save_ext = TRUE;
ok = ( ( name = WREGetOpenFileName( &gf ) ) != NULL );
}
if( ok ) {
got_name = TRUE;
ok = ( (res_info = WRELoadResource( name ) ) != NULL );
}
if( ok ) {
WREFindAndLoadSymbols( res_info );
ok = WRECreateResourceWindow( res_info );
}
if( ok ) {
ListAddElt( &WREResList, (void *)res_info );
} else {
if( res_info ) {
WREFreeResInfo( res_info );
res_info = NULL;
}
if( got_name ) {
WREDisplayErrorMsg( WRE_RESOURCESNOTLOADED );
}
}
if( name ) {
WREMemFree( name );
}
return( ok );
}
WREResInfo *WRELoadResource ( const char *file_name )
{
WRFileType file_type;
WREResInfo *res_info;
Bool ok;
WRESetWaitCursor ( TRUE );
ok = ( ( res_info = WREAllocResInfo() ) != NULL );
if ( ok ) {
file_type = WRIdentifyFile ( file_name );
ok = ( file_type != WR_INVALID_FILE );
}
if ( ok ) {
res_info->info = WRLoadResource ( file_name, file_type );
ok = ( res_info->info != NULL );
}
if( ok ) {
file_type = res_info->info->file_type;
if( res_info->info->internal_type != WR_DONT_KNOW ) {
file_type = res_info->info->internal_type;
}
res_info->is32bit = WRIs32Bit( file_type );
}
if( ok ) {
res_info->symbol_table = WRInitHashTable();
ok = ( res_info->symbol_table != NULL );
}
if( !ok ) {
if( res_info ) {
WREFreeResInfo ( res_info );
res_info = NULL;
}
}
WRESetWaitCursor ( FALSE );
return ( res_info );
}
WREResInfo *WREResInfoFromWin ( HWND win )
{
WREResInfo *info;
LIST *rlist;
if ( win != NULL ) {
info = NULL;
for ( rlist = WREResList; rlist; rlist = ListNext(rlist) ) {
info = (WREResInfo *) ListElement(rlist);
if ( info->res_win == win ) {
return ( info );
}
}
}
return ( NULL );
}
Bool WREIsResInfoWinMsg( LPMSG pmsg )
{
WREResInfo *info;
LIST *rlist;
info = NULL;
for( rlist = WREResList; rlist; rlist = ListNext(rlist) ) {
info = (WREResInfo *) ListElement(rlist);
if( info->info_win != (HWND)NULL ) {
if( IsDialogMessage( info->info_win, pmsg ) ) {
return( TRUE );
}
}
}
return( FALSE );
}
void WREActivateResourceWindow( WREResInfo *res_info,
WPARAM wParam, LPARAM lParam )
{
WREResInfo *info;
Bool fActivate;
HWND hwndDeact;
_wre_touch(wParam);
if( res_info ) {
fActivate =
GET_WM_MDIACTIVATE_FACTIVATE(res_info->res_win, wParam, lParam);
hwndDeact = GET_WM_MDIACTIVATE_HWNDDEACTIVATE(wParam, lParam);
res_info->active = fActivate;
if( fActivate ) {
WRESetCurrentRes ( res_info );
if( res_info->info_win != (HWND)NULL ) {
SetFocus( res_info->info_win );
}
info = WREResInfoFromWin ( hwndDeact );
if ( info ) {
info->active = FALSE;
}
}
}
return;
}
char *WREGetQueryName ( WREResInfo *res_info )
{
char *name;
if ( res_info->info->save_name ) {
name = res_info->info->save_name;
} else if ( res_info->info->file_name ) {
name = res_info->info->file_name;
} else {
name = WREResUntitled;
}
return ( name );
}
static void WRECheckIfActiveWindow( void )
{
HWND main;
HWND active;
main = WREGetMainWindowHandle();
active = GetActiveWindow();
if( active != main ) {
//SetActiveWindow( main );
ShowWindow( main, SW_RESTORE );
BringWindowToTop( main );
}
}
Bool WREQuerySaveSymOnDeleteRes( WREResInfo *res_info, Bool fatal_exit )
{
int ret;
UINT style;
char *text;
char *file;
HWND frame;
if( WRENoInterface ) {
return( TRUE );
}
if( !res_info || !res_info->symbol_table ) {
return( TRUE );
}
if( WRIsHashTableDirty( res_info->symbol_table ) ) {
if( fatal_exit ) {
style = MB_YESNO | MB_APPLMODAL | MB_ICONEXCLAMATION;
} else {
style = MB_YESNOCANCEL | MB_APPLMODAL | MB_ICONEXCLAMATION;
}
WRECheckIfActiveWindow();
frame = WREGetMDIWindowHandle();
SendMessage( frame, WM_MDIRESTORE, (WPARAM) res_info->res_win, 0 );
SendMessage( frame, WM_MDIACTIVATE, (WPARAM) res_info->res_win, 0 );
file = WREGetQueryName( res_info );
text = WREAllocRCString( WRE_SAVEMODIFIEDSYM );
ret = MessageBox( res_info->res_win, text, file, style );
if( text ) {
WREFreeRCString( text );
}
if( ret == IDYES ) {
if( res_info->symbol_file == NULL ) {
res_info->symbol_file = WRECreateSymName( file );
}
if( !WRESaveSymbols( res_info->symbol_table, &res_info->symbol_file, FALSE ) ) {
return( FALSE );
}
} else if( ret == IDCANCEL ) {
return( FALSE );
}
}
return( TRUE );
}
Bool WREQuerySaveResOnDeleteRes( WREResInfo *res_info, Bool fatal_exit )
{
int ret;
UINT style;
HWND frame;
char *text;
if( WRENoInterface ) {
return( TRUE );
}
if( res_info && WREIsResModified( res_info ) ) {
if( fatal_exit ) {
style = MB_YESNO | MB_APPLMODAL | MB_ICONEXCLAMATION;
} else {
style = MB_YESNOCANCEL | MB_APPLMODAL | MB_ICONEXCLAMATION;
}
WRECheckIfActiveWindow();
frame = WREGetMDIWindowHandle();
SendMessage( frame, WM_MDIRESTORE, (WPARAM) res_info->res_win, 0 );
SendMessage( frame, WM_MDIACTIVATE, (WPARAM) res_info->res_win, 0 );
text = WREAllocRCString( WRE_QUERYMODIFIED );
ret = MessageBox( res_info->res_win, text,
WREGetQueryName( res_info ), style );
if( text ) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -