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

📄 ieproc.c

📁 开放源码的编译器open watcom 1.6.0版的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************************************************
*
*                            Open Watcom Project
*
*    Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
*
*  ========================================================================
*
*    This file contains Original Code and/or Modifications of Original
*    Code as defined in and that are subject to the Sybase Open Watcom
*    Public License version 1.0 (the 'License'). You may not use this file
*    except in compliance with the License. BY USING THIS FILE YOU AGREE TO
*    ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is
*    provided with the Original Code and Modifications, and is also
*    available at www.sybase.com/developer/opensource.
*
*    The Original Code and all software distributed under the License are
*    distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
*    EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM
*    ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF
*    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR
*    NON-INFRINGEMENT. Please see the License for the specific language
*    governing rights and limitations under the License.
*
*  ========================================================================
*
* Description:  WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE
*               DESCRIBE IT HERE!
*
****************************************************************************/


#include "imgedit.h"
#include "iconinfo.h"
#include "ieprofil.h"
#include "aboutdlg.h"
#include "iedde.h"
#include "banner.h"

#include "wwinhelp.h"

extern BOOL FusionCalled;

static BOOL ImgEdEnableMenuInput = FALSE;

void IEEnableMenuInput( BOOL enable )
{
    ImgEdEnableMenuInput = enable;
}

/*
 * enableMainItems - enables menu items.
 */
static void enableMainItems( HMENU hmenu )
{
    img_node    *node;

    if( !hmenu ) return;

    node = GetCurrentNode();
    if ( !(DoImagesExist()) ) {
        _wpi_enablemenuitem( hmenu, IMGED_SAVE, FALSE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_SAVE_AS, FALSE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_CLOSE, FALSE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_CLOSEALL, FALSE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_ARRANGE, FALSE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_TILE, FALSE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_CASCADE, FALSE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_ROTATECC, FALSE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_ROTATECL, FALSE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_FLIPHORZ, FALSE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_FLIPVERT, FALSE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_UP, FALSE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_DOWN, FALSE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_RIGHT, FALSE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_LEFT, FALSE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_SIZE, FALSE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_MAXIMIZE, FALSE, FALSE );
    } else if ( node ) {
        CheckForClipboard( hmenu );
        CheckForUndo( node );
        _wpi_enablemenuitem( hmenu, IMGED_SAVE, TRUE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_SAVE_AS, TRUE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_CLOSE, TRUE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_CLOSEALL, TRUE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_ARRANGE, TRUE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_TILE, TRUE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_CASCADE, TRUE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_ROTATECC, TRUE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_ROTATECL, TRUE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_FLIPHORZ, TRUE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_FLIPVERT, TRUE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_UP, TRUE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_DOWN, TRUE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_RIGHT, TRUE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_LEFT, TRUE, FALSE );
        if (node->imgtype != BITMAP_IMG) {
            _wpi_enablemenuitem( hmenu, IMGED_SIZE, FALSE, FALSE );
        } else {
            _wpi_enablemenuitem( hmenu, IMGED_SIZE, TRUE, FALSE );
        }
        _wpi_enablemenuitem( hmenu, IMGED_MAXIMIZE, TRUE, FALSE );
    } else {
        _wpi_enablemenuitem( hmenu, IMGED_SAVE, FALSE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_SAVE_AS, FALSE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_CLOSE, FALSE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_SIZE, FALSE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_CLOSEALL, TRUE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_ARRANGE, TRUE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_TILE, TRUE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_CASCADE, TRUE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_MAXIMIZE, FALSE, FALSE );
    }

    if( FusionCalled ) {
        _wpi_enablemenuitem( hmenu, IMGED_NEW, FALSE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_OPEN, FALSE, FALSE );
    }
} /* enableMainItems */

#ifndef __OS2_PM__
/*
 * createClientWindow - creates the client window required by mdi.
 */
void createClientWindow( HWND hwnd )
{
    CLIENTCREATESTRUCT  ccs;
    RECT                clientrect;
    short               height;

    GetClientRect( hwnd, &clientrect );
    height = clientrect.bottom - FUNCTIONBAR_WIDTH - STATUS_WIDTH;

    ccs.hWindowMenu = GetSubMenu( GetMenu(hwnd), 5 );
    ccs.idFirstChild = IDM_FIRSTCHILD;
    ClientWindow = CreateWindow( "mdiclient",
                                 NULL,
                                 WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE |
                                     WS_HSCROLL | WS_VSCROLL |
                                     MDIS_ALLCHILDSTYLES,
                                 0,
                                 FUNCTIONBAR_WIDTH + 1,
                                 clientrect.right,
                                 height,
                                 hwnd,
                                 0,
                                 Instance,
                                 (LPSTR) &ccs );

} /* createClientWindow */

/*
 * setClientSize - sets the new size of the client area.
 */
static void setClientSize( HWND hwnd )
{
    RECT        rcclient;
    short       height;

    GetClientRect( hwnd, &rcclient );
    height = rcclient.bottom - FUNCTIONBAR_WIDTH
                                        - STATUS_WIDTH;

    MoveWindow(ClientWindow, 0, FUNCTIONBAR_WIDTH+1,
                                rcclient.right, height, TRUE);

} /* setClientSize */

#else

/*
 * resizeClientArea - Resizes the current area of the client
 */
static void resizeClientArea( WPI_PARAM2 mp2 )
{
    SHORT       width;
    SHORT       height;

    if (!ClientWindow) return;

    width = SHORT1FROMMP( mp2 );
    height = SHORT2FROMMP( mp2 );

    WinSetWindowPos( ClientWindow, HWND_TOP, 0, STATUS_WIDTH, width,
                                height - STATUS_WIDTH - FUNCTIONBAR_WIDTH,
                                SWP_SIZE | SWP_MOVE );
} /* resizeClientArea */

#endif

/*
 * checkBrushItem - Check the brush size item in the main menu
 */
void checkBrushItem( HMENU hmenu, int newitem )
{
    int         i;
    int         brush_size=2;

    for(i=IMGED_2x2; i<=IMGED_5x5; ++i) {
        _wpi_checkmenuitem( hmenu, i, FALSE, FALSE );
        if (i == newitem) {
            SetBrushSize( brush_size );
        }
        ++brush_size;
    }
    _wpi_checkmenuitem( hmenu, newitem, TRUE, FALSE );

} /* checkBrushItem */

static BOOL IEIsMenuIDValid( HMENU menu, WORD id )
{
    UINT st;

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

    if( menu == (HMENU) NULL ) {
        return( TRUE );
    }

    // put any menu id's that you would like forced here
    switch( id ) {
        case IMGED_CLOSEALL:
            if( ImgedIsDDE ) {
                return( TRUE );
            }
            break;
    }

    st = GetMenuState( menu, id, MF_BYCOMMAND );

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

    return( TRUE );
}

/*
 * ImgEdFrameProc - handle messages for the image editor appl.
 */
MRESULT CALLBACK ImgEdFrameProc( HWND hwnd, WPI_MSG msg, WPI_PARAM1 wparam,
                                                            WPI_PARAM2 lparam )
{
    static BOOL         window_destroyed = FALSE;
    static HMENU        hmenu;
    WORD                cmdid;
    img_node            *node;
    WPI_RECT            rcmain;
#ifndef __OS2_PM__
    about_info          ai;
#endif
    WPI_RECTDIM         left, top;

    if (!window_destroyed) {
        enableMainItems( hmenu );
    }

    switch ( msg ) {

    case UM_EXIT:
            _wpi_sendmessage( hwnd, WM_COMMAND, IMGED_CLOSEALL, 0L );

    // fall thru

    case UM_EXIT_NO_SAVE:
            if ( _wpi_getfirstchild( _wpi_getclient(ClientWindow) ) != NULL ) {
                break;
            }
#ifndef __OS2_PM__
            _wpi_destroywindow( _wpi_getframe(hwnd) );
#else
            _wpi_sendmessage( hwnd, WM_CLOSE, 0, 0 );
#endif

        break;

    case UM_SAVE_ALL:
        SaveAllImages();
        break;

    case WM_CREATE:
        hmenu = _wpi_getmenu( _wpi_getframe(hwnd) );
#ifndef __OS2_PM__
        createClientWindow( hwnd );
#endif
        if( !InitStatusLine( hwnd ) ) {
            return( -1 );
        }

        InitFunctionBar( hwnd );
        InitIconInfo();
        InitializeCursors();

        /*
         * Set values from profile information ...
         */
        if (ImgedConfigInfo.brush_size <= 5 && ImgedConfigInfo.brush_size >=2) {
            checkBrushItem( hmenu, IMGED_2x2-2+ImgedConfigInfo.brush_size );
        }
        if (ImgedConfigInfo.grid_on) {
            CheckGridItem(hmenu);
        }
        if (ImgedConfigInfo.square_grid) {
            CheckSquareGrid( hmenu );
        }
        if (ImgedConfigInfo.show_state & SET_SHOW_VIEW) {
            CheckViewItem( hmenu );
        }

        _wpi_enablemenuitem( hmenu, IMGED_CRESET, FALSE, FALSE );
        _wpi_enablemenuitem( hmenu, IMGED_RCOLOUR, FALSE, FALSE );
#ifndef __OS2_PM__
        // not necessary for PM
        InitMenus( hmenu );
#endif
        SetHintText( IEAppTitle );
        return 0;
#ifdef __NT__
    case WM_DROPFILES:
        OpenImage((HANDLE)wparam);
        break;
#endif
    case WM_MOVE:
        _wpi_getwindowrect( hwnd, &rcmain );
        if( !ImgedConfigInfo.ismaximized ) {
            ImgedConfigInfo.last_xpos = ImgedConfigInfo.x_pos;
            ImgedConfigInfo.last_ypos = ImgedConfigInfo.y_pos;
            _wpi_getrectvalues( rcmain, &left, &top, NULL, NULL );
            ImgedConfigInfo.x_pos = (short)left;
            ImgedConfigInfo.y_pos = (short)top;
        }
        return 0;

    case WM_SIZE:
#ifndef __OS2_PM__
        if (ClientWindow) {
            setClientSize( hwnd );
        }
#else
        resizeClientArea( lparam );
#endif
        ResizeFunctionBar(lparam);
        ResizeStatusBar(lparam);

        if( !_imgwpi_issizeminimized(wparam) &&
                                        !_imgwpi_issizemaximized(wparam) ) {
            _wpi_getwindowrect( hwnd, &rcmain );
            ImgedConfigInfo.width = (short)_wpi_getwidthrect( rcmain );
            ImgedConfigInfo.height = (short)_wpi_getheightrect( rcmain );
            ImgedConfigInfo.ismaximized = FALSE;
        } else {
            ImgedConfigInfo.x_pos = ImgedConfigInfo.last_xpos;
            ImgedConfigInfo.y_pos = ImgedConfigInfo.last_ypos;
            ImgedConfigInfo.ismaximized = _imgwpi_issizemaximized( wparam );
        }
        return FALSE;

    case WM_MENUSELECT:
#ifndef __OS2_PM__
        if( GET_WM_MENUSELECT_FLAGS(wparam, lparam) & MF_SEPARATOR ) {
            break;
        }
        if( GET_WM_MENUSELECT_FLAGS(wparam, lparam) & MF_SYSMENU ) {

⌨️ 快捷键说明

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