📄 wderes.c
字号:
got_name = FALSE;
if ( fn ) {
if ( WdeFileExists ( fn ) ) {
name = WdeStrDup ( fn );
gf.fn_offset = WRFindFnOffset ( name );
} else {
return ( FALSE );
}
} else {
gf.file_name = NULL;
gf.title = WdeResOpenTitle;
gf.filter = WdeResOpenFilter;
ok = ( ( name = WdeGetOpenFileName ( &gf ) ) != NULL );
}
if ( ok ) {
got_name = TRUE;
ok = ( ( res_info = WdeLoadResource ( name ) ) != NULL );
}
if( ok ) {
res_info->hash_table = WRInitHashTable();
ok = ( res_info->hash_table != NULL );
}
if ( ok ) {
if( res_info->info->internal_type != WR_DONT_KNOW ) {
res_info->is32bit = WRIs32Bit( res_info->info->internal_type );
} else {
res_info->is32bit = WRIs32Bit( res_info->info->file_type );
}
ok = WdeAddDlgItems( res_info );
}
if ( ok ) {
WdeFindAndLoadSymbols( res_info );
ok = WdeCreateResourceWindow( res_info, gf.fn_offset, NULL );
}
if( ok ) {
if( WdeResInfoHasDialogs( res_info ) ) {
WdeSelectDialog( res_info );
} else {
WdeDisplayErrorMsg( WDE_PRJHASNODIALOGS );
}
ListAddElt( &WdeResList, (void *) res_info );
WdeSetResModified( res_info, FALSE );
WdeCheckBaseScrollbars( FALSE );
}
if( !ok ) {
if( res_info ) {
WdeFreeResInfo( res_info );
res_info = NULL;
}
if( got_name ) {
WdeDisplayErrorMsg( WDE_RESOURCESNOTLOADED );
}
}
if( name ) {
WdeMemFree( name );
}
WdeSetWaitCursor ( FALSE );
return ( ok );
}
WdeResInfo *WdeResInfoFromWin ( HWND win )
{
WdeResInfo *info;
LIST *rlist;
if ( win != NULL ) {
info = NULL;
for ( rlist = WdeResList; rlist; rlist = ListNext(rlist) ) {
info = (WdeResInfo *) ListElement(rlist);
if ( info->res_win == win ) {
return ( info );
}
}
}
return ( NULL );
}
void WdeActivateResourceWindow ( WdeResInfo *res_info,
WPARAM wParam, LPARAM lParam )
{
WdeResInfo *info;
OBJPTR *current_obj;
Bool fActivate;
HWND hwndDeact;
WORD id;
_wde_touch(wParam);
if ( !res_info ) {
return;
}
fActivate =
GET_WM_MDIACTIVATE_FACTIVATE (res_info->res_win, wParam, lParam);
hwndDeact = GET_WM_MDIACTIVATE_HWNDDEACTIVATE(wParam, lParam);
res_info->active = fActivate;
if( fActivate ) {
WdeSetCurrentRes( res_info );
info = WdeResInfoFromWin( hwndDeact );
if ( info ) {
info->active = FALSE;
}
}
if( res_info->editting ) {
InitState( res_info->forms_win );
id = WdeGetCToolID();
WdeSetBaseObject( id );
if( fActivate ) {
current_obj = GetCurrObject();
if ( current_obj ) {
Notify( current_obj, PRIMARY_OBJECT, NULL );
}
}
}
return;
}
static void WdeCheckIfActiveWindow( void )
{
HWND main;
HWND active;
main = WdeGetMainWindowHandle();
active = GetActiveWindow();
if( active != main ) {
if( IsIconic( main ) ) {
ShowWindow( main, SW_RESTORE );
}
#ifdef __NT__
SetWindowPos( main, HWND_TOPMOST, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE );
SetWindowPos( main, HWND_TOP, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE );
SetWindowPos( main, HWND_NOTOPMOST, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE );
SetForegroundWindow( main );
#else
SetActiveWindow( main );
SetWindowPos( main, HWND_TOP, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE );
#endif
}
}
char *WdeGetQueryName ( WdeResInfo *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 = WdeResUntitled;
}
return ( name );
}
Bool WdeQuerySaveResOnDeleteRes ( WdeResInfo *res_info, Bool fatal_exit )
{
int ret;
UINT style;
char *file;
char *text;
HWND frame;
if( res_info && res_info->dlg_item_list && WdeIsResModified(res_info) ) {
WdeCheckIfActiveWindow();
if( fatal_exit ) {
style = MB_YESNO | MB_APPLMODAL | MB_ICONEXCLAMATION;
} else {
style = MB_YESNOCANCEL | MB_APPLMODAL | MB_ICONEXCLAMATION;
}
frame = WdeGetMDIWindowHandle();
if( IsIconic( frame ) ) {
SendMessage( frame, WM_MDIRESTORE, (WPARAM)res_info->res_win, 0 );
}
SendMessage( frame, WM_MDIACTIVATE, (WPARAM) res_info->res_win, 0 );
file = WdeGetQueryName ( res_info );
if( WdeIsDDE() ) {
text = WdeAllocRCString( WDE_UPDATEMODIFIEDPRJ );
} else {
text = WdeAllocRCString( WDE_SAVEMODIFIEDPRJ );
}
ret = MessageBox( res_info->res_win, text, file, style );
if( text ) {
WdeFreeRCString( text );
}
if( ret == IDYES ) {
if( WdeIsDDE() ) {
return( WdeUpdateDDEEditSession() );
} else {
return( WdeSaveResource ( res_info, FALSE ) );
}
} else if( ret == IDCANCEL ) {
return( FALSE );
}
}
return( TRUE );
}
Bool WdeQuerySaveSymOnDeleteRes( WdeResInfo *res_info, Bool fatal_exit )
{
int ret;
UINT style;
char *file;
char *text;
HWND frame;
if( fatal_exit ) {
style = MB_YESNO | MB_APPLMODAL | MB_ICONEXCLAMATION;
} else {
style = MB_YESNOCANCEL | MB_APPLMODAL | MB_ICONEXCLAMATION;
}
if( res_info && res_info->hash_table &&
WdeIsHashTableDirty( res_info->hash_table ) ) {
WdeCheckIfActiveWindow();
file = WdeGetQueryName( res_info );
frame = WdeGetMDIWindowHandle();
if( IsIconic( frame ) ) {
SendMessage( frame, WM_MDIRESTORE, (WPARAM)res_info->res_win, 0 );
}
SendMessage( frame, WM_MDIACTIVATE, (WPARAM) res_info->res_win, 0 );
text = WdeAllocRCString( WDE_SAVEMODIFIEDSYM );
ret = MessageBox( res_info->res_win, text, file, style );
if( text ) {
WdeFreeRCString( text );
}
if( ret == IDYES ) {
if( res_info->sym_name == NULL ) {
res_info->sym_name = WdeCreateSymName( file );
}
if( !WdeWriteSymbols( res_info->hash_table, &res_info->sym_name, FALSE ) ) {
return( FALSE );
}
} else if( ret == IDCANCEL ) {
return( FALSE );
} else if( ret == IDNO ) {
WdeHashSaveRejected( res_info->hash_table );
}
}
return( TRUE );
}
Bool WdeDestroyResourceWindow( WdeResInfo *res_info )
{
Bool ret;
ret = ( res_info &&
WdeQuerySaveResOnDeleteRes( res_info, FALSE ) &&
WdeQuerySaveSymOnDeleteRes( res_info, FALSE ) );
WdeHashClearSaveRejected( res_info->hash_table );
if( ret ) {
if( !WdeRemoveResource( res_info ) ) {
WdeWriteTrail("WdeDestroyResourceWindow: RemoveResource failed!");
}
}
return( ret );
}
Bool WdeCreateResourceWindow( WdeResInfo *res_info, int fn_offset,
char *title )
{
MDICREATESTRUCT mdics;
LRESULT ret;
HWND win;
Bool ok;
Bool old;
DWORD style;
RECT r;
HMENU sys_menu;
char *win_title;
int win_title_len;
_wde_touch(fn_offset);
WdeIncNumRes();
style = 0;
if( WdeGetNumRes() == 1 ) {
WdeSetAppMenuToRes( TRUE );
old = WdeSetStickyMode( WdeOldStickyMode );
style = WS_MAXIMIZE;
} else {
if( WdeIsCurrentMDIWindowZoomed() ) {
style = WS_MAXIMIZE;
}
}
mdics.szClass = "WdeResClass";
if( title == NULL ) {
if( res_info->info->file_name ) {
// perhaps make this an option
//title = &( res_info->info->file_name[fn_offset] );
title = res_info->info->file_name;
} else {
title = WdeResUntitled;
}
}
WdeResCounter++;
res_info->window_num = WdeResCounter;
win_title_len = strlen( title ) + 1;
win_title_len += 15;
win_title = (char *)WdeMemAlloc( win_title_len );
if( win_title != NULL ) {
sprintf( win_title,"%s (%d)", title, 0xffff & WdeResCounter );
mdics.szTitle = win_title;
} else {
mdics.szTitle = title;
}
win = WdeGetMDIWindowHandle();
GetClientRect( win, &r );
mdics.hOwner = WdeGetAppInstance();
mdics.x = CW_USEDEFAULT;
mdics.y = CW_USEDEFAULT;
mdics.cx = CW_USEDEFAULT;
mdics.cy = CW_USEDEFAULT;
//mdics.cx = r.right - r.left;
//mdics.cy = r.bottom - r.top;
mdics.style = style;
mdics.lParam = (LPARAM) res_info;
ret = SendMessage( win, WM_MDICREATE, 0, (LPARAM) &mdics );
if( win_title != NULL ) {
WdeMemFree( win_title );
}
#ifdef __NT__
win = (HWND) ret;
#else
win = (HWND) LOWORD( ret );
#endif
ok = ( res_info->res_win && ( res_info->res_win == win ) );
if ( !ok ) {
WdeWriteTrail("WdeCreateResourceWindow: Bad window handle!");
}
if( WdeIsDDE() ) {
sys_menu = GetSystemMenu( win, FALSE );
if( sys_menu != (HMENU)NULL ) {
EnableMenuItem( sys_menu, SC_CLOSE, MF_GRAYED );
}
}
if ( ok ) {
ok = WdeCreateEditWindows ( res_info );
if ( !ok ) {
WdeWriteTrail("WdeCreateResourceWindow: "
"Could not create edit windows!");
}
}
if ( ok ) {
OpenFormEdit ( res_info->forms_win, WdeGetCreateTable(),
MENU_NONE, SCROLL_NONE );
WdeSetEditMode ( res_info, TRUE );
SetHorizontalInc( 1 );
SetVerticalInc( 1 );
InitState ( res_info->forms_win );
SetMouseRtn ( res_info->forms_win, WdeMouseRtn );
//MakeObjectCurrent( GetMainObject() );
} else {
if ( WdeGetNumRes() == 1 ) {
WdeSetAppMenuToRes ( FALSE );
WdeSetStickyMode ( old );
}
WdeDecNumRes ();
}
return ( ok );
}
char *WdeSelectSaveFilter( WRFileType ftype )
{
char *filter;
switch( ftype ) {
case WR_WIN16_EXE:
case WR_WINNT_EXE:
filter = WdeResSaveFilterEXE;
break;
case WR_WIN16_DLL:
case WR_WINNT_DLL:
filter = WdeResSaveFilterDLL;
break;
default:
filter = WdeResSaveFilter;
}
return( filter );
}
Bool WdeSaveResource( WdeResInfo *res_info, Bool get_name )
{
WdeGetFileStruct gf;
char *filter;
char *fn;
char *win_title;
int win_title_len;
int fn_offset;
Bool got_name;
Bool ok;
OBJPTR main_obj;
fn_offset = 0;
got_name = FALSE;
ok = ( res_info && res_info->info );
if( ok ) {
if( res_info->info->save_name ) {
fn = res_info->info->save_name;
} else {
res_info->info->save_type = res_info->info->file_type;
fn = WdeStrDup( res_info->info->file_name );
got_name = TRUE;
}
if( get_name || !fn || !*fn ) {
filter = WdeSelectSaveFilter( res_info->info->file_type );
gf.file_name = fn;
gf.title = WdeResSaveTitle;
gf.filter = filter;
fn = WdeGetSaveFileName( &gf );
got_name = TRUE;
res_info->info->save_type = WR_DONT_KNOW;
}
ok = ( fn && *fn );
}
if( ok ) {
if( got_name && res_info->info->save_name ) {
WdeMemFree( res_info->info->save_name );
}
res_info->info->save_name = fn;
if( res_info->info->save_type == WR_DONT_KNOW ) {
res_info->info->save_type =
WdeSelectFileType( fn, res_info->is32bit );
}
ok = ( res_info->info->save_type != WR_DONT_KNOW );
}
if( ok ) {
if( WdeIsHashTableDirty( res_info->hash_table ) &&
!WdeIsHashSaveRejectedSet( res_info->hash_table ) ) {
if( res_info->sym_name == NULL ) {
res_info->sym_name = WdeCreateSymName( fn );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -