gui.h

来自「开放源码的编译器open watcom 1.6.0版的源代码」· C头文件 代码 · 共 976 行 · 第 1/3 页

H
976
字号
/****************************************************************************
*
*                            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:  Master GUI library include file.
*
****************************************************************************/


#include "bool.h"
#ifdef UNIX
    #include "clibext.h"
#endif

#include "guimem.h"

typedef int gui_ord;

#define GUI_LAST_INTERNAL_MSG 255

#define GUI_LAST_MENU_ID 10000

typedef enum {
    GUI_NO_EVENT,
    GUI_INIT_WINDOW,
    GUI_INIT_DIALOG,
    GUI_NOT_ACTIVE,
    GUI_NOW_ACTIVE,
    GUI_MOVE,
    GUI_RESIZE,
    GUI_ICONIFIED,
    GUI_FONT_CHANGED,
    GUI_PAINT,
    GUI_KEYDOWN,         /* keystroke messages */
    GUI_KEYUP,
    GUI_KEY_CONTROL,
    GUI_SCROLL_UP,       /* scrolling messages */
    GUI_SCROLL_PAGE_UP,
    GUI_SCROLL_TOP,
    GUI_SCROLL_DOWN,
    GUI_SCROLL_PAGE_DOWN,
    GUI_SCROLL_BOTTOM,
    GUI_SCROLL_VERTICAL,
    GUI_SCROLL_LEFT,
    GUI_SCROLL_PAGE_LEFT,
    GUI_SCROLL_FULL_LEFT,
    GUI_SCROLL_RIGHT,
    GUI_SCROLL_PAGE_RIGHT,
    GUI_SCROLL_FULL_RIGHT,
    GUI_SCROLL_HORIZONTAL,
    GUI_CLICKED,                /* menu clicked        */
    GUI_CONTROL_DCLICKED,       /* control double clicked */
    GUI_LBUTTONDOWN,      /* mouse messages                 */
    GUI_LBUTTONUP,
    GUI_LBUTTONDBLCLK,
    GUI_RBUTTONDOWN,
    GUI_RBUTTONUP,
    GUI_RBUTTONDBLCLK,
    GUI_MOUSEMOVE,
    GUI_TOOLBAR_DESTROYED,      /* toolbar messages */
    GUI_TOOLBAR_FIXED,
    GUI_TOOLBAR_FLOATING,
    GUI_CLOSE,
    GUI_DESTROY,
    GUI_HSCROLL_NOTIFY,
    GUI_VSCROLL_NOTIFY,
    GUI_CONTROL_NOT_ACTIVE,
    GUI_CONTROL_CLICKED,        /* control clicked */
    GUI_INITMENUPOPUP,          /* popup menu about to open */
    GUI_CONTROL_RCLICKED,       /* control right clicked */
    GUI_DIALOG_ESCAPE,          /* escape was pressed in a dialog */
    GUI_STATUS_CLEARED,         /* the text in the status line was cleared */
    GUI_QUERYENDSESSION,        /* the windowing system is asking if we can close */
                                /* if you return FALSE your session indicating
                                   that it is OK by it to shutdown the
                                   windowing subsystem */
    GUI_ENDSESSION,             /* the windowing system is telling us we must close */
    GUI_KEYTOITEM,
    GUI_ACTIVATEAPP,
    GUI_CONTEXTHELP,            /* the F1 key has been pressed */
    GUI_TIMER_EVENT
} gui_event;

typedef struct gui_coord {
    gui_ord x;
    gui_ord y;
} gui_coord;

typedef struct gui_point {
    int x;
    int y;
} gui_point;

typedef struct gui_window gui_window;

typedef enum {
    GUI_BAD_CLASS = -1,
    GUI_PUSH_BUTTON,
    GUI_DEFPUSH_BUTTON,
    GUI_RADIO_BUTTON,
    GUI_CHECK_BOX,
    GUI_COMBOBOX,
    GUI_EDIT,
    GUI_LISTBOX,
    GUI_SCROLLBAR,
    GUI_STATIC,
    GUI_GROUPBOX,
    GUI_EDIT_COMBOBOX,
    GUI_EDIT_MLE,
    GUI_NUM_CONTROL_CLASSES,
    GUI_FIRST_CONTROL_CLASS = GUI_PUSH_BUTTON,
    GUI_LAST_CONTROL_CLASS = GUI_EDIT_MLE
} gui_control_class;

typedef enum {
    GUI_MENU_PLAIN,
    GUI_MENU_STANDOUT,
    GUI_MENU_GRAYED,
    GUI_MENU_ACTIVE,
    GUI_MENU_ACTIVE_STANDOUT,
    GUI_BACKGROUND,
    GUI_MENU_FRAME,
    GUI_TITLE_INACTIVE,
    GUI_FRAME_ACTIVE,
    GUI_FRAME_INACTIVE,
    GUI_ICON,
    GUI_MENU_GRAYED_ACTIVE,
    GUI_FRAME_RESIZE,
    GUI_FIRST_ATTR = GUI_MENU_PLAIN,
    GUI_LAST_ATTR  = GUI_FRAME_RESIZE,
    GUI_FIRST_UNUSED = GUI_LAST_ATTR + 1,
    GUI_NUM_ATTRS = GUI_LAST_ATTR + 1
} gui_attr;

typedef enum {
    GUI_DLG_NORMAL,
    GUI_DLG_FRAME,
    GUI_DLG_SHADOW,
    GUI_DLG_SCROLL_ICON,
    GUI_DLG_SCROLL_BAR,
    GUI_DLG_BUTTON_PLAIN,
    GUI_DLG_BUTTON_STANDOUT,
    GUI_DLG_BUTTON_ACTIVE,
    GUI_DLG_BUTTON_ACTIVE_STANDOUT,
    GUI_DLG_NUM_ATTRS
} gui_dlg_attr;

typedef enum {
    GUI_ENABLED         = 0x00,
    GUI_MENU_CHECKED    = 0x01,
    GUI_GRAYED          = 0x02,
    GUI_SEPARATOR       = 0x04,
    GUI_IGNORE          = 0x08, // don't display
    GUI_MDIWINDOW       = 0x10,
    GUI_UTIL_1          = 0x40, // can be used by the application
    GUI_UTIL_2          = 0x80
} gui_menu_styles ;

typedef unsigned long gui_help_instance;

typedef enum {
    GUI_HELP_CONTENTS
,   GUI_HELP_ON_HELP
,   GUI_HELP_SEARCH
,   GUI_HELP_CONTEXT
,   GUI_HELP_KEY
} gui_help_actions;

typedef long gui_bitmap;

typedef struct gui_toolbar_struct {
    char                *label;
    gui_bitmap          bitmap;
    int                 id;
    char                *hinttext;
} gui_toolbar_struct;

typedef struct gui_menu_struct {
    char                        *label;
    int                         id;
    gui_menu_styles             style;
    char                        *hinttext;
    int                         num_child_menus;
    struct gui_menu_struct      *child;
} gui_menu_struct;

typedef enum {
        GUI_BAD_COLOUR = -1,
        GUI_BLACK,
        GUI_BLUE,
        GUI_GREEN,
        GUI_CYAN,
        GUI_RED,
        GUI_MAGENTA,
        GUI_BROWN,
        GUI_WHITE,
        GUI_GREY,
        GUI_BRIGHT_BLUE,
        GUI_BRIGHT_GREEN,
        GUI_BRIGHT_CYAN,
        GUI_BRIGHT_RED,
        GUI_BRIGHT_MAGENTA,
        GUI_BRIGHT_YELLOW,
        GUI_BRIGHT_WHITE,
        GUI_NUM_COLOURS,
        GUI_FIRST_COLOUR = GUI_BLACK,
        GUI_LAST_COLOUR = GUI_BRIGHT_WHITE
} gui_colour;

#define GUI_NORMAL GUI_BLACK            // for NEC PC
#define GUI_REVERSE GUI_WHITE           // for NEC PC
#define GUI_YELLOW GUI_BROWN            // for NEC PC

typedef struct gui_colour_set {
    gui_colour fore;
    gui_colour back;
} gui_colour_set;

typedef unsigned long gui_rgb;

#define GUIRGB(r,g,b)          ((gui_rgb)(((unsigned char)(r)) | (((unsigned short)(g))<<8) | (((unsigned long)(b))<<16)))

#define GUIGETRVALUE(rgb)       ((rgb) & 0xff)
#define GUIGETGVALUE(rgb)       (((rgb) & 0xff00 ) >> 8)
#define GUIGETBVALUE(rgb)       (((rgb) & 0xff0000) >> 16)

typedef struct gui_rect {
    gui_ord     x;
    gui_ord     y;
    gui_ord     width;
    gui_ord     height;
} gui_rect;

typedef enum gui_scroll_styles {
    GUI_NOSCROLL        = 0x00,
    GUI_HSCROLL         = 0x01,
    GUI_VSCROLL         = 0x02,
    GUI_HDRAG           = 0x04, /* change position by draging thumb */
    GUI_VDRAG           = 0x08, /* change position by draging thumb */
    GUI_HTRACK          = 0x10, /* scroll while dragging thumb */
    GUI_VTRACK          = 0x20, /* scroll while dragging thumb */
    GUI_HCOLS           = 0x40, /* scroll by average character width */
    GUI_VROWS           = 0x80, /* scroll by average character height */
    GUI_HSCROLL_ALL     = GUI_HSCROLL | GUI_HDRAG | GUI_HTRACK | GUI_HCOLS,
    GUI_VSCROLL_ALL     = GUI_VSCROLL | GUI_VDRAG | GUI_VTRACK | GUI_VROWS,
    GUI_SCROLL_BOTH     = GUI_HSCROLL | GUI_VSCROLL | GUI_HCOLS | GUI_VROWS,
    GUI_SCROLL_BOTH_ALL = GUI_HSCROLL_ALL | GUI_VSCROLL_ALL
} gui_scroll_styles;

typedef enum gui_create_styles {
    GUI_NONE            = 0x0000,
    GUI_HSCROLL_EVENTS  = 0x0001,
    GUI_VSCROLL_EVENTS  = 0x0002,
    GUI_CURSOR          = 0x0004,
    GUI_RESIZEABLE      = 0x0008,
    GUI_MAXIMIZE        = 0x0010,
    GUI_MINIMIZE        = 0x0020,
    GUI_CLOSEABLE       = 0x0040,
    GUI_SYSTEM_MENU     = 0x0080,
    GUI_VISIBLE         = 0x0100,
    GUI_DIALOG_LOOK     = 0x0200,
    GUI_INIT_INVISIBLE  = 0x0400,
    GUI_CHANGEABLE_FONT = 0x0800,
    GUI_POPUP           = 0x1000,
    GUI_INIT_MAXIMIZED  = 0x2000,
    GUI_INIT_MINIMIZED  = 0x4000,
    GUI_NOFRAME         = 0x8000,
    GUI_SCROLL_EVENTS   = GUI_HSCROLL_EVENTS | GUI_VSCROLL_EVENTS,
    GUI_GADGETS         = GUI_CURSOR | GUI_RESIZEABLE | GUI_MINIMIZE |
                          GUI_MAXIMIZE | GUI_CLOSEABLE | GUI_SYSTEM_MENU,
    GUI_ALL             = GUI_GADGETS | GUI_VISIBLE | GUI_CHANGEABLE_FONT
} gui_create_styles;

typedef enum gui_control_styles {
    GUI_NOSTYLE                         = 0x00,
    GUI_CHECKED                         = 0x01,
    GUI_TAB_GROUP                       = 0x02,
    GUI_AUTOMATIC                       = 0x04,
    GUI_GROUP                           = 0x08,
    GUI_FOCUS                           = 0x10,
    GUI_CONTROL_INIT_INVISIBLE          = 0x20,
    GUI_CONTROL_LEFTNOWORDWRAP          = 0x40,
    GUI_CONTROL_NOPREFIX                = 0x80,
    GUI_CONTROL_CENTRE                  = 0x100,
    GUI_CONTROL_NOINTEGRALHEIGHT        = 0x200,
    GUI_CONTROL_SORTED                  = 0x400,
    GUI_CONTROL_MULTILINE               = 0x800,
    GUI_CONTROL_WANTRETURN              = 0x1000,
    GUI_EDIT_INVISIBLE                  = 0x2000,
    GUI_CONTROL_3STATE                  = 0x4000,
    GUI_CONTROL_WANTKEYINPUT            = 0x8000,
    GUI_CONTROL_READONLY                = 0x10000
} gui_control_styles;

typedef enum gui_line_styles {
    GUI_PEN_SOLID       = 0x00,
    GUI_PEN_DASH        = 0x01,
    GUI_PEN_DOT         = 0x02,
    GUI_PEN_DASHDOT     = 0x04,
    GUI_PEN_DASHDOTDOT  = 0x08
} gui_line_styles;

typedef enum gui_bar_styles {
    GUI_BAR_SIMPLE      = 0x01,

⌨️ 快捷键说明

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