예제 #1
0
void WdeMouseRtn( HWND win, RECT *r )
{
    if( GetBaseObjType() == EDIT_SELECT ) {
        WdeMouseRtnResize( win, r );
    } else {
        WdeMouseRtnCreate( win, r );
    }
}
예제 #2
0
static bool wdeControlsHook( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    MINMAXINFO          *minmax;
    WdeToolBar          *tbar;
    OBJ_ID              obj_id;
    WORD                id;
    char                *text;
    OBJPTR              obj;
    WdeOrderMode        mode;
    ctl_id              cid;
    bool                ignore_msg;
    bool                ret;

    ignore_msg = FALSE;

    if( WdeGetNumRes() && !WdeInCleanup() ) {
        obj = WdeGetCurrentDialog();
        if( obj != NULL && Forward( obj, GET_ORDER_MODE, &mode, NULL ) && mode != WdeSelect ) {
            ignore_msg = TRUE;
        }
    }

    if( !ignore_msg && WdeGetTestMode() ) {
        ignore_msg = TRUE;
    }

    if( ignore_msg ) {
        switch( msg ) {
        case WM_RBUTTONDOWN:
        case WM_RBUTTONDBLCLK:
        case WM_LBUTTONDOWN:
        case WM_LBUTTONDBLCLK:
        case WM_RBUTTONUP:
        case WM_LBUTTONUP:
            return( true );
        }
    }

    if( (tbar = WdeControls) == NULL ) {
        if( msg == WM_GETMINMAXINFO ) {
            minmax = (MINMAXINFO *)lParam;
            minmax->ptMinTrackSize.x = 8;
        }
        return( false );
    }

    ret = false;

    switch( msg ) {
    case WM_USER:
        if( WdeGetNumRes() ) {
            obj_id = GetBaseObjType();
            id = WdeGetMenuFromOBJID( obj_id );
            if( id == wParam || (wParam == IDM_STICKY_TOOLS && WdeStickyMode) ) {
                lParam = !lParam;
            }
            WdeHandleStickyToolPress( tbar, wParam, lParam );
        }
        break;

    case WM_RBUTTONDOWN:
    case WM_RBUTTONDBLCLK:
    case WM_LBUTTONDOWN:
    case WM_LBUTTONDBLCLK:
        if( FindToolIDAtPoint( tbar->tbar, wParam, lParam, &cid ) ) {
            if( cid == IDM_CUSTOM1_TOOL ) {
                ret = !WdeIsCurrentCustControlSet( 0 );
            } else if( cid == IDM_CUSTOM2_TOOL ) {
                ret = !WdeIsCurrentCustControlSet( 1 );
            }
        }
        break;

    case WM_SIZE:
        if ( wParam != SIZE_MAXIMIZED && wParam != SIZE_MINIMIZED ) {
            GetWindowRect( hwnd, &tbar->last_pos );
        }
        break;

    case WM_MOVE:
        if( !IsZoomed( hwnd ) ) {
            GetWindowRect( hwnd, &tbar->last_pos );
        }
        break;

    case WM_GETMINMAXINFO:
        if( GetModuleHandle( "COMCTL32.DLL" ) == NULL ) {
            minmax = (MINMAXINFO *)lParam;
            minmax->ptMinTrackSize.x =
                2 * GetSystemMetrics( SM_CXFRAME ) +
                tbar->info->dinfo.border_size.x +
                tbar->info->dinfo.button_size.x - 1;
            minmax->ptMinTrackSize.y =
                2 * GetSystemMetrics( SM_CYFRAME ) +
                GetSystemMetrics(SM_CYCAPTION) +
                tbar->info->dinfo.border_size.y +
                tbar->info->dinfo.button_size.y - 1;
            ret = true;
        }
        break;

    case WM_CLOSE:
        WdeDestroyControls();
        WdeSetOption ( WdeOptIsCntlsTBarVisible, FALSE );
        ret = true;
        break;

    case WM_DESTROY:
        WdeControls = NULL;
        WdeSetCntlTBarPosOption( &tbar->last_pos );
        text = WdeAllocRCString( WDE_SHOWTOOLBOX );
        ModifyMenu( WdeGetResMenuHandle(), IDM_SHOW_TOOLS,
                    MF_BYCOMMAND | MF_STRING, IDM_SHOW_TOOLS, text );
        ModifyMenu( WdeGetInitialMenuHandle(), IDM_SHOW_TOOLS,
                    MF_BYCOMMAND | MF_STRING, IDM_SHOW_TOOLS, text );
        if( text != NULL ) {
            WdeFreeRCString( text );
        }
        WdeCloseToolBar( tbar );
        break;

    }

    return( ret );
}
예제 #3
0
static 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  dsize;

    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()) != NULL ) {
            MapWindowPoints( info->edit_win, win, (POINT *)&rect, 2 );
        }
    }

    if( WdeScreenToDialog( NULL, &resizer, &rect, &dsize ) ) {
        WdeWriteObjectDimensions( (int_16)dsize.x, (int_16)dsize.y,
                                  (int_16)dsize.width, (int_16)dsize.height );
    }

    return( TRUE );
}
예제 #4
0
bool WdeCreateControlsToolBar( void )
{
    RECT        t, r, screen;
    HWND        parent;
    int         id;
    char        *text;

    if( WdeControls != NULL ) {
        return ( true );
    }

    WdeSetStatusText( NULL, "", false );
    WdeSetStatusByID( WDE_CREATINGTOOLBOX, 0 );

    parent = WdeGetMainWindowHandle();

    WdeGetCntlTBarPosOption( &t );

    if( t.left == t.right && t.top == t.bottom ) {
        GetWindowRect( parent, &r );
#ifdef __NT__
        if( GetModuleHandle( "COMCTL32.DLL" ) == NULL ) {
#endif
            t.left = r.right - CONTROLS_DEFX;
            t.top = r.top + CONTROLS_INSET;
            t.right = r.right;
            t.bottom = t.top + CONTROLS_DEFY;
#ifdef __NT__
        } else {
            t.left = r.right - CONTROLS_DEFXCC;
            t.top = r.top + CONTROLS_INSET;
            t.right = r.right;
            t.bottom = t.top + CONTROLS_DEFYCC;
        }
#endif
    }

    GetWindowRect( GetDesktopWindow(), &screen );
    if( !IntersectRect( &r, &screen, &t ) ) {
        r.right = t.right - t.left;
        r.bottom = t.bottom - t.top;
        r.left = 0;
        if( screen.right > r.right )
            r.left = ( screen.right - r.right ) / 2;
        r.top = 0;
        if( screen.bottom - screen.top - r.bottom  > 0 )
            r.top = ( screen.bottom - screen.top - r.bottom ) / 2;
        r.right += r.left;
        r.bottom += r.top;
        t = r;
    }

    WdeControlsInfo->dinfo.area = t;

    WdeControls = WdeCreateToolBar( WdeControlsInfo, parent );

    if( WdeControls == NULL ) {
        return( false );
    }

    text = WdeAllocRCString( WDE_TOOLBOXCAPTION );
    SendMessage( WdeControls->win, WM_SETTEXT, 0, (LPARAM)(LPCSTR)text );
    if( text != NULL ) {
        WdeFreeRCString( text );
    }

    text = WdeAllocRCString( WDE_HIDETOOLBOX );
    ModifyMenu ( WdeGetInitialMenuHandle(), IDM_SHOW_TOOLS,
                 MF_BYCOMMAND | MF_STRING, IDM_SHOW_TOOLS, text );
    ModifyMenu ( WdeGetResMenuHandle(), IDM_SHOW_TOOLS,
                 MF_BYCOMMAND | MF_STRING, IDM_SHOW_TOOLS, text );
    if( text != NULL ) {
        WdeFreeRCString( text );
    }

    if( WdeGetNumRes() ) {
        id = WdeGetMenuFromOBJID( GetBaseObjType() );
        if( id != -1 ) {
            WdeSetToolBarItemState( WdeControls, id, BUTTON_DOWN );
        }
        WdeSetStickyMode( WdeStickyMode );
    }

    WdeSetStatusReadyText();

    return( true );
}