📄 wm.h
字号:
/*
*********************************************************************************************************
* uC/GUI V3.98
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* 礐/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : WM.h
Purpose : Windows manager include
----------------------------------------------------------------------
*/
#ifndef WM_H /* Make sure we only include it once */
#define WM_H
#include "GUI_ConfDefaults.h"
#include "GUIType.h" /* Needed because of typedefs only */
#include "WM_GUI.h" /* Some functions needed by GUI routines */
#if defined(__cplusplus)
extern "C" { /* Make sure we have C-declarations in C++ programs */
#endif
/* Support for transparency. Switching it off makes Wm smaller and faster */
#ifndef WM_SUPPORT_TRANSPARENCY
#define WM_SUPPORT_TRANSPARENCY 1 /* Should be defined outside of GUI_WINSUPPORT because of "#if GUI_WINSUPPORT && WM_SUPPORT_TRANSPARENCY" in some files */
#endif
/* This is for tests only. It will fill the invalid area of a window.
Can be used for debugging. */
#ifndef WM_SUPPORT_DIAG
#ifdef WIN32 /* In simulation */
#define WM_SUPPORT_DIAG GUI_WINSUPPORT
#else
#define WM_SUPPORT_DIAG 0
#endif
#endif
/* Make sure we actually have configured windows. If we have not,
there is no point for a windows manager and it will therefor not
generate any code !
*/
#if GUI_WINSUPPORT
/*********************************************************************
*
* Config defaults
*
**********************************************************************
*/
#ifndef WM_ASSERT
#define WM_ASSERT(expr) GUI_DEBUG_ASSERT(expr)
#endif
#ifndef WM_SUPPORT_TOUCH
#define WM_SUPPORT_TOUCH GUI_SUPPORT_TOUCH
#endif
#ifndef WM_SUPPORT_OBSTRUCT
#define WM_SUPPORT_OBSTRUCT 1
#endif
/* Allow older API calls */
#ifndef WM_COMPATIBLE_MODE
#define WM_COMPATIBLE_MODE 1
#endif
/* Send a message if visibility of a window has changed */
#ifndef WM_SUPPORT_NOTIFY_VIS_CHANGED
#define WM_SUPPORT_NOTIFY_VIS_CHANGED 0
#endif
/*
*************************************************************
* *
* Configuration check *
* *
*************************************************************
*/
/*
*************************************************************
* *
* Locking macros *
* *
*************************************************************
For performance reasons, the windows manager uses the same locking mechanisms
as the GUI layer. The advantage is that wiht a single call to GUI_LOCK both
the graphic level and the WM level are covered.
*/
#define WM_LOCK() GUI_LOCK()
#define WM_UNLOCK() GUI_UNLOCK()
/************************************************************
*
* Data types
*
*************************************************************
*/
typedef struct {
int Key, PressedCnt;
} WM_KEY_INFO;
typedef struct {
int NumItems, v, PageSize;
} WM_SCROLL_STATE;
typedef struct {
int Done;
int ReturnValue;
} WM_DIALOG_STATUS;
typedef struct {
int x,y;
U8 State;
U8 StatePrev;
} WM_PID_STATE_CHANGED_INFO;
/*********************************************************************
*
* Messages Ids
The following is the list of windows messages.
*/
#define WM_CREATE 0x0001 /* The first message received, right after client has actually been created */
#define WM_MOVE 0x0003 /* window has been moved (Same as WIN32) */
#define WM_SIZE 0x0005 /* Is sent to a window after its size has changed (Same as WIN32, do not change !) */
#define WM_DELETE 11 /* Delete (Destroy) command: This tells the client to free its data strutures since the window
it is associates with no longer exists.*/
#define WM_TOUCH 12 /* Touch screen message */
#define WM_TOUCH_CHILD 13 /* Touch screen message to ancestors */
#define WM_KEY 14 /* Key has been pressed */
#define WM_PAINT 0x000F /* Repaint window (because content is (partially) invalid */
#if GUI_SUPPORT_MOUSE
#define WM_MOUSEOVER 16 /* Mouse has moved, no key pressed */
#define WM_MOUSEOVER_END 18 /* Mouse has moved, no key pressed */
#endif
#define WM_PID_STATE_CHANGED 17 /* Pointer input device state has changed */
#define WM_GET_INSIDE_RECT 20 /* get inside rectangle: client rectangle minus pixels lost to effect */
#define WM_GET_ID 21 /* Get id of widget */
#define WM_SET_ID 22 /* Set id of widget */
#define WM_GET_CLIENT_WINDOW 23 /* Get window handle of client window. Default is the same as window */
#define WM_CAPTURE_RELEASED 24 /* Let window know that mouse capture is over */
#define WM_INIT_DIALOG 29 /* Inform dialog that it is ready for init */
#define WM_SET_FOCUS 30 /* Inform window that it has gotten or lost the focus */
#define WM_GET_ACCEPT_FOCUS 31 /* Find out if window can accept the focus */
#define WM_NOTIFY_CHILD_HAS_FOCUS 32 /* Sent to parent when child receives / loses focus */
#define WM_NOTIFY_OWNER_KEY 33 /* Some widgets (e.g. listbox) notify owner when receiving key messages */
#define WM_GET_BKCOLOR 34 /* Return back ground color (only frame window and similar) */
#define WM_GET_SCROLL_STATE 35 /* Query state of scroll bar */
#define WM_SET_SCROLL_STATE 36 /* Set scroll info ... only effective for scrollbars */
#define WM_NOTIFY_CLIENTCHANGE 37 /* Client area may have changed */
#define WM_NOTIFY_PARENT 38 /* Notify parent. Information is detailed as notification code */
#define WM_NOTIFY_PARENT_REFLECTION 39 /* Notify parent reflection.
Sometimes send back as a result of the WM_NOTIFY_PARENT message
to let child react on behalf of its parent.
Information is detailed as notification code */
#define WM_NOTIFY_ENABLE 40 /* Enable or disable widget */
#define WM_NOTIFY_VIS_CHANGED 41 /* Visibility of a window has or may have changed */
#define WM_HANDLE_DIALOG_STATUS 42 /* Set or get dialog status */
#define WM_GET_RADIOGROUP 43 /* Send to all siblings and children of a radio control when
selection changed */
#define WM_MENU 44 /* Send to owner window of menu widget */
#define WM_SCREENSIZE_CHANGED 45 /* Send to all windows when size of screen has changed */
#define WM_TIMER 0x0113 /* Timer has expired (Keep the same as WIN32) */
#define WM_WIDGET 0x0300 /* 256 messages reserved for Widget messages */
#define WM_USER 0x0400 /* Reserved for user messages ... (Keep the same as WIN32) */
/*********************************************************************
*
* Notification codes
*
* The following is the list of notification codes send
* with the WM_NOTIFY_PARENT message
*/
#define WM_NOTIFICATION_CLICKED 1
#define WM_NOTIFICATION_RELEASED 2
#define WM_NOTIFICATION_MOVED_OUT 3
#define WM_NOTIFICATION_SEL_CHANGED 4
#define WM_NOTIFICATION_VALUE_CHANGED 5
#define WM_NOTIFICATION_SCROLLBAR_ADDED 6 /* Scroller added */
#define WM_NOTIFICATION_CHILD_DELETED 7 /* Inform window that child is about to be deleted */
#define WM_NOTIFICATION_GOT_FOCUS 8
#define WM_NOTIFICATION_LOST_FOCUS 9
#define WM_NOTIFICATION_SCROLL_CHANGED 10
#define WM_NOTIFICATION_WIDGET 11 /* Space for widget defined notifications */
#define WM_NOTIFICATION_USER 16 /* Space for application (user) defined notifications */
/*********************************************************************
*
* Memory management
*/
#define WM_HWIN GUI_HWIN
#define WM_HWIN_NULL GUI_HMEM_NULL
#define WM_HMEM GUI_HMEM
#define WM_HMEM_NULL GUI_HMEM_NULL
/*********************************************************************
*
* Window defines
*/
#define WM_HBKWIN WM_GetDesktopWindow() /* Handle of background window */
#define WM_UNATTACHED ((WM_HMEM)-1) /* Do not attach to a window */
/*********************************************************************
*
* Window create flags.
* These flags can be passed to the create window
* function as flag-parameter. The flags are combinable using the
* binary or operator.
*/
#define WM_CF_HASTRANS (1<<0) /* Has transparency. Needs to be defined for windows which do not fill the entire
section of their (client) rectangle. */
#define WM_CF_HIDE (0<<1) /* Hide window after creation (default !) */
#define WM_CF_SHOW (1<<1) /* Show window after creation */
#define WM_CF_MEMDEV (1<<2) /* Use memory device for redraws */
#define WM_CF_STAYONTOP (1<<3) /* Stay on top */
#define WM_CF_DISABLED (1<<4) /* Disabled: Does not receive PID (mouse & touch) input */
/* Create only flags ... Not available as status flags */
#define WM_CF_ACTIVATE (1<<5) /* If automatic activation upon creation of window is desired */
#define WM_CF_FGND (0<<6) /* Put window in foreground after creation (default !) */
#define WM_CF_BGND (1<<6) /* Put window in background after creation */
/* Anchor flags */
#define WM_CF_ANCHOR_RIGHT (1<<7) /* Right anchor ... If parent is resized, distance to right will remain const (left is default) */
#define WM_CF_ANCHOR_BOTTOM (1<<8) /* Bottom anchor ... If parent is resized, distance to bottom will remain const (top is default) */
#define WM_CF_ANCHOR_LEFT (1<<9) /* Left anchor ... If parent is resized, distance to left will remain const (left is default) */
#define WM_CF_ANCHOR_TOP (1<<10) /* Top anchor ... If parent is resized, distance to top will remain const (top is default) */
#define WM_CF_CONST_OUTLINE (1<<11) /* Constant outline. This is relevant for transparent windows only. If a window is transparent
and does not have a constant outline, its background is invalided instead of the window itself.
This causes add. computation time when redrawing. */
#define WM_CF_LATE_CLIP (1<<12)
#define WM_CF_MEMDEV_ON_REDRAW (1<<13)
#define WM_CF_RESERVED3 (1<<14)
#define WM_CF_RESERVED4 (1<<15)
/*********************************************************************
*
* Window manager types
*/
typedef struct WM_Obj WM_Obj;
typedef struct WM_OBJ_X WM_OBJ_X;
typedef struct WM_MESSAGE WM_MESSAGE;
typedef void WM_CALLBACK( WM_MESSAGE* pMsg);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -