⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wdemain.c

📁 开放源码的编译器open watcom 1.6.0版的源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
            break;

        case WM_ENDSESSION:
            if ( !wParam ) {
                WdeFatalExit = FALSE;
            }
            break;

        case WM_QUERYENDSESSION:
            if ( ret = WdeQueryKillApp ( FALSE ) ) {
                WdeFatalExit = TRUE;
                pass_to_def = FALSE;
            }
            break;

        case WM_CLOSE:
            // this prevents the user from closing the editor during
            // DDE initialization
            if( !wParam && !EnableMenuInput ) {
                return( 0 );
            }
            /* clean up before we exit */
            WdeCleanupStarted  = TRUE;
            if( wParam ) {  // wParam is non-zero if the DDE connection died
                WdeFatalExit = TRUE;
                WdeQueryKillApp ( TRUE );
                wParam = 0;
            }
            if( !WdeCleanup ( res_info, WdeFatalExit ) ) {
                WdeCleanupStarted  = FALSE;
                pass_to_def = FALSE;
            }
    }

    if ( pass_to_def ) {
        ret = DefFrameProc( hWnd, hWinWdeMDIClient, message, wParam, lParam );
    }
    return ( ret );
}

Bool WdeIsMenuIDValid( HMENU menu, WORD id )
{
    UINT st;

    if( !EnableMenuInput ) {
        return( FALSE );
    }

    if( WdeGetTestMode() ) {
        if( id != IDM_TEST_MODE ) {
            return( FALSE );
        }
    }

    switch( id ) {
        case IDM_TAB:
        case IDM_STAB:
        case IDM_ESCAPE:
        case IDM_GOTO_INFOBAR:
            return( TRUE );
    }

    if( menu == (HMENU) NULL ) {
        menu = WdeGetMenuHandle();
    }

    handleInitMenu( menu );

    st = GetMenuState( menu, id, MF_BYCOMMAND );

    if ( ( st == -1 ) || ( ( st & MF_GRAYED ) == MF_GRAYED ) ) {
        return( FALSE );
    }

    return( TRUE );
}

Bool WdeSetDialogMode( WORD id )
{
    OBJPTR        obj;
    WdeOrderMode  mode;

    switch ( id ) {
        case IDM_SET_ORDER:
            mode = WdeSetOrder;
            break;
        case IDM_SET_TABS:
            mode = WdeSetTabs;
            break;
        case IDM_SET_GROUPS:
            mode = WdeSetGroups;
            break;
    }

    if( ( obj = WdeGetCurrentDialog() ) ) {
        if( Forward( obj, SET_ORDER_MODE, &mode, NULL ) ) {
            return( TRUE );
        }
    }

    return( FALSE );
}

Bool WdeSaveCurrentDialog ( WORD menu_id )
{
    OBJPTR  obj;

    if ( ( obj = WdeGetCurrentDialog() ) ) {
        return ( Forward ( obj, SAVE_OBJECT, &menu_id, NULL ) );
    }

    return ( FALSE );
}

Bool WdeRestoreCurrentDialog ( void )
{
    OBJPTR     obj;

    if( ( obj = WdeGetCurrentDialog() ) ) {
        return( Forward ( obj, RESTORE_OBJECT, NULL, NULL ) );
    }

    return ( FALSE );
}

Bool WdeHideCurrentDialog( void )
{
    OBJPTR      obj;
    Bool        user_action, hide;

    if( ( obj = WdeGetCurrentDialog() ) ) {
        user_action = FALSE;
        hide = TRUE;
        return( Forward( obj, DESTROY, &user_action, &hide ) );
    }

    return( FALSE );
}

void WdeHandleSizeToText ( void )
{
    OBJPTR   obj;
    LIST    *l;

    l = WdeGetCurrObjectList();
    for ( ; l; l = ListConsume ( l ) ) {
        obj = ListElement ( l );
        Forward ( obj, SIZE_TO_TEXT, NULL, NULL );
    }
}

void WdeHandleTabEvent ( Bool up )
{
    OBJPTR obj;

    if( !WdeGetNumRes() ) {
        return;
    }

    if( obj = WdeGetNextObject ( up, NULL, NULL ) ) {
        MakeObjectCurrent ( obj );
        HideSelectBoxes();
        WdeHandleGotoCurrentObject();
        ShowSelectBoxes();
    }
}

LRESULT WdeHandleMDIArrangeEvents ( WORD w )
{
    UINT   msg;
    WPARAM wp;

    wp = 0;
    switch ( w ) {
        case IDM_MDI_CASCADE:
            msg = WM_MDICASCADE;
            break;

        case IDM_MDI_TILEV:
            msg = WM_MDITILE;
            wp = MDITILE_VERTICAL;
            break;

        case IDM_MDI_TILEH:
            msg = WM_MDITILE;
            wp = MDITILE_HORIZONTAL;
            break;

        case IDM_MDI_ARRANGE:
            msg = WM_MDIICONARRANGE;
            break;

        default:
            return ( FALSE );
    }

    return ( SendMessage ( hWinWdeMDIClient, msg, wp, 0 ) );
}

void WdeUpdateScreenPosOpt ( void )
{
    RECT        rect;

    GetWindowRect ( hWinWdeMain, &rect );

    WdeSetScreenPosOption ( &rect );
}

void WdeResizeWindows ( void )
{
    RECT        rect;
    int         info_depth;
    int         stat_depth;
    int         ribbon_depth;

    if ( !WdeCleanupStarted ) {
        info_depth   = WdeGetInfoWindowDepth(),
        stat_depth   = WdeGetStatusDepth (),
        ribbon_depth = WdeGetRibbonHeight();

        GetClientRect ( hWinWdeMain, &rect );

        MoveWindow( hWinWdeMDIClient,
                    0, info_depth + ribbon_depth,
                    ( rect.right  - rect.left ),
                    ( rect.bottom -
                        (rect.top+stat_depth+info_depth+ribbon_depth) ),
                    TRUE );

        WdeResizeStatusWindows ( &rect );
        WdeResizeRibbon ( &rect );
        WdeResizeInfoWindow ( &rect );
    }
}

Bool WdeCleanup ( WdeResInfo *res_info, Bool fatal_exit )
{
    /* clean up before we exit */

    if ( WdeGetTestMode() ) {
        WdeHandleTestModeMenu ( res_info );
    }

    // must be done before FMEDIT is shutdown
    if( FMPasteValid() ) {
        FMResetClipboard();
    }

    WdeSetOption( WdeOptIsCntlsTBarVisible, WdeControlsToolBarExists() );

    if( WdeQueryKillApp( fatal_exit ) ) {
        WdeFreeResList ();
    } else {
        return ( FALSE );
    }

    WdeFiniHints ();
    WdeFreeAllCustLibs ();

#ifndef __NT__
    WdeFreeCustRESProcs ();
#endif

    WdeShutdownToolBars ();

    WdeSetOption( WdeOptIsScreenMax, IsZoomed( hWinWdeMain ) );

    WdeOptsShutdown ();
    WdeFreeControlIDs ( );
    WdeSetAppMenuToRes ( FALSE );
    DestroyMenu ( WdeResMenu );
    DestroyMenu ( WdeDDEMenu );
    WdeFiniToolMenu ();
    WdeShutdownControls ();
    WdeDestroyRibbon    ();
    WdeShutdownRibbon   ();
    WdeFiniCreateTable  ();
    WdeFiniOrderStuff   ();

    /* get rid of all the child windows of the main application window */
    WdeDestroyInfoWindow();
    WdeInfoFini();
    WdeDestroyStatusLine ();
    WdeFiniEditClass();
    WdeFiniResStrings();

    WdeFreeFontList();
    WdeCtl3DFini( hInstWde );
    WdeFreeFileFilter();
    JDialogFini();

    return( TRUE );
}

Bool WdeIsDDEArgs( char **argv, int argc )
{
    int i;

    for( i = 1; i<argc; i++ ) {
        if( !stricmp( argv[i], DDE_OPT ) ) {
            return( TRUE );
        }
    }

    return( FALSE );
}

Bool WdeProcessArgs( char **argv, int argc )
{
    int  i;
    Bool ok;

    ok = TRUE;

    for( i = 1; i<argc; i++ ) {
        if( !stricmp( argv[i], CREATE_NEW_FLAG ) ) {
            WdeCreateNewFiles = TRUE;
        } else if( stricmp( argv[i], DDE_OPT ) ) {
            if( WRFileExists( argv[i] ) ) {
                ok = WdeOpenResource( argv[i] ) && ok;
            } else if( WdeCreateNewFiles ) {
                ok = ( WdeCreateNewResource( argv[i] ) != NULL ) && ok;
            } else {
                ok = FALSE;
            }
        }
    }

    if( !ok ) {
        WdeSetStatusByID( -1, WDE_INPUTFILENOTFOUND );
    }

    return( ok );
}

void WdeDisplayAboutBox ( HINSTANCE inst, HWND parent, UINT msecs )
{
    FARPROC     lpProcAbout;

    lpProcAbout = MakeProcInstance ( (FARPROC) WdeAbout, hInstWde );
    JDialogBoxParam ( inst, "WdeAboutBox", parent, (DLGPROC) lpProcAbout,
                     (LPARAM) &msecs  );
    FreeProcInstance ( lpProcAbout );
}

Bool WINEXPORT WdeAbout( HWND hDlg, WORD message,
                         WPARAM wParam, LPARAM lParam )
{
    UINT        msecs, timer, start;
    HDC         dc, tdc;
    HBITMAP     old;
    HWND        w666;
    RECT        rect, arect;
    PAINTSTRUCT ps;
    WORD        w;
    char        *title;

    static BITMAP    bm;
    static HBITMAP   logo;
    static HBRUSH    brush;
    static COLORREF  color;

    switch ( message ) {

        case WM_SYSCOLORCHANGE:
            WdeCtl3dColorChange ();
            break;

        case WM_DESTROY:
            if ( logo ) {
                DeleteObject ( logo );
            }
            if ( brush ) {
                DeleteObject ( brush );
            }
            break;

        case WM_INITDIALOG:
            msecs = *((UINT *)lParam);
            if ( msecs ) {
                timer = SetTimer ( hDlg, ABOUT_TIMER, msecs, NULL );
                if ( timer ) {
                    title = WdeAllocRCString( WDE_APPTITLE );
                    SetWindowLong ( hDlg, DWL_USER, (LONG) timer );
                    ShowWindow ( GetDlgItem ( hDlg, IDOK ), SW_HIDE );
                    SendMessage ( hDlg, WM_SETTEXT, 0, (LPARAM)title );
                    if( title ) {
                        WdeFreeRCString( title );
                    }
                }
            }

            logo = LoadBitmap ( hInstWde, "AboutLogo" );

            /*
            color = GetSysColor ( COLOR_BTNFACE );
            color = RGB(128,128,128);
            */
            color = GetSysColor ( COLOR_BTNFACE );
            brush = CreateSolidBrush ( color );

            GetObject ( logo, sizeof(BITMAP), &bm );
            return( TRUE );

#if 0
#ifdef __NT__
        case WM_CTLCOLORSTATIC:
            if ( brush ) {
                dc = (HDC) wParam;
                SetBkColor ( dc, color );
                return ( (LRESULT) brush );
            }
            break;
#else
        case WM_CTLCOLOR:
            if ( brush ) {
                dc = (HDC) wParam;
                if ( HIWORD(lParam) == CTLCOLOR_STATIC ) {
                    SetBkColor ( dc, color );
                }
                return ( (LRESULT) brush );
            }
            break;
#endif

        case WM_ERASEBKGND:
            if ( brush ) {
                GetClientRect( hDlg, &rect );
                UnrealizeObject( brush );
                FillRect( (HDC)wParam, &rect, brush );
                return ( TRUE );
            }
            break;
#endif

        case WM_PAINT:
            dc = BeginPaint ( hDlg, &ps );
            if ( dc ) {
                w666 = GetDlgItem ( hDlg, 666 );
                GetClientRect ( w666, &rect );
                GetClientRect ( hDlg, &arect );
                start = ( arect.right - arect.left - bm.bmWidth ) / 2;
                MapWindowPoints ( w666, hDlg, (POINT *) &rect, 2 );
                tdc = CreateCompatibleDC ( dc );
                old = SelectObject ( tdc, logo );
                BitBlt ( dc, start, rect.top + 20, bm.bmWidth, bm.bmHeight,
                         tdc, 0, 0, SRCCOPY );
                SelectObject ( tdc, old );
                DeleteDC ( tdc );
                EndPaint ( hDlg, &ps );
            }
            break;

        case WM_TIMER:
            timer = (UINT) GetWindowLong ( hDlg, DWL_USER );
            if ( timer ) {
                KillTimer ( hDlg, timer );
            }
            EndDialog ( hDlg, TRUE );
            return ( TRUE );
            break;

        case WM_COMMAND:
            w = LOWORD(wParam);
            if ( ( w == IDOK ) || ( w == IDCANCEL ) ) {
                timer = (UINT) GetWindowLong ( hDlg, DWL_USER );
                if ( timer ) {
                    KillTimer ( hDlg, timer );
                }
                EndDialog(hDlg, TRUE);
                return ( TRUE );
            }
            break;

    }

    return ( FALSE );
}

void CALLBACK WdeHelpRoutine( void )
{
    WWinHelp( hWinWdeMain, "resdlg.hlp", HELP_CONTENTS, 0 );
}

⌨️ 快捷键说明

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