guimain.c

来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 586 行 · 第 1/2 页

C
586
字号
        }
        ret = FALSE;
        break;
    case GUI_MOVE:
        if( WndMain != NULL && WndIsMinimized( WndMain ) ) return;
        WndResizeHook( wnd );
        break;
    case GUI_FONT_CHANGED :
        if( wnd == WndMain ) {
            GUIResizeStatusWindow( gui, 0, 0 );
        }
        WndFontHook( wnd );
        WndResetScroll( wnd );
    case GUI_RESIZE:
        _Clr( wnd, WSW_ICONIFIED );
        cursor = WndHourGlass( NULL );
        WndMoveResize( wnd );
        ret = WndEvent( wnd, GUI_RESIZE, parm );
        WndSetThumb( wnd );
        WndHourGlass( cursor );
        break;
    case GUI_LBUTTONDBLCLK:
        _Clr( wnd, WSW_CLICKED );
        _Set( wnd, WSW_DCLICKED );
        WndLButtonDown( wnd, parm );
        break;
    case GUI_LBUTTONDOWN:
        _Clr( wnd, WSW_DCLICKED );
        _Set( wnd, WSW_CLICKED );
        WndLButtonDown( wnd, parm );
        break;
    case GUI_LBUTTONUP:
        cursor = WndHourGlass( NULL );
        if( _Is( wnd, WSW_DCLICKED ) ) {
            WndLDblClk( wnd, parm );
        } else if( _Is( wnd, WSW_CLICKED ) ) {
            WndLButtonUp( wnd, parm );
        }
        _Clr( wnd, WSW_CLICKED );
        _Clr( wnd, WSW_DCLICKED );
        WndHourGlass( cursor );
        break;
    case GUI_RBUTTONDOWN:
        WndRButtonDown( wnd, parm );
        break;
    case GUI_RBUTTONUP:
        cursor = WndHourGlass( NULL );
        WndRButtonUp( wnd, parm );
        WndHourGlass( cursor );
        break;
    case GUI_MOUSEMOVE:
        WndMouseMove( wnd, parm );
        break;
    case GUI_CLICKED:
        GUI_GETID( parm, id );
        if( WndClickHook != NULL && WndClickHook( wnd, id ) ) break;
        cursor = WndHourGlass( NULL );
        WndClick( wnd, id );
        WndHourGlass( cursor );
        break;
    case GUI_PAINT:
        if( _Isnt( wnd, WSW_REPAINT ) ) { // going to repaint anyway
            WndProcPaint( wnd, parm );
        }
        break;
    case GUI_SCROLL_BOTTOM :
        WndScrollBottom( wnd );
        break;
    case GUI_SCROLL_TOP :
        WndScrollTop( wnd );
        break;
    case GUI_KEYUP:
        ret = FALSE;
        break;
    case GUI_KEYDOWN:
        GUI_GET_KEY_STATE( parm, key, state );
        if( GUI_CTRL( state ) ) {
            switch( key ) {
            case GUI_KEY_TAB:
                key = GUI_KEY_CTRL_I;
                break;
            case GUI_KEY_ENTER:
                key = GUI_KEY_CTRL_M;
                break;
            case GUI_KEY_BACKSPACE:
                key = GUI_KEY_CTRL_H;
                break;
            case GUI_KEY_ESCAPE:
                key = GUI_KEY_CTRL_LEFT_BRACKET;
                break;
            default :
                break;
            }
        }
        if( GUI_IS_ASCII( key ) && _Is( wnd, WSW_CHOOSING ) &&
            wnd->keypiece != WND_NO_PIECE && WndKeyChar( key ) ) {
            if( !WndKeyChoose( wnd, key ) ) {
                Ring();
            }
            break;
        }
        cursor = WndHourGlass( NULL );
        if( !WndProcMacro( wnd, key ) ) {
            switch( key ) {
            case GUI_KEY_HOME:
                if( GUI_SHIFT( state ) ) WndToSelectMode( wnd );
                WndCursorStart( wnd );
                break;
            case GUI_KEY_ESCAPE:
                WndKeyEscape( wnd );
                break;
            case GUI_KEY_END:
                if( GUI_SHIFT( state ) ) WndToSelectMode( wnd );
                WndCursorEnd( wnd );
                break;
            case GUI_KEY_BACKSPACE:
                WndKeyRubOut( wnd );
                break;
            case GUI_KEY_ENTER:
                WndKeyEnter( wnd );
                break;
            case GUI_KEY_SHIFT_TAB:
                WndTabLeft( wnd, TRUE );
                break;
            case GUI_KEY_TAB:
                WndTabRight( wnd, TRUE );
                break;
            case GUI_KEY_LEFT:
                if( GUI_SHIFT( state ) ) WndToSelectMode( wnd );
                WndCursorLeft( wnd );
                break;
            case GUI_KEY_RIGHT:
                if( GUI_SHIFT( state ) ) WndToSelectMode( wnd );
                WndCursorRight( wnd );
                break;
            case GUI_KEY_PAGEDOWN:
                if( WndEvent( wnd, GUI_SCROLL_PAGE_DOWN, parm ) ) break;
                WndPageDown( wnd );
                break;
            case GUI_KEY_PAGEUP:
                if( WndEvent( wnd, GUI_SCROLL_PAGE_UP, parm ) ) break;
                WndPageUp( wnd );
                break;
            case GUI_KEY_UP:
                if( _Is( wnd, WSW_MAP_CURSOR_TO_SCROLL ) ) {
                    WndScrollUp( wnd );
                } else {
                    if( _Is( wnd, WSW_MULTILINE_SELECT ) && GUI_SHIFT( state ) ) {
                        WndToSelectMode( wnd );
                    }
                    WndCursorUp( wnd );
                }
                break;
            case GUI_KEY_DOWN:
                if( _Is( wnd, WSW_MAP_CURSOR_TO_SCROLL ) ) {
                    WndScrollDown( wnd );
                } else {
                    if( _Is( wnd, WSW_MULTILINE_SELECT ) && GUI_SHIFT( state ) ) {
                        WndToSelectMode( wnd );
                    }
                    WndCursorDown( wnd );
                }
                break;
            case GUI_KEY_CTRL_HOME:
                WndScrollTop( wnd );
                break;
            case GUI_KEY_CTRL_END:
                WndScrollBottom( wnd );
                break;
            default:
                ret = FALSE;
                break;
            }
        }
        if( ret ) {
            GUIFlushKeys();
        }
        WndHourGlass( cursor );
        break;
    case GUI_DESTROY:
        WndDestroy( wnd );
        break;
    case GUI_ICONIFIED:
        _Set( wnd, WSW_ICONIFIED );
        if( wnd == WndNext( NULL ) ) {
            WndNextNonIconToFront( WndNext( wnd ) );
        }
        break;
    case GUI_QUERYENDSESSION:
        ret = !WndQueryEndSessionHook();
        break;
    case GUI_ENDSESSION:
        {
            bool            endsession;

            GUI_GET_BOOL( parm, endsession );
            if( endsession ) {
                WndEndSessionHook();
            }
        }
        break;
    case GUI_CLOSE:
        if( wnd == WndMain ) {
            ret = WndShutDownHook();
        } else {
            WndResizeHook( wnd );
            ret = TRUE;
        }
        break;
    case GUI_TOOLBAR_FLOATING:
    case GUI_TOOLBAR_FIXED:
    case GUI_TOOLBAR_DESTROYED:
        WndSetToolBar( event );
        ret = TRUE;
        break;
    case GUI_HSCROLL_NOTIFY:
        WndHScrollNotify( wnd );
        break;
    default:
        ret = FALSE;
        break;
    }
    if( !WndDoingRefresh && wndProcNesting == 1 ) WndDoInput();
    if( WndValid( wnd ) ) { // could have been freed
        WndEndSelectEvent( wnd );
        WndSayMatchMode( wnd );
    }
    WndFreshAll();
    spawnp->ret = ret;
    return;
}


void *WndHourCursor( void )
{
    if( GUIIsGUI() ) {
        wndCursorType = GUI_HOURGLASS_CURSOR;
        return( GUISetMouseCursor( GUI_HOURGLASS_CURSOR ) );
    } else {
        if( BusyString == NULL ) {
            BusyString = WndLoadString( LITERAL_Busy );
        }
        WndInternalStatusText( BusyString );
        return( "" );
    }
}

void *WndArrowCursor( void )
{
    if( GUIIsGUI() ) {
        wndCursorType = GUI_ARROW_CURSOR;
        return( GUISetMouseCursor( GUI_ARROW_CURSOR ) );
    } else {
        WndResetStatusText();
        return( "" );
    }
}

void *WndSetCursor( void *to )
{
    if( GUIIsGUI() ) {
        wndCursorType = GUI_ARROW_CURSOR;
        GUIResetMouseCursor( to );
    } else {
        WndResetStatusText();
    }
    return( NULL );
}

void *WndHourGlass( void *to )
{
    if( to != NULL ) {
        return( WndSetCursor( to ) );
    } else {
        return( WndHourCursor() );
    }
}


extern GUICALLBACK WndMainEventProc;
bool WndMainEventProc( gui_window * gui, gui_event event, void *parm )
{
    spawn_parms         spawnp;

    spawnp.gui = gui;
    spawnp.event = event;
    spawnp.parm = parm;
    wndProcNesting++;
    SpawnP( ( void (*) (void *) )DoMainEventProc, &spawnp );
    wndProcNesting--;
    return( spawnp.ret );
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?