📄 window.h
字号:
#define LB_SETTOPINDEX 0xF197
#define LB_GETITEMRECT 0xF198
#define LB_GETITEMDATA 0xF199
#define LB_SETITEMDATA 0xF19A
#define LB_SELITEMRANGE 0xF19B
#define LB_SETANCHORINDEX 0xF19C
#define LB_GETANCHORINDEX 0xF19D
#define LB_SETCARETINDEX 0xF19E
#define LB_GETCARETINDEX 0xF19F
#define LB_SETITEMHEIGHT 0xF1A0
#define LB_GETITEMHEIGHT 0xF1A1
#define LB_FINDSTRINGEXACT 0xF1A2
#define LB_SETLOCALE 0xF1A5
#define LB_GETLOCALE 0xF1A6
#define LB_SETCOUNT 0xF1A7
#define LB_INITSTORAGE 0xF1A8
#define LB_ITEMFROMPOINT 0xF1A9
#define LB_SETTEXT 0xF1AA
#define LB_GETCHECKMARK 0xF1AB
#define LB_SETCHECKMARK 0xF1AC
#define LB_GETITEMADDDATA 0xF1AD
#define LB_SETITEMADDDATA 0xF1AE
#define LB_MSGMAX 0xF1B0
// Combo Box messages
#define CB_GETEDITSEL 0xF140
#define CB_LIMITTEXT 0xF141
#define CB_SETEDITSEL 0xF142
#define CB_ADDSTRING 0xF143
#define CB_DELETESTRING 0xF144
#define CB_DIR 0xF145
#define CB_GETCOUNT 0xF146
#define CB_GETCURSEL 0xF147
#define CB_GETLBTEXT 0xF148
#define CB_GETLBTEXTLEN 0xF149
#define CB_INSERTSTRING 0xF14A
#define CB_RESETCONTENT 0xF14B
#define CB_FINDSTRING 0xF14C
#define CB_SELECTSTRING 0xF14D
#define CB_SETCURSEL 0xF14E
#define CB_SHOWDROPDOWN 0xF14F
#define CB_GETITEMDATA 0xF150
#define CB_SETITEMDATA 0xF151
#define CB_GETDROPPEDCONTROLRECT 0xF152
#define CB_SETITEMHEIGHT 0xF153
#define CB_GETITEMHEIGHT 0xF154
#define CB_SETEXTENDEDUI 0xF155
#define CB_GETEXTENDEDUI 0xF156
#define CB_GETDROPPEDSTATE 0xF157
#define CB_FINDSTRINGEXACT 0xF158
#define CB_SETLOCALE 0xF159
#define CB_GETLOCALE 0xF15A
#define CB_GETTOPINDEX 0xF15b
#define CB_SETTOPINDEX 0xF15c
#define CB_GETHORIZONTALEXTENT 0xF15d
#define CB_SETHORIZONTALEXTENT 0xF15e
#define CB_GETDROPPEDWIDTH 0xF15f
#define CB_SETDROPPEDWIDTH 0xF160
#define CB_INITSTORAGE 0xF161
#define CB_MSGMAX 0xF162
// Scroll bar messages
#define SBM_SETPOS 0xF0E0 /*not in win3.1 */
#define SBM_GETPOS 0xF0E1 /*not in win3.1 */
#define SBM_SETRANGE 0xF0E2 /*not in win3.1 */
#define SBM_SETRANGEREDRAW 0xF0E6 /*not in win3.1 */
#define SBM_GETRANGE 0xF0E3 /*not in win3.1 */
#define SBM_ENABLE_ARROWS 0xF0E4 /*not in win3.1 */
#define SBM_SETSCROLLINFO 0xF0E9
#define SBM_GETSCROLLINFO 0xF0EA
#define MSG_LASTCTRLMSG 0xFFFF
typedef struct _MSG
{
HWND hwnd;
int message;
WPARAM wParam;
LPARAM lParam;
struct timeval time;
POINT pt;
void* pAdd;
}MSG;
typedef MSG* PMSG;
typedef struct _QMSG
{
MSG Msg;
struct _QMSG* next;
BOOL fromheap;
}QMSG;
typedef QMSG* PQMSG;
typedef struct _SYNCMSG
{
MSG Msg;
int retval;
sem_t sem_handle;
struct _SYNCMSG* pNext;
}SYNCMSG;
typedef SYNCMSG* PSYNCMSG;
#define DEF_MSGQUEUE_LEN 16
// the MSGQUEUE struct is a internal struct.
// using semaphores to implement message queue.
#define QS_NOTIFYMSG 0x00000100
#define QS_SYNCMSG 0x00000200
#define QS_POSTMSG 0x00000400
#define QS_QUIT 0x00000800
#define QS_INPUT 0x00001000
#define QS_PAINT 0x00002000
#define QS_TIMER 0x000000FF
#define QS_EMPTY 0x00000000
typedef struct _MSGQUEUE
{
DWORD dwState; // message queue states
pthread_mutex_t lock; // lock
sem_t wait; // wait semaphores
PQMSG pFirstNotifyMsg; // head of the notify message queue
PQMSG pLastNotifyMsg; // tail of the notify message queue
PSYNCMSG pFirstSyncMsg; // head of the sync message queue
PSYNCMSG pLastSyncMsg; // tail of the sync message queue
MSG* msg; // post message buffer
int len; // buffer len
int readpos, writepos; // positions for reading and writing
/*
* One thread can only support eight timers.
* And number of all timers in a MiniGUI applicatoin is 16.
*/
HWND TimerOwner[8]; // Timer owner
int TimerID[8]; // timer identifiers.
BYTE TimerMask; // used timer slots mask
}MSGQUEUE;
typedef MSGQUEUE* PMSGQUEUE;
// Free QMSG list
#define SIZE_QMSG_HEAP 64
typedef struct _FREEQMSGLIST
{
pthread_mutex_t lock;
PQMSG head;
PQMSG tail;
int nr;
PQMSG heap;
int free;
}FREEQMSGLIST;
typedef FREEQMSGLIST* PFREEQMSGLIST;
BOOL GUIAPI InitMsgQueue(PMSGQUEUE pMsgQueue, int iBufferLen);
void GUIAPI DestroyMsgQueue(PMSGQUEUE pMsgQueue);
int GUIAPI GetMessage(PMSG pMsg, HWND hMainWnd);
BOOL GUIAPI HavePendingMessage(HWND hMainWnd);
#define PM_NOREMOVE 0x0000
#define PM_REMOVE 0x0001
#define PM_NOYIELD 0x0002
BOOL GUIAPI PeekPostMessage (PMSG pMsg, HWND hWnd, int iMsgFilterMin,
int iMsgFilterMax, UINT uRemoveMsg);
int GUIAPI PostMessage(HWND hWnd, int iMsg, WPARAM wParam, LPARAM lParam);
int GUIAPI SendMessage(HWND hWnd, int iMsg, WPARAM wParam, LPARAM lParam);
int GUIAPI PostSyncMessage(HWND hWnd, int iMsg, WPARAM wParam, LPARAM lParam);
int GUIAPI SendAsyncMessage(HWND hWnd, int iMsg, WPARAM wParam, LPARAM lParam);
int GUIAPI SendNotifyMessage(HWND hWnd, int iMsg, WPARAM wParam, LPARAM lParam);
int GUIAPI BroadcastMessage(int iMsg, WPARAM wParam, LPARAM lParam);
int GUIAPI PostQuitMessage(HWND hWnd);
int GUIAPI TranslateMessage(PMSG pMsg);
int GUIAPI DispatchMessage(PMSG pMsg);
int GUIAPI ThrowAwayMessages (HWND pMainWnd);
int GUIAPI TranslateAccelerator(HWND hWnd, HACCEL hAccel, PMSG pMsg);
/******************************* Hooks support *******************************/
#define HOOK_OK 0
#define HHOOK_INVALID -1
#define HOOK_STOP 1
#define HOOK_GOON 2
typedef struct _KEYHOOK
{
HWND hWnd;
KEYMSGHOOK hook;
}KEYHOOK;
typedef struct _MOUSEHOOK
{
HWND hWnd;
MOUSEMSGHOOK hook;
}MOUSEHOOK;
HHOOK GUIAPI RegisterKeyMsgHook (HWND hWnd, KEYMSGHOOK hook);
HHOOK GUIAPI RegisterMouseMsgHook (HWND hWnd, MOUSEMSGHOOK hook);
int GUIAPI UnregisterHook (HHOOK hHook);
/******************************* Style definitions ***************************/
/* Class styles */
#define CS_VREDRAW 0x0001
#define CS_HREDRAW 0x0002
#define CS_OWNDC 0x0020
#define CS_CLASSDC 0x0040
#define CS_PARENTDC 0x0080
#define CS_SAVEBITS 0x0800
#define CS_DBLCLKS 0x0008
#define CS_BYTEALIGNCLIENT 0x1000
#define CS_BYTEALIGNWINDOW 0x2000
#define CS_NOCLOSE 0x0200
#define CS_KEYCVTWINDOW 0x0004
#define CS_NOKEYCVT 0x0100
#define CS_GLOBALCLASS 0x4000
/* Window Styles */
/* Basic window types */
#define WS_OVERLAPPED 0x00000000L
#define WS_POPUP 0x80000000L
#define WS_CHILD 0x40000000L
/* Clipping styles */ // not supported
/* Generic window states */
#define WS_VISIBLE 0x08000000L
#define WS_DISABLED 0x04000000L
/* Main window states */
#define WS_MINIMIZE 0x02000000L
#define WS_MAXIMIZE 0x01000000L
/* Main window styles */
#define WS_CAPTION 0x20000000L
#define WS_SYSMENU 0x10000000L
#define WS_DLGFRAME 0x00800000L
#define WS_BORDER 0x00400000L
#define WS_THICKFRAME 0x00200000L
#define WS_THINFRAME 0x00100000L
#define WS_VSCROLL 0x00080000L
#define WS_HSCROLL 0x00040000L
#define WS_MINIMIZEBOX 0x00020000L
#define WS_MAXIMIZEBOX 0x00010000L
/* Control window styles */
#define WS_GROUP 0x00020000L
#define WS_TABSTOP 0x00010000L
/* Common Window Styles */
#define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED | \
WS_CAPTION | \
WS_SYSMENU | \
WS_THICKFRAME | \
WS_MINIMIZEBOX | \
WS_MAXIMIZEBOX )
#define WS_POPUPWINDOW (WS_POPUP | \
WS_BORDER | \
WS_SYSMENU)
#define WS_CHILDWINDOW (WS_CHILD)
/* Extended Window Styles */
#define WS_EX_NONE 0x00000000L // supported
#define WS_EX_DLGMODALFRAME 0x00000001L
#define WS_EX_USEPRIVATECDC 0x00000002L // supported
#define WS_EX_NOPARENTNOTIFY 0x00000004L
#define WS_EX_TOPMOST 0x00000008L // supported
#define WS_EX_ACCEPTFILES 0x00000010L
#define WS_EX_TRANSPARENT 0x00000020L
#define WS_EX_MDICHILD 0x00000040L
#define WS_EX_TOOLWINDOW 0x00000080L
#define WS_EX_WINDOWEDGE 0x00000100L
#define WS_EX_CLIENTEDGE 0x00000200L
#define WS_EX_CONTEXTHELP 0x00000400L
#define WS_EX_RIGHT 0x00001000L
#define WS_EX_LEFT 0x00000000L
#define WS_EX_RTLREADING 0x00002000L
#define WS_EX_LTRREADING 0x00000000L
#define WS_EX_LEFTSCROLLBAR 0x00004000L
#define WS_EX_RIGHTSCROLLBAR 0x00000000L
#define WS_EX_CONTROLPARENT 0x00010000L
#define WS_EX_STATICEDGE 0x00020000L
#define WS_EX_APPWINDOW 0x00040000L
#define WS_EX_IMECOMPOSE 0x10000000L // supported
#define WS_EX_OVERLAPPEDWINDOW (WS_EX_WINDOWEDGE | \
WS_EX_CLIENTEDGE)
#define WS_EX_PALETTEWINDOW (WS_EX_WINDOWEDGE | \
WS_EX_TOOLWINDOW | \
WS_EX_TOPMOST)
/****** control styles ******************************************************/
/* Static Control Styles */
#define SS_LEFT 0x00000000L
#define SS_CENTER 0x00000001L
#define SS_RIGHT 0x00000002L
#define SS_ICON 0x00000003L
#define SS_BLACKRECT 0x00000004L
#define SS_GRAYRECT 0x00000005L
#define SS_WHITERECT 0x00000006L
#define SS_BLACKFRAME 0x00000007L
#define SS_GRAYFRAME 0x00000008L
#define SS_WHITEFRAME 0x00000009L
#define SS_GROUPBOX 0x0000000AL
#define SS_SIMPLE 0x0000000BL
#define SS_LEFTNOWORDWRAP 0x0000000CL
#define SS_OWNERDRAW 0x0000000DL
#define SS_BITMAP 0x0000000EL
#define SS_ENHMETAFILE 0x0000000FL
#define SS_TYPEMASK 0x0000000FL
#define SS_NOPREFIX 0x00000080L
#define SS_ETCHEDHORZ 0x00000010L
#define SS_ETCHEDVERT 0x00000011L
#define SS_ETCHEDFRAME 0x00000012L
#define SS_ETCTYPEMAKS 0x0000001FL
#define SS_NOTIFY 0x00000100L
#define SS_CENTERIMAGE 0x00000200L
#define SS_RIGHTJUST 0x00000400L
#define SS_REALSIZEIMAGE 0x00000800L
/* not supported styles */
// #define SS_SUNKEN 0x00001000L
// #define SS_ENDELLIPSIS 0x00004000L
// #define SS_PATHELLIPSIS 0x00008000L
// #define SS_WORDELLIPSIS 0x0000C000L
// #define SS_ELLIPSISMASK 0x0000C000L
/* Button Styles */
#define BS_PUSHBUTTON 0x00000000L
#define BS_DEFPUSHBUTTON 0x00000001L
#define BS_CHECKBOX 0x00000002L
#define BS_AUTOCHECKBOX 0x00000003L
#define BS_RADIOBUTTON 0x00000004L
#define BS_3STATE 0x00000005L
#define BS_AUTO3STATE 0x00000006L
#define BS_GROUPBOX 0x00000007L
#define BS_USERBUTTON 0x00000008L
#define BS_AUTORADIOBUTTON 0x00000009L
#define BS_OWNERDRAW 0x0000000BL
#define BS_TYPEMASK 0x0000000FL
#define BS_TEXT 0x00000000L
#define BS_LEFTTEXT 0x00000020L
#define BS_ICON 0x00000040L
#define BS_BITMAP 0x00000080L
#define BS_CONTENTMASK 0x000000F0L
#define BS_LEFT 0x00000100L
#define BS_RIGHT 0x00000200L
#define BS_CENTER 0x00000300L
#define BS_TOP 0x00000400L
#define BS_BOTTOM 0x00000800L
#define BS_VCENTER 0x00000C00L
#define BS_ALIGNMASK 0x00000F00L
#define BS_PUSHLIKE 0x00001000L
#define BS_MULTLINE 0x00002000L
#define BS_NOTIFY 0x00004000L
#define BS_FLAT 0x00008000L
#define BS_RIGHTBUTTON BS_LEFTTEXT
#define BST_UNCHECKED 0x0000
#define BST_CHECKED 0x0001
#define BST_INDETERMINATE 0x0002
#define BST_PUSHED 0x0004
#define BST_FOCUS 0x0008
/* User Button notification codes */
#define BN_CLICKED 0
#define BN_PAINT 1
#define BN_HILITE 2
#define BN_UNHILITE 3
#define BN_DISABLE 4
#define BN_DOUBLECLICKED 5
#define BN_PUSHED BN_HILITE
#define BN_UNPUSHED BN_UNHILITE
#define BN_DBLCLK BN_DOUBLECLICKED
#define BN_SETFOCUS 6
#define BN_KILLFOCUS 7
/* Edit control styles */
#define ES_LEFT 0x00000000L
#define ES_CENTER 0x00000001L
#define ES_RIGHT 0x00000002L
#define ES_MULTILINE 0x00000004L
#define ES_UPPERCASE 0x00000008L
#define ES_LOWERCASE 0x00000010L
#define ES_PASSWORD 0x00000020L
#define ES_AUTOVSCROLL 0x00000040L
#define ES_AUTOHSCROLL 0x00000080L
#define ES_NOHIDESEL 0x00000100L
#define ES_OEMCONVERT 0x00000400L
#define ES_READONLY 0x00000800L
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -