📄 wdefcntl.c
字号:
return ( ok );
}
BOOL WdeControlGetObjectInfo ( WdeControlObject *obj,
WdeDialogBoxControl **info, char **s )
{
if ( info ) {
*info = obj->control_info;
}
if ( s ) {
*s = obj->symbol;
}
return ( TRUE );
}
BOOL WdeControlSetObjectInfo( WdeControlObject *obj,
WdeDialogBoxControl *info, char *s )
{
RECT size;
POINT origin;
WdeResizeRatio resizer;
WdeControlModified( obj );
if( obj->symbol ) {
WdeMemFree( obj->symbol );
}
obj->symbol = WdeStrDup( s );
if( !info ) {
return( TRUE );
}
/* JPK - Added for help ID */
if ( obj->helpsymbol ) {
WdeMemFree ( obj->helpsymbol );
}
obj->helpsymbol = WdeStrDup(info->helpsymbol);
if( obj->control_info ) {
WdeFreeDialogBoxControl( &obj->control_info );
}
obj->control_info = WdeCopyDialogBoxControl( info );
if( ( !GETCTL_SIZEX(obj->control_info) ) &&
( !GETCTL_SIZEY(obj->control_info) ) &&
( !GETCTL_SIZEW(obj->control_info) ) &&
( !GETCTL_SIZEH(obj->control_info) ) ) {
Location( obj->object_handle, &size );
if( obj->parent != obj->base_obj ) {
GetOffset(&origin);
OffsetRect ( &size, -origin.x, -origin.y );
WdeMapWindowRect ( obj->res_info->edit_win,
obj->parent_handle, &size );
}
if( !Forward ( obj->parent, GET_RESIZER, &resizer, NULL) ) {
WdeWriteTrail ( "WdeControlSetControlInfo: GET_RESIZER failed!" );
return ( FALSE );
}
if( !WdeScreenToDialog( obj, &resizer, &size,
GETCTL_PSIZE(obj->control_info) ) ) {
WdeWriteTrail( "WdeControlSetControlInfo: "
"WdeScreenToDialog failed!" );
return( FALSE );
}
}
return ( TRUE );
}
BOOL WdeControlSetObjectHelpInfo( WdeControlObject *obj,
WdeDialogBoxControl *info, char *hs )
{
_wde_touch(info);
if ( obj->helpsymbol ) {
WdeMemFree ( obj->helpsymbol );
}
obj->helpsymbol = WdeStrDup(hs);
return ( TRUE );
}
BOOL WdeControlGetObjectHelpInfo ( WdeControlObject *obj,
WdeDialogBoxControl **info, char **hs )
{
// this is redundant
if ( info ) {
*info = obj->control_info;
}
// this is needed
if ( hs ) {
*hs = obj->helpsymbol;
}
return ( TRUE );
}
BOOL WdeControlResolveSymbol( WdeControlObject *obj, Bool *b, Bool *from_id )
{
WdeHashValue val;
void *vp;
Bool found;
if( obj->control_info && obj->res_info ) {
if( from_id && *from_id ) {
vp = WdeResolveValue(
obj->res_info->hash_table,
(WdeHashValue) GETCTL_ID(obj->control_info) );
if( vp ) {
if( obj->symbol ) {
WdeMemFree( obj->symbol );
}
obj->symbol = vp;
WdeControlModified( obj );
}
} else {
if( obj->symbol ) {
val = WdeLookupName( obj->res_info->hash_table,
obj->symbol, &found );
if( found ) {
SETCTL_ID(obj->control_info, (uint_16)val );
WdeControlModified( obj );
} else {
WdeMemFree( obj->symbol );
obj->symbol = NULL;
}
}
}
if ( b && *b && ( obj->object_handle == GetCurrObject() ) ) {
WdeWriteControlToInfo ( obj );
}
} else {
return ( FALSE );
}
return ( TRUE );
}
BOOL WdeControlResolveHelpSymbol( WdeControlObject *obj, Bool *b, Bool *from_id )
{
WdeHashValue val;
void *vp;
Bool found;
if( obj->control_info && obj->res_info ) {
if( from_id && *from_id ) {
vp = WdeResolveValue(
obj->res_info->hash_table,
(WdeHashValue) GETCTL_HELPID(obj->control_info) );
if( vp ) {
if( obj->helpsymbol ) {
WdeMemFree( obj->helpsymbol );
}
obj->helpsymbol = vp;
if( obj->control_info->helpsymbol ) {
WdeMemFree( obj->control_info->helpsymbol );
}
obj->control_info->helpsymbol = WdeStrDup(obj->helpsymbol);
WdeControlModified( obj );
}
} else {
if( obj->helpsymbol ) {
val = WdeLookupName( obj->res_info->hash_table,
obj->helpsymbol, &found );
if( found ) {
SETCTL_HELPID(obj->control_info, (uint_32)val );
WdeControlModified( obj );
} else {
WdeMemFree( obj->helpsymbol );
obj->helpsymbol = NULL;
}
}
}
if ( b && *b && ( obj->object_handle == GetCurrObject() ) ) {
WdeWriteControlToInfo ( obj );
}
} else {
return ( FALSE );
}
return ( TRUE );
}
BOOL WdeControlModifyInfo ( WdeControlObject *obj, WdeInfoStruct *in,
void *p2 )
{
WdeHashEntry *entry;
char *text;
Bool dup;
/* touch unused vars to get rid of warning */
_wde_touch(p2);
if( in->c.text ) {
if( GETCTL_TEXT( obj->control_info ) ) {
WdeMemFree( GETCTL_TEXT( obj->control_info ) );
}
SETCTL_TEXT( obj->control_info, in->c.text );
text = WdeResNameOrOrdinalToStr( GETCTL_TEXT(obj->control_info), 10 );
if( text ) {
SendMessage( obj->window_handle, WM_SETTEXT, 0, (LPARAM) text );
WdeMemFree( text );
} else {
SendMessage( obj->window_handle, WM_SETTEXT, 0, (LPARAM) "" );
}
}
if( obj->symbol ) {
WdeMemFree( obj->symbol );
}
obj->symbol = in->symbol;
if( in->symbol ) {
dup = FALSE;
entry = WdeDefAddHashEntry( obj->res_info->hash_table,
obj->symbol, &dup );
if( entry ) {
SETCTL_ID( obj->control_info, entry->value );
}
} else {
SETCTL_ID( obj->control_info, in->c.id );
}
WdeControlModified( obj );
WdeBringControlToTop( obj );
return( TRUE );
}
Bool WdeControlGetOrderMode( WdeControlObject *obj, WdeOrderMode *mode,
void *p2 )
{
/* touch unused vars to get rid of warning */
_wde_touch(p2);
*mode = obj->mode;
return ( TRUE );
}
Bool WdeControlSetOrderMode ( WdeControlObject *obj, WdeOrderMode *mode,
WdeSetOrderLists **l )
{
WdeSetOrderStruct *o;
DialogStyle style;
style = GETCTL_STYLE( obj->control_info );
if ( obj->mode == WdeSelect ) {
o = (WdeSetOrderStruct *) WdeMemAlloc ( sizeof(WdeSetOrderStruct) );
if ( !o ) {
return ( FALSE );
}
o->old_oe = ListElement
(WdeFindOrderedEntry ((*l)->oldlist, obj->object_handle ));
o->new_oe = NULL;
o->lists = *l;
o->old_oe->mode = *mode;
o->old_oe->pos_set = FALSE;
o->old_oe->tab_set = ( (style & WS_TABSTOP) != 0);
o->old_oe->grp_set = ( (style & WS_GROUP) != 0);
o->res_info = obj->res_info;
obj->tag = WdeCreateTag ( obj->window_handle, o );
obj->mode = *mode;
} else if ( obj->mode == *mode ) {
o = WdeGetTagInfo ( obj->tag );
WdeDestroyTag ( obj->tag );
obj->tag = NULL;
obj->mode = WdeSelect;
if( o == NULL ) {
return( FALSE );
}
if ( o->old_oe->tab_set ) {
style |= WS_TABSTOP;
} else {
style &= ( 0xffffffff ^ WS_TABSTOP );
}
if ( o->old_oe->grp_set ) {
style |= WS_GROUP;
} else {
style &= ( 0xffffffff ^ WS_GROUP );
}
*l = o->lists;
WdeMemFree ( o );
} else {
o = WdeGetTagInfo ( obj->tag );
if ( !o ) {
return ( FALSE );
}
o->old_oe->mode = *mode;
if ( o->new_oe ) {
o->new_oe->mode = *mode;
}
*l = o->lists;
obj->mode = *mode;
}
SETCTL_STYLE( obj->control_info, style );
return ( TRUE );
}
BOOL WdeControlSizeToText( WdeControlObject *obj, void *p1, void *p2 )
{
SIZE size;
int width;
int height;
OBJ_ID id;
RECT pos;
BOOL ok;
/* touch unused vars to get rid of warning */
_wde_touch(p1);
_wde_touch(p2);
ok = TRUE;
if( obj->parent_handle == (HWND)NULL ) {
ok = ( Forward ( obj->parent, GET_WINDOW_HANDLE,
&(obj->parent_handle), NULL ) &&
obj->parent_handle != (HWND) NULL );
}
if( ok ) {
ok = Forward( obj->object_handle, IDENTIFY, &id, NULL );
}
if( ok ) {
ok = WdeGetNameOrOrdSize(
obj->parent, GETCTL_TEXT( obj->control_info ), &size );
}
if( ok ) {
width = 0;
ok = FALSE;
switch( id ) {
case PBUTTON_OBJ:
SetRectEmpty( &pos );
WdeChangeSizeToDefIfSmallRect
( obj->parent, PBUTTON_OBJ, &pos );
width = max( size.cx + ( WDE_SIZE_TO_TEXT_PAD * 2 ),
pos.right ) ;
ok = TRUE;
break;
case RBUTTON_OBJ:
width = -1;
case CBUTTON_OBJ:
width += WDE_CKECK_RADIO_ADJUST;
case TEXT_OBJ:
case EDIT_OBJ:
width += size.cx + ( WDE_SIZE_TO_TEXT_PAD * 2 );
ok = TRUE;
break;
}
}
if( ok ) {
height = 0;
ok = FALSE;
switch( id ) {
case RBUTTON_OBJ:
case CBUTTON_OBJ:
case TEXT_OBJ:
case EDIT_OBJ:
SetRectEmpty( &pos );
WdeChangeSizeToDefIfSmallRect( obj->parent, id, &pos );
case PBUTTON_OBJ:
height = pos.bottom;
ok = TRUE;
break;
}
}
if( ok ) {
Location( obj->object_handle, &pos );
pos.right = pos.left + width;
pos.bottom = pos.top + height;
HideSelectBoxes();
ok = Resize( obj->object_handle, &pos, TRUE );
ShowSelectBoxes();
}
if( ok ) {
WdeWriteControlToInfo( obj );
}
return( ok );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -