📄 wdefdiag.c
字号:
if ( handle == NULL ) {
new->object_handle = new;
} else {
new->object_handle = handle;
}
new->o_item = Create( OBJ_ITEM, new->parent, obj_rect, new->object_handle);
if (new->o_item == NULL) {
WdeWriteTrail("WdeDialogCreater: OITEM not created!");
WdeFreeDialogBoxHeader(&(new->dialog_info));
WdeMemFree ( new );
return ( NULL );
}
if (!Forward ( new->parent, GET_FONT, &(new->font), NULL)) {
WdeWriteTrail("WdeDialogCreater: Couldn't get parent font!");
WdeFreeDialogBoxHeader(&(new->dialog_info));
WdeMemFree(new);
return ( NULL );
}
if ( !WdeGetStickyMode() ) {
WdeSetBaseObject ( IDM_SELECT_MODE );
}
return ( new );
}
Bool WINEXPORT WdeDialogDispatcher ( ACTION act, WdeDialogObject *obj,
void *p1, void *p2)
{
int i;
WdeDebugDispatch("Dialog", act, obj, p1, p2);
for ( i = 0; i < MAX_ACTIONS; i++ ) {
if ( WdeDialogActions[i].id == act ) {
if ( WdeDialogActions[i].rtn ) {
return( ( WdeDialogActions[i].rtn ) ( obj, p1, p2 ) );
} else {
return ( Forward ( obj->parent, act, p1, p2 ) );
}
}
}
return ( Forward ( obj->o_item, act, p1, p2 ) );
}
Bool WdeDialogInit ( Bool first )
{
char *text;
Bool use_default;
_wde_touch(first);
WdeAppInst = WdeGetAppInstance();
WdeDefaultDialog = WdeAllocDialogBoxHeader();
if( !WdeDefaultDialog ) {
WdeWriteTrail( "WdeDialogInit: Alloc of dialog failed!" );
return( FALSE );
}
#ifdef __NT__
WdeDefaultDialog->is32bit = TRUE;
#endif
/* set up the default control structure */
SETHDR_STYLE( WdeDefaultDialog, WS_CAPTION | WS_SYSMENU |
WS_VISIBLE | DS_MODALFRAME | DS_SETFONT );
// the following assumes the same memory allocation scheme is
// being used for regular stuff and RC strings
text = WdeAllocRCString( WDE_DEFAULTDIALOGCAPTION );
SETHDR_CAPTION( WdeDefaultDialog, text );
use_default = TRUE;
#ifdef WDE_USE_RC_FONTS
char *cp;
int point_size;
text = WdeAllocRCString( WDE_DEFAULTDIALOGFONT );
if( text ) {
cp = _mbschr( text, '.' );
if( cp ) {
*cp = '\0';
SETHDR_FONTNAME( WdeDefaultDialog, WdeStrDup( text ) );
cp++;
point_size = atoi( cp );
SETHDR_POINTSIZE( WdeDefaultDialog, point_size );
use_default = FALSE;
}
WdeFreeRCString( text );
}
#endif
if( use_default ) {
if( GetSystemMetrics( SM_DBCSENABLED ) ) {
SETHDR_FONTNAME( WdeDefaultDialog, WdeStrDup( DEFAULT_JFONT ) );
SETHDR_POINTSIZE( WdeDefaultDialog, DEFAULT_JPOINT_SIZE );
} else {
SETHDR_FONTNAME( WdeDefaultDialog, WdeStrDup( DEFAULT_FONT ) );
SETHDR_POINTSIZE( WdeDefaultDialog, DEFAULT_POINT_SIZE );
}
}
WdeDialogDispatch =
MakeProcInstance ( (FARPROC) WdeDialogDispatcher, WdeAppInst );
WdeDialogDefineProcInst =
MakeProcInstance ( (FARPROC) WdeDialogDefineProc, WdeAppInst );
WdeTestProcInst = (DLGPROC)
MakeProcInstance ( (FARPROC) WdeTestDlgProc, WdeAppInst );
WdeDialogProcInst = (DLGPROC)
MakeProcInstance ( (FARPROC) WdeDialogProc, WdeAppInst );
return( TRUE );
}
void WdeDialogFini ( void )
{
WdeFreeDialogBoxHeader ( &WdeDefaultDialog );
FreeProcInstance ( WdeDialogDefineProcInst);
FreeProcInstance ( (FARPROC) WdeTestProcInst );
FreeProcInstance ( (FARPROC) WdeDialogProcInst );
FreeProcInstance ( WdeDialogDispatch );
}
BOOL WdeDialogResolveSymbol ( WdeDialogObject *obj, Bool *b, Bool *from_id )
{
WdeHashValue val;
OBJPTR child;
LIST *olist;
void *vp;
Bool found;
if( obj->res_info == NULL ) {
return( FALSE );
}
for( olist = obj->children; olist; olist = ListNext( olist ) ) {
child = ListElement( olist );
Forward( child, RESOLVE_SYMBOL, b, from_id );
}
if( !obj->name->IsName ) {
if( from_id && *from_id ) {
vp = WdeResolveValue( obj->res_info->hash_table,
(WdeHashValue) obj->name->ID.Num );
if( vp ) {
if( obj->symbol ) {
WdeMemFree( obj->symbol );
}
obj->symbol = vp;
WdeDialogModified( obj );
}
} else {
if( obj->symbol ) {
val = WdeLookupName( obj->res_info->hash_table,
obj->symbol, &found );
if( found ) {
obj->name->ID.Num = (uint_16)val;
WdeDialogModified( obj );
} else {
WdeMemFree( obj->symbol );
obj->symbol = NULL;
}
}
}
if( b && *b && ( obj->object_handle == GetCurrObject() ) ) {
WdeWriteDialogToInfo( obj );
}
}
return( TRUE );
}
BOOL WdeDialogResolveHelpSymbol ( WdeDialogObject *obj, Bool *b,
Bool *from_id )
{
WdeHashValue val;
OBJPTR child;
LIST *olist;
void *vp;
Bool found;
if( obj->res_info == NULL ) {
return( FALSE );
}
for( olist = obj->children; olist; olist = ListNext( olist ) ) {
child = ListElement( olist );
Forward( child, RESOLVE_HELPSYMBOL, b, from_id );
}
if( from_id && *from_id ) {
vp = WdeResolveValue( obj->res_info->hash_table,
(WdeHashValue)GETHDR_HELPID(obj->dialog_info));
if( vp ) {
if( obj->helpsymbol ) {
WdeMemFree( obj->helpsymbol );
}
obj->helpsymbol = vp;
obj->dialog_info->helpsymbol = WdeStrDup( obj->helpsymbol );
WdeDialogModified( obj );
}
} else {
if( obj->helpsymbol ) {
val = WdeLookupName( obj->res_info->hash_table,
obj->helpsymbol, &found );
if( found ) {
SETHDR_HELPID(obj->dialog_info, val);
WdeDialogModified( obj );
} else {
WdeMemFree( obj->helpsymbol );
obj->helpsymbol = NULL;
}
}
}
if( b && *b && ( obj->object_handle == GetCurrObject() ) ) {
WdeWriteDialogToInfo( obj );
}
return( TRUE );
}
BOOL WdeDialogModifyInfo ( WdeDialogObject *obj, WdeInfoStruct *in, void *p2 )
{
WResID *old_name;
char *old_symbol;
WdeHashEntry *entry;
Bool dup;
/* touch unused vars to get rid of warning */
_wde_touch(p2);
if( in->d.caption ) {
if( GETHDR_CAPTION(obj->dialog_info) ) {
WdeMemFree( GETHDR_CAPTION(obj->dialog_info) );
}
SETHDR_CAPTION( obj->dialog_info, in->d.caption );
if( GETHDR_CAPTION(obj->dialog_info) ) {
SendMessage( obj->window_handle, WM_SETTEXT, 0,
(LPARAM)(LPCSTR)GETHDR_CAPTION(obj->dialog_info) );
} else {
SendMessage( obj->window_handle, WM_SETTEXT, 0,
(LPARAM)(LPCSTR)"" );
}
}
old_name = obj->name;
old_symbol = obj->symbol;
if( in->symbol ) {
dup = FALSE;
obj->symbol = in->symbol;
entry = WdeDefAddHashEntry( obj->res_info->hash_table,
obj->symbol, &dup );
if( entry ) {
obj->name = WResIDFromNum( entry->value );
in->d.name = obj->name;
} else {
obj->name = old_name;
obj->symbol = old_symbol;
old_name = NULL;
old_symbol = NULL;
}
} else if( in->d.name ) {
obj->name = in->d.name;
}
if( old_symbol ) {
WdeMemFree( old_symbol );
}
if( old_name ) {
WResIDFree( old_name );
}
WdeDialogModified( obj );
return( TRUE );
}
Bool WdeDialogTest( WdeDialogObject *obj, void *p1, void *p2 )
{
GLOBALHANDLE dialog_template;
uint_8 *locked_global_mem;
char *MenuName;
char *ClassName;
DWORD style;
LIST *clist;
WdeOrderedEntry *oentry;
HWND hwin;
uint_16 flag;
/* touch unused vars to get rid of warning */
_wde_touch(p1);
_wde_touch(p2);
SETHDR_NUMITEMS( obj->dialog_info, obj->num_children );
MenuName = WdeResNameOrOrdinalToStr( GETHDR_MENUNAME(obj->dialog_info), 10 );
if( MenuName && !*MenuName ) {
WdeMemFree( MenuName );
MenuName = NULL;
}
ClassName = WdeResNameOrOrdinalToStr( GETHDR_CLASSNAME(obj->dialog_info), 10 );
if( ClassName && !*ClassName ) {
WdeMemFree( ClassName );
ClassName = NULL;
}
style = GETHDR_STYLE( obj->dialog_info );
/* we don't like child windows just yet -- problems with redrawing
* edit environment
*/
if ( style & WS_CHILD ) {
style ^= WS_CHILD;
style |= WS_POPUP;
}
if ( style & DS_SYSMODAL ) {
style ^= DS_SYSMODAL;
}
if (obj->dialog_info->is32bitEx) {
dialog_template =
DialogEXTemplate( (DWORD)style,
GETHDR_EXSTYLE( obj->dialog_info ),
GETHDR_HELPID( obj->dialog_info ),
GETHDR_SIZEX( obj->dialog_info ),
GETHDR_SIZEY( obj->dialog_info ),
GETHDR_SIZEW( obj->dialog_info ),
GETHDR_SIZEH( obj->dialog_info ),
MenuName,
ClassName,
GETHDR_CAPTION( obj->dialog_info ),
GETHDR_POINTSIZE( obj->dialog_info ),
GETHDR_FONTNAME( obj->dialog_info ),
GETHDR_FONTWEIGHT( obj->dialog_info ),
GETHDR_FONTITALIC( obj->dialog_info ) );
} else {
dialog_template =
DialogTemplate( style,
GETHDR_SIZEX( obj->dialog_info ),
GETHDR_SIZEY( obj->dialog_info ),
GETHDR_SIZEW( obj->dialog_info ),
GETHDR_SIZEH( obj->dialog_info ),
MenuName,
ClassName,
GETHDR_CAPTION( obj->dialog_info ),
GETHDR_POINTSIZE( obj->dialog_info ),
GETHDR_FONTNAME( obj->dialog_info ) );
}
if( MenuName ) {
WdeMemFree( MenuName );
}
if( ClassName ) {
WdeMemFree( ClassName );
}
if ( dialog_template == NULL ) {
WdeWriteTrail("WdeDialogTest: DialogTemplate failed!");
return ( FALSE );
}
WdeCleanOrderedList ( &obj->ochildren );
if (obj->dialog_info->is32bitEx) {
flag = TESTEX;
} else {
flag = TEST;
}
/* add all the children */
for( clist = obj->ochildren; clist; clist = ListNext(clist) ) {
oentry = ListElement( clist );
if ( !Forward( oentry->obj, flag, &dialog_template, NULL ) ) {
WdeWriteTrail("WdeDialogTest: control TEST failed!");
GlobalFree( dialog_template );
return ( FALSE );
}
}
DoneAddingControls( dialog_template );
locked_global_mem = (uint_8 *) GlobalLock(dialog_template);
if (locked_global_mem == NULL) {
WdeWriteTrail("WdeDialogTest: Could not Lock template!");
GlobalFree(dialog_template);
return ( FALSE );
}
hwin = CreateDialogIndirectParam ( WdeAppInst,
WDEDLGTEMPLATE locked_global_mem,
obj->res_info->forms_win,
WdeTestProcInst, (LPARAM) obj );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -