📄 wderes.c
字号:
}
if( ok ) {
if( WdeIsHashTableDirty( res_info->hash_table ) ) {
if( main_obj = GetMainObject() ) {
Forward( main_obj, RESOLVE_HELPSYMBOL, &ok, NULL ); /* JPK */
Forward( main_obj, RESOLVE_SYMBOL, &ok, NULL );
}
}
WdeCreateDLGInclude( res_info, res_info->sym_name );
ok = WdeSaveResourceToFile( res_info );
if( !ok ) {
WdeDisplayErrorMsg( WDE_SAVEFAILED );
}
}
if( ok ) {
if( WdeIsHashTableDirty( res_info->hash_table ) &&
!WdeIsHashSaveRejectedSet( res_info->hash_table ) ) {
WdeWriteSymbols( res_info->hash_table, &res_info->sym_name, get_name );
}
}
if( ok ) {
//fn_offset = WRFindFnOffset( fn );
win_title_len = strlen( &(fn[fn_offset]) ) + 1;
win_title_len += 15;
win_title = (char *)WdeMemAlloc( win_title_len );
if( win_title != NULL ) {
sprintf( win_title,"%s (%d)", &(fn[fn_offset]),
0xffff & res_info->window_num );
SendMessage( res_info->res_win, WM_SETTEXT, 0,
(LPARAM) (LPCSTR) win_title );
WdeMemFree( win_title );
} else {
SendMessage( res_info->res_win, WM_SETTEXT, 0,
(LPARAM) (LPCSTR) &(fn[fn_offset]) );
}
}
return( ok );
}
Bool WdeQueryKillApp( Bool fatal_exit )
{
LIST *rlist;
WdeResInfo *res_info;
Bool kill_app;
if( WdeResList ) {
kill_app = TRUE;
for( rlist=WdeResList; rlist && kill_app; rlist=ListNext(rlist) ) {
res_info = (WdeResInfo *) ListElement(rlist);
kill_app = WdeQuerySaveResOnDeleteRes( res_info, fatal_exit ) &&
WdeQuerySaveSymOnDeleteRes( res_info, fatal_exit );
kill_app = kill_app || fatal_exit;
WdeHashClearSaveRejected( res_info->hash_table );
}
if( !fatal_exit && !kill_app ) {
return( FALSE );
}
}
return( TRUE );
}
void WdeFreeResList( void )
{
LIST *rlist;
WdeResInfo *res_info;
if( WdeResList ) {
for( rlist = WdeResList; rlist; rlist = ListNext(rlist) ) {
res_info = (WdeResInfo *) ListElement(rlist);
WdeSetCurrentRes( res_info );
WdeFreeResInfo( res_info );
}
ListFree( WdeResList );
WdeResList = NULL;
}
}
Bool WdeRemoveResource( WdeResInfo *res_info )
{
LIST *node;
if( !WdeResList ) {
return( FALSE );
}
if( (node = ListFindElt(WdeResList, res_info) ) != NULL ) {
ListRemoveElt( &WdeResList, (void *) ListElement(node) );
} else {
WdeWriteTrail("WdeRemoveResource: res_info not found!");
return( FALSE );
}
if( WdeGetNumRes( ) == 1 ) {
WdeOldStickyMode = WdeSetStickyMode ( FALSE );
WdeSetBaseObject( IDM_SELECT_MODE );
}
WdeFreeResInfo( res_info );
if( WdeGetNumRes( ) == 1 ) {
WdeSetAppMenuToRes( FALSE );
}
WdeDecNumRes ();
return ( TRUE );
}
Bool WdeRemoveDialogFromResInfo ( WdeResInfo *res_info, WdeResDlgItem *ditem,
Bool destroy_object )
{
WResResNode *rnode;
WResLangNode *lnode;
if ( !res_info || !ditem ) {
return ( FALSE );
}
res_info->modified = TRUE;
rnode = ditem->rnode;
lnode = ditem->lnode;
ListRemoveElt ( &(res_info->dlg_item_list), ditem );
WdeFreeResDlgItem ( &ditem, destroy_object );
if( rnode || lnode ) {
return( WRRemoveLangNodeFromDir( res_info->info->dir,
&(res_info->dlg_entry),
&rnode, &lnode ) );
}
return ( TRUE );
}
LRESULT WINEXPORT WdeResWndProc( HWND hWnd, UINT message,
WPARAM wParam, volatile LPARAM lParam )
{
WdeResInfo *res_info;
int msg_processed;
LRESULT ret;
msg_processed = FALSE;
ret = FALSE;
res_info = NULL;
switch ( message ) {
case WM_CREATE:
res_info = (WdeResInfo *) ((MDICREATESTRUCT *)
((CREATESTRUCT *)lParam)->lpCreateParams)->lParam;
res_info->res_win = hWnd;
SetWindowLong( hWnd, 0, (LONG) res_info );
break;
//case WM_COMMAND:
//case WM_KEYUP:
//case WM_KEYDOWN:
case WM_SIZE:
case WM_MDIACTIVATE:
case WM_CLOSE:
res_info = (WdeResInfo *) GetWindowLong( hWnd, 0 );
break;
case WM_DESTROY:
SetWindowLong( hWnd, 0, (LONG) NULL );
break;
}
if( res_info ) {
switch( message ) {
//case WM_KEYUP:
//case WM_KEYDOWN:
//WdePassToEdit( message, wParam, lParam );
//break;
//case WM_COMMAND:
//switch( LOWORD(wParam) ) {
//case IDM_ESCAPE:
//ret = WdePassToEdit( message, wParam, lParam );
//break;
//}
//break;
case WM_SIZE:
WdeResizeEditWindows( res_info );
break;
case WM_MDIACTIVATE:
WdeActivateResourceWindow( res_info, wParam, lParam );
break;
case WM_CLOSE:
if( !WdeDestroyResourceWindow( res_info ) ) {
return ( (LRESULT) FALSE );
}
break;
}
}
if ( !msg_processed ) {
ret = DefMDIChildProc ( hWnd, message, wParam, lParam );
}
return ( ret );
}
Bool WdeSetObjectInfo ( OBJPTR dlg, WdeResInfo **ri,
WdeResDlgItem **di, WResID *id )
{
WdeResInfo *res_info;
WdeResDlgItem *item;
WResID *name;
Bool ok;
ok = ( dlg && id && ri && di );
if ( ok ) {
ok = ( ( res_info = WdeGetCurrentRes () ) != NULL );
}
if ( ok ) {
ok = ( ( item = WdeAllocResDlgItem () ) != NULL );
}
if ( ok ) {
ok = ( ( name = WdeCopyWResID ( id ) ) != NULL );
}
if ( ok ) {
item->object = dlg;
item->dialog_name = name;
item->modified = TRUE;
item->is32bit = res_info->is32bit;
WdeAddResDlgItemToResInfo ( res_info, item );
*ri = res_info;
*di = item;
} else {
if ( item ) {
WdeFreeResDlgItem ( &item, FALSE );
}
if ( name ) {
WResIDFree ( name );
}
}
return ( ok );
}
OBJPTR WdeGetCurrentDialog ( void )
{
WdeResInfo *info;
OBJPTR curr_obj;
OBJPTR ancestor;
OBJ_ID id;
info = WdeGetCurrentRes();
if( info == NULL ) {
return( NULL );
}
InitState( info->forms_win );
curr_obj = GetCurrObject();
if( curr_obj == NULL ) {
return( NULL );
}
if( !Forward(curr_obj, IDENTIFY, &id, NULL) ) {
WdeWriteTrail("WdeGetCurrentDialog: IDENTIFY failed!");
return( NULL );
}
while( (id != DIALOG_OBJ) && (id != BASE_OBJ) ) {
GetObjectParent( curr_obj, &ancestor );
if ( ancestor == NULL ) {
WdeWriteTrail("WdeGetCurrentDialog: IDENTIFY failed!");
return ( NULL );
}
curr_obj = ancestor;
if ( !Forward (curr_obj, IDENTIFY, &id, NULL) ) {
WdeWriteTrail("WdeGetCurrentDialog: IDENTIFY failed!");
return ( NULL );
}
}
if( id != DIALOG_OBJ ) {
return( NULL );
}
return( curr_obj );
}
OBJPTR WdeIsDialogInList ( LIST *l )
{
OBJ_ID oid;
OBJPTR obj;
for ( ; l; l = ListNext ( l ) ) {
obj = ListElement ( l );
if ( Forward (obj, IDENTIFY, &oid, NULL) && (oid == DIALOG_OBJ) ) {
return ( obj );
}
}
return ( NULL );
}
Bool WdeMouseRtnCreate( HWND win, RECT *r )
{
RECT *ncp;
RECT rect;
LIST *l;
SUBOBJ_REQUEST req;
OBJPTR obj;
OBJPTR ro;
Bool adjust;
POINT pt;
WdeResizeRatio resizer;
WdeResInfo *info;
DialogSizeInfo d;
rect = *r;
/* if we are creating a dialog discard the NC area */
if( GetBaseObjType() == DIALOG_OBJ ) {
ncp = WdeGetDefaultDialogNCSize( );
rect.left += ncp->left;
rect.top += ncp->top;
rect.right -= ncp->right;
rect.bottom -= ncp->bottom;
if( rect.right < rect.left ) {
rect.right = rect.left;
}
if( rect.bottom < rect.top ) {
rect.bottom = rect.top;
}
adjust = FALSE;
obj = GetMainObject();
} else {
l = NULL;
req.p.ty = AT_POINT;
req.p.pt.x = rect.left;
req.p.pt.y = rect.top;
Forward( GetMainObject(), FIND_SUBOBJECTS, &req, &l );
obj = WdeIsDialogInList( l );
if( l ) {
ListFree( l );
}
if( obj ) {
adjust = TRUE;
} else {
adjust = FALSE;
obj = GetMainObject();
}
}
if( !Forward( obj, GET_RESIZER, &resizer, &ro ) ) {
return( FALSE );
}
if( adjust ) {
if( !Forward( ro, GET_WINDOW_HANDLE, &win, NULL) ) {
return( FALSE );
}
GetOffset( &pt );
OffsetRect( &rect, -pt.x, -pt.y );
if( info = WdeGetCurrentRes() ) {
MapWindowPoints( info->edit_win, win, (POINT *) &rect, 2 );
}
}
if( WdeScreenToDialog( NULL, &resizer, &rect, &d ) ) {
WdeWriteObjectDimensions( (int_16)d.x, (int_16)d.y,
(int_16)d.width, (int_16)d.height );
}
return( TRUE );
}
Bool WdeMouseRtnResize( HWND win, RECT *r )
{
POINT pt;
LIST *l;
OBJPTR curr_obj;
OBJ_ID oid;
OBJPTR obj;
OBJPTR ro;
RECT rect;
RECT nc;
WdeResizeRatio resizer;
Bool adjust;
WdeResInfo *info;
DialogSizeInfo d;
SUBOBJ_REQUEST req;
rect = *r;
adjust = FALSE;
/* try to find the object id of resized object */
curr_obj = GetCurrObject();
if( !curr_obj || !Forward( curr_obj, IDENTIFY, &oid, NULL ) ) {
oid = 0;
}
if( oid == DIALOG_OBJ ) {
if( !Forward( curr_obj, GET_NC_SIZE, &nc, NULL ) ) {
return( FALSE );
}
rect.left += nc.left;
rect.top += nc.top;
rect.right -= nc.right;
rect.bottom -= nc.bottom;
if( rect.right < rect.left ) {
rect.right = rect.left;
}
if( rect.bottom < rect.top ) {
rect.bottom = rect.top;
}
if( !Forward( curr_obj, GET_RESIZER, &resizer, &ro ) ) {
return( FALSE );
}
} else {
l = NULL;
req.p.ty = AT_POINT;
req.p.pt.x = rect.left;
req.p.pt.y = rect.top;
Forward( GetMainObject(), FIND_SUBOBJECTS, &req, &l );
obj = WdeIsDialogInList( l );
if( l ) {
ListFree( l );
}
if( obj ) {
adjust = TRUE;
} else {
obj = GetMainObject();
}
if( !Forward( obj, GET_RESIZER, &resizer, &ro ) ) {
return( FALSE );
}
}
if( adjust ) {
if( !Forward( ro, GET_WINDOW_HANDLE, &win, NULL) ) {
return( FALSE );
}
GetOffset( &pt );
OffsetRect( &rect, -pt.x, -pt.y );
if( info = WdeGetCurrentRes () ) {
MapWindowPoints( info->edit_win, win, (POINT *) &rect, 2 );
}
}
if( WdeScreenToDialog( NULL, &resizer, &rect, &d ) ) {
WdeWriteObjectDimensions( (int_16)d.x, (int_16)d.y,
(int_16)d.width, (int_16)d.height );
}
return( TRUE );
}
void WINEXPORT WdeMouseRtn( HWND win, RECT *r )
{
if( GetBaseObjType() == EDIT_SELECT ) {
WdeMouseRtnResize( win, r );
} else {
WdeMouseRtnCreate( win, r );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -