/////////////////////////////////////////////////////////////////////////////// // // IMPORTANT NOTICE // // The following open source license statement does not apply to any // entity in the Exception List published by FMSoft. // // For more information, please visit: // // https://www.fmsoft.cn/exception-list // ////////////////////////////////////////////////////////////////////////////// /* * This file is part of MiniGUI, a mature cross-platform windowing * and Graphics User Interface (GUI) support system for embedded systems * and smart IoT devices. * * Copyright (C) 2002~2018, Beijing FMSoft Technologies Co., Ltd. * Copyright (C) 1998~2002, WEI Yongming * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Or, * * As this program is a library, any link to this program must follow * GNU General Public License version 3 (GPLv3). If you cannot accept * GPLv3, you need to be licensed from FMSoft. * * If you have got a commercial license of this program, please use it * under the terms and conditions of the commercial license. * * For more information about the commercial license, please refer to * . */ /* ** ctrlclass.h: the head file of Control Class module. ** ** Create date: 1999/5/21 */ #ifndef GUI_CTRLCLASS_H #define GUI_CTRLCLASS_H #define MAXLEN_CLASSNAME 31 typedef struct _CTRLCLASSINFO { char name[MAXLEN_CLASSNAME + 1]; // class name /* * common properties of this class */ DWORD dwStyle; // Default control styles. DWORD dwExStyle; // Default control extended styles. HCURSOR hCursor; // control cursor gal_pixel iFgColor; // control foreground color. gal_pixel iBkColor; // control background color. LRESULT (*ControlProc)(HWND, UINT, WPARAM, LPARAM); // control procedure. DWORD dwAddData; // the additional data. int nUseCount; // use count. struct _CTRLCLASSINFO* next; // next class info }CTRLCLASSINFO; typedef CTRLCLASSINFO* PCTRLCLASSINFO; typedef struct tagCONTROL { /* * These fields are similiar with MAINWIN struct. */ int left, top; // the position of control in main window's int right, bottom; // client area. int cl, ct; // the positio of control client in main window's int cr, cb; // client area. DWORD dwStyle; // the styles of child window. DWORD dwExStyle; // the extended styles of child window. gal_pixel iFgColor; // control foreground color. gal_pixel iBkColor; // control background color. HMENU hMenu; // handle of menu. HACCEL hAccel; // handle of accelerator table. HCURSOR hCursor; // handle of cursor. HICON hIcon; // handle of icon. HMENU hSysMenu; // handle of system menu. PLOGFONT pLogFont; // pointer to logical font. char* spCaption; // the caption of control. LINT id; // the identifier of child window. LFSCROLLBARINFO vscroll; // the vertical scroll bar information. LFSCROLLBARINFO hscroll; // the horizital scroll bar information. /** the window renderer */ WINDOW_ELEMENT_RENDERER* we_rdr; HDC privCDC; // the private client DC. INVRGN InvRgn; // the invalid region of this control. #ifdef _MGSCHEMA_COMPOSITING struct GAL_Surface* surf; // the shared surface of this main window. #else PGCRINFO pGCRInfo; // pointer to global clip region info struct. #endif // the Z order node, // only for control with WS_EX_CTRLASMAINWIN. int idx_znode; PCARETINFO pCaretInfo; // pointer to system caret info struct. DWORD dwAddData; // the additional data. DWORD dwAddData2; // the second addtional data. LRESULT (*ControlProc) (HWND, UINT, WPARAM, LPARAM); PMAINWIN pMainWin; // the main window that contains this control. struct tagCONTROL* pParent;// the parent of this control. /* * Child windows. */ struct tagCONTROL* children; // the first child control. struct tagCONTROL* active; // the active child control. struct tagCONTROL* old_under_pointer; // the old under pointer child control. struct tagCONTROL* primitive; // the primitive child of mouse event. NOTIFPROC notif_proc; // the notification callback procedure. /* * window element data. */ struct _wnd_element_data* wed; /* * some internal fields * VM[2018-01-18]: Move these fields from header to here to compatible with WINDOWINFO */ unsigned char DataType; // the data type unsigned char WinType; // the window type unsigned short Flags; // speical runtime flags, such EraseBkGnd flags /* * The following members are only implemented for control. */ struct tagCONTROL* next; // the next sibling control. struct tagCONTROL* prev; // the prev sibling control. PCTRLCLASSINFO pcci; // pointer to Control Class Info struct. MASKRECT * mask_rects; //if a control is has WS_EX_CTRLASMAINWIN, this proc is the next control as main window /* * MainWindow->hFirstChildAsMainWin ---> * control1->next_ctrl_as_main ----> * control2->next_ctrl_as_main ----> * ..... * * Control have to list, one for browsers, the other for as main cotrol list: * * hFirstChild : * control1->next--> * control2->next--> * control3->next--> * .... * * hFirstChildAsMainWin: * control1->next_ctrl_as_main --> * control2-> ..... * * THE TWO LIST USE A SAME CONTROL OBJECT, * So, When Destroy a Control: YOU MUST REMOVE * ITSELF FROM PARENT'S hFirstChildAsMainWin'S LIST * */ struct tagCONTROL* next_ctrl_as_main; }CONTROL; typedef CONTROL* PCONTROL; /* Function definitions */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ BOOL mg_InitControlClass (void); void mg_TerminateControlClass (void); PCTRLCLASSINFO gui_GetControlClassInfo (const char* szClassName); int gui_ControlClassDataOp (int Operation, PWNDCLASS pWndClass); int gui_DeleteControlClass (const char* szClassName); void gui_EmptyControlClassInfoTable (void); PCONTROL gui_Control (HWND hWnd); // check whether hWnd is control // and return pointer to control hWnd. /* Undisclosed APIs */ MG_EXPORT int AddNewControlClass (PWNDCLASS pWndClass); MG_EXPORT BOOL SetWindowExStyle (HWND hWnd, DWORD dwExStyle); #ifdef _DEBUG_CTRL void dbg_DumpCtrlClassInfoTable (void); #endif #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* GUI_CTRLCLASS_H */