📄 common.h
字号:
* \def GetBValue(rgb)
* \brief Gets the blue component from a RGB triple value \a rgb.
*
* You can make a RGB triple by using MakeRGB.
*
* \sa MakeRGB
*/
#define GetBValue(rgb) ((BYTE)((rgb) >> 16))
/**
* \def MakeRGB(r, g, b)
* \brief Makes a RGB triple value from red \a r, green \a g, and blue \a b components.
*
* \note The red, green, and blue components are all ranged from 0 to 255,
* and the returned value will be a double word.
*
* \sa GetRValue, GetGValue, GetBValue
*/
#define MakeRGB(r, g, b) (((DWORD)((BYTE)(r))) | ((DWORD)((BYTE)(g)) << 8) \
| ((DWORD)((BYTE)(b)) << 16))
/**
* A rectangle defined by coordinates of corners.
*
* \note The lower-right corner does not belong to the rectangle,
* i.e. the bottom horizontal line and the right vertical line are excluded
* from the retangle.
*
* \sa PRECT, GAL_Rect
*/
typedef struct _RECT
{
/**
* the x coordinate of the upper-left corner of the rectangle.
*/
int left;
/**
* the y coordinate of the upper-left corner of the rectangle.
*/
int top;
/**
* the x coordinate of the lower-right corner of the rectangle.
*/
int right;
/**
* the y coordinate of the lower-right corner of the rectangle.
*/
int bottom;
} RECT;
/**
* \var typedef RECT* PRECT
* \brief Data type of the pointer to a RECT.
*
* \sa RECT
*/
typedef RECT* PRECT;
/**
* Point structure.
* \sa PPOINT
*/
typedef struct _POINT
{
/**
* the x coordinate of the point.
*/
int x;
/**
* the y coordinate of the point.
*/
int y;
} POINT;
/**
* \var typedef POINT* PPOINT
* \brief Data type of the pointer to a POINT.
*
* \sa POINT
*/
typedef POINT* PPOINT;
/**
* Size structure of a 2-dimension object.
* \sa PSIZE
*/
typedef struct _SIZE
{
/**
* the extent in x coordinate of a 2D object.
*/
int cx;
/**
* the extent in y coordinate of a 2D object.
*/
int cy;
} SIZE;
/**
* \var typedef SIZE* PSIZE
* \brief Data type of the pointer to a SIZE.
*
* \sa SIZE
*/
typedef SIZE* PSIZE;
/**
* RGB triple structure.
* \sa PRGB, GAL_Color
*/
typedef struct _RGB
{
/**
* the red component of a RGB triple.
*/
BYTE r;
/**
* the green component of a RGB triple.
*/
BYTE g;
/**
* the blue component of a RGB triple.
*/
BYTE b;
/**
* Reserved for alignment, maybe used for the alpha component of a RGB triple.
*/
BYTE a;
} RGB;
typedef RGB* PRGB;
/** @} end of win32_types */
/**
* \defgroup gdi_types Data types for GDI
* @{
*/
/**
* \var typedef Sint8 gal_sint8
* \brief Data type of 8-bit signed integer.
*
* \sa Sint8
*/
typedef Sint8 gal_sint8;
/**
* \var typedef Uint8 gal_uint8
* \brief Data type of 8-bit unsigned integer.
*
* \sa Uint8
*/
typedef Uint8 gal_uint8;
/**
* \var typedef Sint16 gal_sint16
* \brief Data type of 16-bit signed integer.
*
* \sa Sint16
*/
typedef Sint16 gal_sint16;
/**
* \var typedef Uint16 gal_uint16
* \brief Data type of 16-bit unsigned integer.
*
* \sa Uint16
*/
typedef Uint16 gal_uint16;
/**
* \var typedef Sint32 gal_sint16
* \brief Data type of 32-bit signed integer.
*
* \sa Sint32
*/
typedef Sint32 gal_sint32;
/**
* \var typedef Uint32 gal_uint16
* \brief Data type of 32-bit unsigned integer.
*
* \sa Uint32
*/
typedef Uint32 gal_uint32;
/**
* \var typedef signed int gal_sint
* \brief Data type of signed integer.
*/
typedef signed int gal_sint;
/**
* \var typedef unsigned int gal_uint
* \brief Data type of unsigned integer.
*/
typedef unsigned int gal_uint;
/**
* \var typedef Uint32 gal_pixel
* \brief Data type of pixel value
*/
typedef Uint32 gal_pixel;
/**
* \var typedef Uint32 gal_attr
* \brief Data type of attribute value
*/
typedef Uint32 gal_attr;
/**
* \var typedef long fixed.
* \brief Data type of fixed point.
*/
typedef long fixed;
/**
* RGBA quarter structure.
* \sa RGB
*/
typedef struct GAL_Color
{
/**
* the red component of a RGBA quarter.
*/
gal_uint8 r;
/**
* the green component of a RGBA quarter.
*/
gal_uint8 g;
/**
* the blue component of a RGBA quarter.
*/
gal_uint8 b;
/**
* the alpha component of a RGBA quarter.
*/
gal_uint8 a;
} GAL_Color;
/**
* Palette structure.
* \sa GAL_Color
*/
typedef struct GAL_Palette
{
/**
* the number of palette items.
*/
int ncolors;
/**
* the pointer to the array of palette items.
*/
GAL_Color* colors;
} GAL_Palette;
/**
* A rectangle defined by upper-left coordinates and width/height.
* \sa RECT
*/
typedef struct GAL_Rect {
/**
* the coordinates of the upper-left corner of the rectangle.
*/
Sint32 x, y;
/**
* the width and height of the rectangle.
*/
Sint32 w, h;
} GAL_Rect;
/** @} end of gdi_types */
/**
* \defgroup key_defs Macros for key codes and shift status
* @{
*/
/**
* \def MGUI_NR_KEYS
* \brief Number of MiniGUI keys.
*
* The number of MiniGUI keys is defined to 255 by default. This means that
* MiniGUI can destinguish 255 different keys with each has an unique scan code.
* The scan codes below 129 are defined for PC keyboard by default.
* If your system has a large amount of keys, you can define the scan code of keys
* ranged from 1 to 255 in your IAL engine. And your application will receive
* a MSG_KEYDOWN and MSG_KEYUP messages when a key pressed and released, and the
* wParam of the messages will be defined to be equal to the scan code
* of the key.
*
* \sa NR_KEYS, SCANCODE_USER
*/
#define MGUI_NR_KEYS 255
/**
* \def NR_KEYS
* \brief The number of keys defined by Linux operating system.
*
* For a PC box, NR_KEYS is defined to 128 by default. You can define
* some input events from an input device other than keyboard, e.g.
* your remote controller, as key events with different scan codes from
* those of PC's. MiniGUI can support 255 keys, and the constant
* define by MGUI_NR_KEYS.
*
* \sa MGUI_NR_KEYS
*/
#ifndef NR_KEYS
#define NR_KEYS 128
#endif
/**
* \def SCANCODE_USER
* \brief The first key scan code different from OS defined ones.
*
* You can define your special key scan codes like below
*
* \code
* #define SCANCODE_PLAY (SCANCODE_USER)
* #define SCANCODE_STOP (SCANCODE_USER + 1)
* #define SCANCODE_PAUSE (SCANCODE_USER + 2)
* \endcode
*
* to distinguish the keys on your remote controller.
*
* \sa MGUI_NR_KEYS, NR_KEYS
*/
#define SCANCODE_USER (NR_KEYS + 1)
#define SCANCODE_ESCAPE 1
#define SCANCODE_1 2
#define SCANCODE_2 3
#define SCANCODE_3 4
#define SCANCODE_4 5
#define SCANCODE_5 6
#define SCANCODE_6 7
#define SCANCODE_7 8
#define SCANCODE_8 9
#define SCANCODE_9 10
#define SCANCODE_0 11
#define SCANCODE_MINUS 12
#define SCANCODE_EQUAL 13
#define SCANCODE_BACKSPACE 14
#define SCANCODE_TAB 15
#define SCANCODE_Q 16
#define SCANCODE_W 17
#define SCANCODE_E 18
#define SCANCODE_R 19
#define SCANCODE_T 20
#define SCANCODE_Y 21
#define SCANCODE_U 22
#define SCANCODE_I 23
#define SCANCODE_O 24
#define SCANCODE_P 25
#define SCANCODE_BRACKET_LEFT 26
#define SCANCODE_BRACKET_RIGHT 27
#define SCANCODE_ENTER 28
#define SCANCODE_LEFTCONTROL 29
#define SCANCODE_A 30
#define SCANCODE_S 31
#define SCANCODE_D 32
#define SCANCODE_F 33
#define SCANCODE_G 34
#define SCANCODE_H 35
#define SCANCODE_J 36
#define SCANCODE_K 37
#define SCANCODE_L 38
#define SCANCODE_SEMICOLON 39
#define SCANCODE_APOSTROPHE 40
#define SCANCODE_GRAVE 41
#define SCANCODE_LEFTSHIFT 42
#define SCANCODE_BACKSLASH 43
#define SCANCODE_Z 44
#define SCANCODE_X 45
#define SCANCODE_C 46
#define SCANCODE_V 47
#define SCANCODE_B 48
#define SCANCODE_N 49
#define SCANCODE_M 50
#define SCANCODE_COMMA 51
#define SCANCODE_PERIOD 52
#define SCANCODE_SLASH 53
#define SCANCODE_RIGHTSHIFT 54
#define SCANCODE_KEYPADMULTIPLY 55
#define SCANCODE_LEFTALT 56
#define SCANCODE_SPACE 57
#define SCANCODE_CAPSLOCK 58
#define SCANCODE_F1 59
#define SCANCODE_F2 60
#define SCANCODE_F3 61
#define SCANCODE_F4 62
#define SCANCODE_F5 63
#define SCANCODE_F6 64
#define SCANCODE_F7 65
#define SCANCODE_F8 66
#define SCANCODE_F9 67
#define SCANCODE_F10 68
#define SCANCODE_NUMLOCK 69
#define SCANCODE_SCROLLLOCK 70
#define SCANCODE_KEYPAD7 71
#define SCANCODE_CURSORUPLEFT 71
#define SCANCODE_KEYPAD8 72
#define SCANCODE_CURSORUP 72
#define SCANCODE_KEYPAD9 73
#define SCANCODE_CURSORUPRIGHT 73
#define SCANCODE_KEYPADMINUS 74
#define SCANCODE_KEYPAD4 75
#define SCANCODE_CURSORLEFT 75
#define SCANCODE_KEYPAD5 76
#define SCANCODE_KEYPAD6 77
#define SCANCODE_CURSORRIGHT 77
#define SCANCODE_KEYPADPLUS 78
#define SCANCODE_KEYPAD1 79
#define SCANCODE_CURSORDOWNLEFT 79
#define SCANCODE_KEYPAD2 80
#define SCANCODE_CURSORDOWN 80
#define SCANCODE_KEYPAD3 81
#define SCANCODE_CURSORDOWNRIGHT 81
#define SCANCODE_KEYPAD0 82
#define SCANCODE_KEYPADPERIOD 83
#define SCANCODE_LESS 86
#define SCANCODE_F11 87
#define SCANCODE_F12 88
#define SCANCODE_KEYPADENTER 96
#define SCANCODE_RIGHTCONTROL 97
#define SCANCODE_CONTROL 97
#define SCANCODE_KEYPADDIVIDE 98
#define SCANCODE_PRINTSCREEN 99
#define SCANCODE_RIGHTALT 100
#define SCANCODE_BREAK 101 /* Beware: is 119 */
#define SCANCODE_BREAK_ALTERNATIVE 119 /* on some keyboards! */
#define SCANCODE_HOME 102
#define SCANCODE_CURSORBLOCKUP 103 /* Cursor key block */
#define SCANCODE_PAGEUP 104
#define SCANCODE_CURSORBLOCKLEFT 105 /* Cursor key block */
#define SCANCODE_CURSORBLOCKRIGHT 106 /* Cursor key block */
#define SCANCODE_END 107
#define SCANCODE_CURSORBLOCKDOWN 108 /* Cursor key block */
#define SCANCODE_PAGEDOWN 109
#define SCANCODE_INSERT 110
#define SCANCODE_REMOVE 111
#define SCANCODE_PAUSE 119
#define SCANCODE_POWER 120
#define SCANCODE_SLEEP 121
#define SCANCODE_WAKEUP 122
#define SCANCODE_LEFTWIN 125
#define SCANCODE_RIGHTWIN 126
#define SCANCODE_MENU 127
#define SCANCODE_LEFTBUTTON 0x1000
#define SCANCODE_RIGHTBUTTON 0x2000
#define SCANCODE_MIDDLBUTTON 0x4000
/**
* \def KS_CAPTURED
* \brief This status indicate that the mouse is captured by a window when
* the mouse message posted.
*
* You can test the status by AND'ed with lParam of the message, like below:
*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -