Main Page | Modules | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals | Related Pages

skin.h

Go to the documentation of this file.
00001 
00021 /*
00022  * $Id: skin.h,v 1.47.2.9 2006/06/05 09:23:13 xwyan Exp $
00023  *
00024  *             MiniGUI for Linux/uClinux, eCos, uC/OS-II, VxWorks, 
00025  *                     pSOS, ThreadX, NuCleus, OSE, and Win32 version 1.6.x
00026  *
00027  *             Copyright (C) 2002-2006 Feynman Software.
00028  *             Copyright (C) 1998-2002 Wei Yongming.
00029  */
00030 
00031 
00032 #ifndef _MGUI_SKIN_H
00033 #define _MGUI_SKIN_H
00034 
00035 #ifdef _EXT_SKIN
00036 
00049 /* skin messages (send to items) */
00050 #define SKIN_MSG_LBUTTONDOWN    1
00051 #define SKIN_MSG_LBUTTONUP      2
00052 #define SKIN_MSG_CLICK          3
00053 /*#define SKIN_MSG_DBCLICK      4 */
00054 #define SKIN_MSG_MOUSEMOVE      5
00055 #define SKIN_MSG_MOUSEDRAG      6
00056 #define SKIN_MSG_SETFOCUS       7
00057 #define SKIN_MSG_KILLFOCUS      8
00058 
00059 /* type of item */
00060 
00065 #define SI_TYPE_NRMLABEL        0x10000000
00066 
00071 #define SI_TYPE_BMPLABEL        0x20000000
00072 
00077 #define SI_TYPE_CMDBUTTON       0x30000000
00078 
00083 #define SI_TYPE_CHKBUTTON       0x40000000
00084 
00089 #define SI_TYPE_NRMSLIDER       0x50000000
00090 
00091 #ifdef _FIXED_MATH
00092 
00096 #define SI_TYPE_ROTSLIDER       0x60000000
00097 #endif
00098 
00103 #define SI_TYPE_CONTROL         0x70000000
00104 
00109 #define SI_TYPE_MASK            0xF0000000
00110 
00111 /* type of hittest shape */
00112 
00117 #define SI_TEST_SHAPE_RECT      0x01000000
00118 
00119 #ifdef _USE_NEWGAL
00120 
00125 #define SI_TEST_SHAPE_ELLIPSE   0x02000000
00126 
00131 #define SI_TEST_SHAPE_LOZENGE   0x03000000
00132 
00137 #define SI_TEST_SHAPE_LTRIANGLE 0x04000000
00138 
00143 #define SI_TEST_SHAPE_RTRIANGLE 0x05000000
00144 
00149 #define SI_TEST_SHAPE_UTRIANGLE 0x06000000
00150 
00155 #define SI_TEST_SHAPE_DTRIANGLE 0x07000000
00156 
00157 #endif
00158 
00159 #define SI_TEST_SHAPE_MASK      0x0F000000
00160 
00161 /* common status of item */
00162 
00167 #define SI_STATUS_OK            0x00000001
00168 
00173 #define SI_STATUS_VISIBLE       0x00000002
00174 
00179 #define SI_STATUS_DISABLED      0x00000004
00180 
00185 #define SI_STATUS_HILIGHTED     0x00000008
00186 
00187 #define SI_STATUS_MASK          0x0000000F
00188 
00189 /* status of button item */
00190 
00195 #define SI_BTNSTATUS_CLICKED    0x00000010
00196 
00201 #define SI_BTNSTATUS_CHECKED    SI_BTNSTATUS_CLICKED
00202 #define SI_STATUS_CLICKED       SI_BTNSTATUS_CLICKED
00203 
00204 #define SI_BTNSTATUS_MASK       0x000000F0
00205 
00207 #define SI_CMDBUTTON_2STATE     0x00000100
00208 
00209 /* style of normal slider item */
00210 
00215 #define SI_NRMSLIDER_HORZ       0x00000100
00216 
00221 #define SI_NRMSLIDER_VERT       0x00000200
00222 
00227 #define SI_NRMSLIDER_STATIC     0x00000400
00228 
00229 #ifdef _FIXED_MATH
00230 
00231 /* style of rotation slider item */
00232 
00237 #define SI_ROTSLIDER_CW         0x00000100
00238 
00243 #define SI_ROTSLIDER_ANTICW     0x00000200
00244 
00249 #define SI_ROTSLIDER_STATIC     0x00000400
00250 
00251 #endif /* _FIXED_MATH */
00252 
00253 #define SI_STYLE_MASK           0x0000FF00
00254 
00259 #define CTRL_SKIN               "skin"
00260 
00265 typedef struct skin_item_ops_s skin_item_ops_t;
00266 
00271 typedef struct skin_head_s skin_head_t;
00272 
00274 typedef struct skin_item_s
00275 {
00277     int id;
00278 
00357     DWORD style;
00358 
00360     int x;
00362     int y;
00363 
00365     RECT item_rc;
00366 
00368     int bmp_index;
00369 
00371     char* tip;
00372 
00374     DWORD attached;
00375 
00380     void* type_data;
00381 
00382     /******** start of internal fields ********/
00383     /* The bounding rectangle of the item. */
00384     RECT shape;
00385     /* The hit-test rectangle of the item. */
00386     RECT rc_hittest;
00387     /* The region for mouse hittest. */
00388     CLIPRGN region;
00389     /* The operation routines of the item. */
00390     skin_item_ops_t *ops;
00391     /* The parent skin. */
00392     skin_head_t *hostskin;
00393 } skin_item_t;
00394 
00396 struct skin_item_ops_s
00397 {
00399     int (*init) (skin_head_t*, skin_item_t*);
00401     int (*deinit) (skin_item_t*);
00402 
00404     int (*on_create) (skin_item_t*);
00406     int (*on_destroy) (skin_item_t*);
00407 
00409     void (*draw_bg) (HDC, skin_item_t*);
00411     void (*draw_attached) (HDC, skin_item_t*);
00412 
00420     DWORD (*get_value) (skin_item_t *item);
00428     DWORD (*set_value) (skin_item_t *item, DWORD status);
00429     
00431     int (*item_msg_proc) (skin_item_t* item, int message, 
00432                     WPARAM wparam, LPARAM lparam);
00433 };
00434 
00436 typedef struct sie_slider_s
00437 {
00439     int min_pos;
00441     int max_pos;
00443     int cur_pos;
00444 } sie_slider_t;
00445 
00447 typedef struct si_nrmlabel_s
00448 {
00450     char* label;        
00451 
00453     DWORD color;        
00455     DWORD color_focus;  
00457     DWORD color_click;  
00459     int font_index;
00460 } si_nrmlabel_t;
00461 
00463 typedef struct si_bmplabel_s
00464 {
00466     char* label;
00468     const char* label_chars;
00469 } si_bmplabel_t;
00470 
00472 typedef struct si_nrmslider_s
00473 {
00475     sie_slider_t    slider_info;
00476 
00478     int thumb_bmp_index;
00479 } si_nrmslider_t;
00480 
00481 #ifdef _FIXED_MATH
00482 
00484 typedef struct si_rotslider_s
00485 {
00487     int radius;
00489     int start_deg;
00491     int end_deg;
00493     int cur_pos;
00494 
00496     int thumb_bmp_index;
00497 } si_rotslider_t;
00498 
00499 #endif /* _FIXED_MATH */
00500 
00505 #define SIE_BUTTON_CLICKED      0x00000001
00506 
00511 #define SIE_SLIDER_CHANGED      0x00000002
00512 
00517 #define SIE_GAIN_FOCUS          0x00010000
00518 
00523 #define SIE_LOST_FOCUS          0x00020000
00524 
00542 typedef int (* skin_event_cb_t) (HWND hwnd, skin_item_t* item, 
00543                 int event, void* data);
00548 #define MSG_CB_GOON     0
00549 
00554 #define MSG_CB_DEF_GOON 1
00555 
00560 #define MSG_CB_STOP     2
00561 
00587 typedef int (* skin_msg_cb_t) (HWND hwnd, int message, 
00588                 WPARAM wparam, LPARAM lparam, int* result);
00589 
00594 #define SKIN_STYLE_NONE     0x00000000
00595 
00600 #define SKIN_STYLE_TOOLTIP  0x00000001
00601 
00606 #define SKIN_STYLE_MODAL    0x00000002
00607 
00609 struct skin_head_s
00610 {
00612     char* name;
00613 
00619     DWORD style;
00620 
00622     const BITMAP* bmps;
00624     const LOGFONT* fonts;
00625 
00627     int bk_bmp_index;
00628 
00630     int nr_items;
00632     skin_item_t* items;
00633 
00635     DWORD attached;
00636 
00637     /******** start of internal fields ********/
00638 
00639     /* The event callback function of the skin. */
00640     skin_event_cb_t event_cb;
00641 
00642     /* The window message procedure of the skin window. */
00643     skin_msg_cb_t msg_cb;
00644 
00645     /**** The fields initialized when skin_init called. ****/
00646     /* The rectangle heap for hit-test regions. */
00647     BLOCKHEAP rc_heap;
00648 
00649     /**** 
00650      * The fields initialized when create_skin_main_window or 
00651      * create_skin_control called.
00652      ****/
00653     /* The handle of window in which the skin locates. */
00654     HWND hwnd;
00655     /* The handle of tool tip window. */
00656     HWND tool_tip;
00657 
00658     /* The old x and y. */
00659     int oldx, oldy;
00660     /* The current hilighted item. */
00661     skin_item_t* hilighted;
00662 
00663     /* cached identifier. */
00664     int cached_id;
00665     /* the item whose identifier is cached_id. */
00666     skin_item_t* cached_item;
00667 };
00668 
00687 MGEXT_EXPORT BOOL skin_init (skin_head_t* skin, 
00688                 skin_event_cb_t event_cb, skin_msg_cb_t msg_cb);
00689 
00700 MGEXT_EXPORT void skin_deinit (skin_head_t* skin);
00701 
00729 MGEXT_EXPORT HWND create_skin_main_window_ex (skin_head_t* skin, HWND hosting, 
00730                 int x, int y, int w, int h, DWORD dwExStyle, BOOL modal);
00735 #define create_skin_main_window(skin, hosting, x, y, w, h, modal) \
00736                 create_skin_main_window_ex (skin, hosting, x, y, w, h, 0, modal);
00737 
00769 MGEXT_EXPORT HWND create_skin_control (skin_head_t* skin, HWND parent, 
00770                 int id, int x, int y, int w, int h);
00771 
00785 MGEXT_EXPORT BOOL is_skin_main_window (HWND hwnd);
00786 
00797 MGEXT_EXPORT void destroy_skin_window (HWND hwnd);
00798 
00813 MGEXT_EXPORT skin_head_t* set_window_skin (HWND hwnd, skin_head_t *new_skin);
00814 
00827 MGEXT_EXPORT skin_head_t* get_window_skin (HWND hwnd);
00828 
00843 static inline skin_event_cb_t skin_set_event_cb (skin_head_t* skin, 
00844                 skin_event_cb_t event_cb)
00845 {
00846     skin_event_cb_t old = skin->event_cb;
00847     skin->event_cb = event_cb;
00848     return old;
00849 }
00850 
00865 static inline skin_msg_cb_t skin_set_msg_cb (skin_head_t* skin, 
00866                 skin_msg_cb_t msg_cb)
00867 {
00868     skin_msg_cb_t old = skin->msg_cb;
00869     skin->msg_cb = msg_cb;
00870     return old;
00871 }
00872 
00886 MGEXT_EXPORT skin_item_t* skin_get_item (skin_head_t* skin, int id);
00887 
00901 MGEXT_EXPORT DWORD skin_get_item_status (skin_head_t* skin, int id);
00902 
00913 MGEXT_EXPORT skin_item_t* skin_get_hilited_item (skin_head_t* skin);
00914 
00929 MGEXT_EXPORT DWORD skin_show_item (skin_head_t* skin, int id, BOOL show);
00930 
00944 MGEXT_EXPORT DWORD skin_enable_item (skin_head_t* skin, int id, BOOL enable);
00945 
00959 MGEXT_EXPORT skin_item_t* skin_set_hilited_item (skin_head_t* skin, int id);
00960 
00975 MGEXT_EXPORT BOOL skin_get_check_status (skin_head_t* skin, int id);
00976 
00992 MGEXT_EXPORT DWORD skin_set_check_status (skin_head_t* skin, 
00993                 int id, BOOL check);
00994 
01010 MGEXT_EXPORT const char* skin_get_item_label (skin_head_t* skin, int id);
01011 
01028 MGEXT_EXPORT BOOL skin_set_item_label (skin_head_t* skin, 
01029                 int id, const char* label);
01030 
01045 MGEXT_EXPORT HWND skin_get_control_hwnd (skin_head_t* skin, int id);
01046 
01060 MGEXT_EXPORT int skin_get_thumb_pos (skin_head_t* skin, int id);
01061 
01078 MGEXT_EXPORT BOOL skin_set_thumb_pos (skin_head_t* skin, int id, int pos);
01079 
01097 MGEXT_EXPORT BOOL skin_get_slider_info (skin_head_t* skin, 
01098                 int id, sie_slider_t* sie);
01099 
01115 MGEXT_EXPORT BOOL skin_set_slider_info (skin_head_t* skin, 
01116                 int id, const sie_slider_t* sie);
01117 
01136 MGEXT_EXPORT int skin_scale_slider_pos (const sie_slider_t* org, 
01137                 int new_min, int new_max);
01138 
01139 #ifdef __cplusplus
01140 }
01141 #endif  /* __cplusplus */
01142 
01147 #endif /* _EXT_SKIN */
01148 
01149 #endif /* _MGUI_SKIN_H */
01150 

Generated on Mon Jun 26 13:54:27 2006 for MiniGUI V1.6.9 API Reference by  doxygen 1.4.2