📄 ieviewin.c
字号:
/****************************************************************************
*
* 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 <string.h>
#include "ieprofil.h"
static int showState = SW_SHOWNORMAL;
static COLORREF bkgroundColour = BK_WHITE;
static HWND hViewWindow;
static BOOL fOneViewWindow = TRUE;
/*
* drawBorder - Draws the border for the view window.
*/
static void drawBorder( img_node *node )
{
WPI_PRES presborder;
HPEN hgraypen;
HPEN hwhitepen;
HPEN hblackpen;
HPEN holdpen;
WPI_RECT rcclient;
HBRUSH hnewbrush;
HBRUSH holdbrush;
HBRUSH nullbrush;
int width;
int height;
#ifndef __NT__
WPI_POINT pt;
#endif
int top;
int bottom;
presborder = _wpi_getpres( node->viewhwnd );
#if defined (__NT__)
hwhitepen = _wpi_createpen( PS_SOLID, 0, GetSysColor(COLOR_BTNHIGHLIGHT) );
hblackpen = _wpi_createpen( PS_SOLID, 0, GetSysColor(COLOR_BTNTEXT) );
#else
hwhitepen = _wpi_createpen( PS_SOLID, 0, CLR_WHITE );
hblackpen = _wpi_createpen( PS_SOLID, 0, CLR_BLACK );
#endif
GetClientRect(node->viewhwnd, &rcclient);
width = _wpi_getwidthrect( rcclient );
height = _wpi_getheightrect( rcclient );
if (node->imgtype != BITMAP_IMG) {
#if defined (__NT__)
hgraypen = _wpi_createpen( PS_SOLID, 0, GetSysColor(COLOR_BTNSHADOW) );
#else
hgraypen = _wpi_createpen( PS_SOLID, 0, CLR_DARKGRAY );
#endif
holdpen = _wpi_selectobject(presborder, hgraypen );
#if defined (__NT__)
hnewbrush = _wpi_createsolidbrush( GetSysColor(COLOR_BTNFACE) );
#else
hnewbrush = _wpi_createsolidbrush( CLR_PALEGRAY );
#endif
holdbrush = _wpi_selectobject( presborder, hnewbrush );
top = 0;
bottom = height;
top = _wpi_cvth_y( top, height );
bottom = _wpi_cvth_y( bottom, height );
_wpi_rectangle( presborder, 0, top, width, bottom );
/*
* Draws black border and selected background colour in the view window
*/
_wpi_selectobject( presborder, hblackpen );
_wpi_selectobject( presborder, holdbrush );
_wpi_deleteobject( hnewbrush );
hnewbrush = _wpi_createsolidbrush( bkgroundColour );
_wpi_selectobject( presborder, hnewbrush );
top = BORDER_WIDTH - 1;
bottom = height - BORDER_WIDTH + 1;
top = _wpi_cvth_y( top, height );
bottom = _wpi_cvth_y( bottom, height );
#ifndef __NT__
/*
* Draw the border relative to the size of the object being displayed,
* not the window containing it
*/
_wpi_rectangle( presborder, BORDER_WIDTH - 1, top,
node->width + BORDER_WIDTH + 1, top + node->height + 2 );
#endif
_wpi_selectobject(presborder, holdbrush );
_wpi_selectobject( presborder, holdpen );
_wpi_deleteobject( hnewbrush );
} else {
#ifdef __OS2_PM__
// I can't seem to get the thick pen to work so I'm using this
// method.
hgraypen = _wpi_createpen( PS_SOLID, 0, CLR_PALEGRAY );
holdpen = _wpi_selectobject( presborder, hgraypen );
hnewbrush = _wpi_createsolidbrush( CLR_PALEGRAY );
holdbrush = _wpi_selectobject( presborder, hnewbrush );
_wpi_rectangle(presborder, 0, 0, width+1, BORDER_WIDTH+1);
_wpi_rectangle(presborder, 0, 0, BORDER_WIDTH+1, height+1);
_wpi_rectangle(presborder, 0, height-BORDER_WIDTH, width+1, height+1);
_wpi_rectangle(presborder, width-BORDER_WIDTH, 0, width+1, height+1);
_wpi_selectobject( presborder, holdbrush );
_wpi_deleteobject( hnewbrush );
_wpi_selectobject( presborder, holdpen );
_wpi_deleteobject( hgraypen );
#else
#if defined (__NT__)
hgraypen = _wpi_createpen( PS_INSIDEFRAME, BORDER_WIDTH, GetSysColor(COLOR_BTNFACE) );
#else
hgraypen = _wpi_createpen( PS_INSIDEFRAME, BORDER_WIDTH, CLR_PALEGRAY );
#endif
holdpen = _wpi_selectobject( presborder, hgraypen );
nullbrush = _wpi_createnullbrush();
holdbrush = _wpi_selectbrush( presborder, nullbrush );
_wpi_rectangle(presborder, 0, 0, rcclient.right, rcclient.bottom);
_wpi_getoldbrush( presborder, holdbrush );
_wpi_selectobject( presborder, holdpen );
_wpi_deleteobject( hgraypen );
_wpi_deletenullbrush( nullbrush );
#endif
nullbrush = _wpi_createnullbrush();
#if defined (__NT__)
hgraypen = _wpi_createpen( PS_SOLID, 0, GetSysColor(COLOR_BTNSHADOW) );
#else
hgraypen = _wpi_createpen( PS_SOLID, 0, CLR_DARKGRAY );
#endif
holdbrush = _wpi_selectbrush( presborder, nullbrush );
holdpen = _wpi_selectobject( presborder, hgraypen );
top = 0;
bottom = height;
top = _wpi_cvth_y( top, height );
bottom = _wpi_cvth_y( bottom, height );
_wpi_rectangle( presborder, 0, top, width, bottom );
_wpi_selectobject( presborder, hblackpen );
top = BORDER_WIDTH - 1;
bottom = height - BORDER_WIDTH + 1;
top = _wpi_cvth_y( top, height );
bottom = _wpi_cvth_y( bottom, height );
#ifndef __NT__
/*
* Draw the border relative to the size of the object being displayed,
* not the window containing it
*/
_wpi_rectangle( presborder, BORDER_WIDTH - 1, top,
node->width + BORDER_WIDTH + 1, top + node->height + 2 );
#endif
_wpi_selectobject( presborder, holdpen );
_wpi_selectbrush( presborder, holdbrush );
_wpi_deletenullbrush( nullbrush );
}
/*
* Give the view window the 3D effect.
*/
#ifndef __NT__
holdpen = _wpi_selectobject( presborder, hwhitepen );
_wpi_setpoint( &pt, 0, height-1 );
_wpi_cvth_pt( &pt, height );
_wpi_movetoex( presborder, &pt, NULL );
_wpi_setpoint( &pt, 0, 0 );
_wpi_cvth_pt( &pt, height );
_wpi_lineto( presborder, &pt );
pt.x = width;
_wpi_lineto( presborder, &pt );
_wpi_setpoint( &pt, width - BORDER_WIDTH + 1, BORDER_WIDTH - 2 );
_wpi_cvth_pt( &pt, height );
_wpi_movetoex( presborder, &pt, NULL );
pt.y = height - BORDER_WIDTH + 1;
_wpi_cvth_pt( &pt, height );
_wpi_lineto( presborder, &pt );
pt.x = BORDER_WIDTH - 2;
_wpi_lineto( presborder, &pt );
_wpi_selectobject( presborder, hgraypen );
_wpi_setpoint( &pt, BORDER_WIDTH - 2, BORDER_WIDTH - 2 );
_wpi_cvth_pt( &pt, height );
_wpi_lineto( presborder, &pt );
pt.x = width - BORDER_WIDTH + 1;
_wpi_lineto( presborder, &pt );
_wpi_selectobject( presborder, holdpen );
#endif
_wpi_deleteobject( hgraypen );
_wpi_deleteobject( hwhitepen );
_wpi_deleteobject( hblackpen );
_wpi_releasepres( node->viewhwnd, presborder );
} /* drawBorder */
/*
* redrawViewWnd - processes the WM_PAINT message for the view windows.
*/
static void redrawViewWnd( HWND hwnd )
{
WPI_PRES pres;
WPI_PRES hps;
WPI_PRES mempres;
HDC memdc;
HBITMAP bitmap;
HBITMAP oldbitmap;
img_node *node;
PAINTSTRUCT ps;
node = SelectFromViewHwnd( hwnd );
if (!node) return;
hps = _wpi_beginpaint( hwnd, NULL, &ps );
drawBorder( node );
pres = _wpi_getpres( hwnd );
bitmap = CreateViewBitmap( node );
mempres = _wpi_createcompatiblepres( pres, Instance, &memdc );
oldbitmap = _wpi_selectbitmap( mempres, bitmap );
_wpi_bitblt( pres, BORDER_WIDTH, BORDER_WIDTH, node->width, node->height,
mempres, 0, 0, SRCCOPY );
_wpi_getoldbitmap( mempres, oldbitmap );
_wpi_deletebitmap( bitmap );
_wpi_deletecompatiblepres( mempres, memdc );
_wpi_releasepres( hwnd, pres );
_wpi_endpaint( hwnd, hps, &ps );
} /* redrawViewWnd */
/*
* ViewEnumProc - enumerates the child windows and shows the view window
* for each window.
*/
BOOL CALLBACK ViewEnumProc( HWND hwnd, LONG lparam )
{
lparam = lparam;
if ( _wpi_getowner(hwnd) ) {
return 1;
}
if ( _wpi_isiconic(hwnd) ) {
return 1;
} else {
SendMessage( hwnd, UM_SHOWVIEWWINDOW, 0, 0L );
}
return 1;
} /* ViewEnumProc */
/*
* CreateViewWin - Creates the view window
*/
HWND CreateViewWin( int width, int height )
{
HWND hwnd;
#ifdef __OS2_PM__
hwnd = PMCreateViewWin(hViewWindow, fOneViewWindow, &showState, width,
height );
#else
hwnd = WinCreateViewWin(hViewWindow, fOneViewWindow, &showState, width,
height);
#endif
return( hwnd );
} /* CreateViewWin */
/*
* ViewWindowProc - Window procedure for the view window.
*/
MRESULT CALLBACK ViewWindowProc( HWND hwnd, WPI_MSG msg, WPI_PARAM1 wparam,
WPI_PARAM2 lparam )
{
static HMENU sysmenu;
static HWND hframe;
HMENU hmenu;
WPI_RECT rcview;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -