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 
00022 /*
00023  * $Id: skin.h,v 1.58 2006/06/11 04:20:37 weiym Exp $
00024  *
00025  *             MiniGUI for Linux/uClinux, eCos, uC/OS-II, VxWorks, 
00026  *                     pSOS, ThreadX, NuCleus, OSE, and Win32.
00027  *
00028  *             Copyright (C) 2002-2006 Feynman Software.
00029  *             Copyright (C) 1998-2002 Wei Yongming.
00030  */
00031 
00032 
00033 #ifndef _MGUI_SKIN_H
00034 #define _MGUI_SKIN_H
00035 
00036 #ifdef _EXT_SKIN
00037 
00050 /* skin messages (send to items) */
00051 #define SKIN_MSG_LBUTTONDOWN    1
00052 #define SKIN_MSG_LBUTTONUP      2
00053 #define SKIN_MSG_CLICK          3
00054 /*#define SKIN_MSG_DBCLICK      4 */
00055 #define SKIN_MSG_MOUSEMOVE      5
00056 #define SKIN_MSG_MOUSEDRAG      6
00057 #define SKIN_MSG_SETFOCUS       7
00058 #define SKIN_MSG_KILLFOCUS      8
00059 
00060 /* type of item */
00061 
00066 #define SI_TYPE_NRMLABEL        0x10000000
00067 
00072 #define SI_TYPE_BMPLABEL        0x20000000
00073 
00078 #define SI_TYPE_CMDBUTTON       0x30000000
00079 
00084 #define SI_TYPE_CHKBUTTON       0x40000000
00085 
00090 #define SI_TYPE_NRMSLIDER       0x50000000
00091 
00092 #ifdef _FIXED_MATH
00093 
00097 #define SI_TYPE_ROTSLIDER       0x60000000
00098 #endif
00099 
00104 #define SI_TYPE_CONTROL         0x70000000
00105 
00110 #define SI_TYPE_MASK            0xF0000000
00111 
00112 /* type of hittest shape */
00113 
00118 #define SI_TEST_SHAPE_RECT      0x01000000
00119 
00120 #ifdef _USE_NEWGAL
00121 
00126 #define SI_TEST_SHAPE_ELLIPSE   0x02000000
00127 
00132 #define SI_TEST_SHAPE_LOZENGE   0x03000000
00133 
00138 #define SI_TEST_SHAPE_LTRIANGLE 0x04000000
00139 
00144 #define SI_TEST_SHAPE_RTRIANGLE 0x05000000
00145 
00150 #define SI_TEST_SHAPE_UTRIANGLE 0x06000000
00151 
00156 #define SI_TEST_SHAPE_DTRIANGLE 0x07000000
00157 
00158 #endif
00159 
00160 #define SI_TEST_SHAPE_MASK      0x0F000000
00161 
00162 /* common status of item */
00163 
00168 #define SI_STATUS_OK            0x00000001
00169 
00174 #define SI_STATUS_VISIBLE       0x00000002
00175 
00180 #define SI_STATUS_DISABLED      0x00000004
00181 
00186 #define SI_STATUS_HILIGHTED     0x00000008
00187 
00188 #define SI_STATUS_MASK          0x0000000F
00189 
00190 /* status of button item */
00191 
00196 #define SI_BTNSTATUS_CLICKED    0x00000010
00197 
00202 #define SI_BTNSTATUS_CHECKED    SI_BTNSTATUS_CLICKED
00203 
00204 #define SI_STATUS_CLICKED       SI_BTNSTATUS_CLICKED
00205 
00206 #define SI_BTNSTATUS_MASK       0x000000F0
00207 
00209 #define SI_CMDBUTTON_2STATE     0x00000100
00210 
00211 /* style of normal slider item */
00212 
00217 #define SI_NRMSLIDER_HORZ       0x00000100
00218 
00223 #define SI_NRMSLIDER_VERT       0x00000200
00224 
00229 #define SI_NRMSLIDER_STATIC     0x00000400
00230 
00231 #ifdef _FIXED_MATH
00232 
00233 /* style of rotation slider item */
00234 
00239 #define SI_ROTSLIDER_CW         0x00000100
00240 
00245 #define SI_ROTSLIDER_ANTICW     0x00000200
00246 
00251 #define SI_ROTSLIDER_STATIC     0x00000400
00252 
00253 #endif /* _FIXED_MATH */
00254 
00255 #define SI_STYLE_MASK           0x0000FF00
00256 
00261 #define CTRL_SKIN               "skin"
00262 
00267 typedef struct skin_item_ops_s skin_item_ops_t;
00268 
00273 typedef struct skin_head_s skin_head_t;
00274 
00276 typedef struct skin_item_s
00277 {
00279     int id;
00280 
00359     DWORD style;
00360 
00362     int x;
00364     int y;
00365 
00367     RECT item_rc;
00368 
00370     int bmp_index;
00371 
00373     char* tip;
00374 
00376     DWORD attached;
00377 
00382     void* type_data;
00383 
00384     /******** start of internal fields ********/
00385     /* The bounding rectangle of the item. */
00386     RECT shape;
00387     /* The hit-test rectangle of the item. */
00388     RECT rc_hittest;
00389     /* The region for mouse hittest. */
00390     CLIPRGN region;
00391     /* The operation routines of the item. */
00392     skin_item_ops_t *ops;
00393     /* The parent skin. */
00394     skin_head_t *hostskin;
00395 } skin_item_t;
00396 
00398 struct skin_item_ops_s
00399 {
00401     int (*init) (skin_head_t*, skin_item_t*);
00403     int (*deinit) (skin_item_t*);
00404 
00406     int (*on_create) (skin_item_t*);
00408     int (*on_destroy) (skin_item_t*);
00409 
00411     void (*draw_bg) (HDC, skin_item_t*);
00413     void (*draw_attached) (HDC, skin_item_t*);
00414 
00422     DWORD (*get_value) (skin_item_t *item);
00430     DWORD (*set_value) (skin_item_t *item, DWORD status);
00431     
00433     int (*item_msg_proc) (skin_item_t* item, int message, 
00434                     WPARAM wparam, LPARAM lparam);
00435 };
00436 
00438 typedef struct sie_slider_s
00439 {
00441     int min_pos;
00443     int max_pos;
00445     int cur_pos;
00446 } sie_slider_t;
00447 
00449 typedef struct si_nrmlabel_s
00450 {
00452     char* label;        
00453 
00455     DWORD color;        
00457     DWORD color_focus;  
00459     DWORD color_click;  
00461     int font_index;
00462 } si_nrmlabel_t;
00463 
00465 typedef struct si_bmplabel_s
00466 {
00468     char* label;
00470     const char* label_chars;
00471 } si_bmplabel_t;
00472 
00474 typedef struct si_nrmslider_s
00475 {
00477     sie_slider_t    slider_info;
00478 
00480     int thumb_bmp_index;
00481 } si_nrmslider_t;
00482 
00483 #ifdef _FIXED_MATH
00484 
00486 typedef struct si_rotslider_s
00487 {
00489     int radius;
00491     int start_deg;
00493     int end_deg;
00495     int cur_pos;
00496 
00498     int thumb_bmp_index;
00499 } si_rotslider_t;
00500 
00501 #endif /* _FIXED_MATH */
00502 
00507 #define SIE_BUTTON_CLICKED      0x00000001
00508 
00513 #define SIE_SLIDER_CHANGED      0x00000002
00514 
00519 #define SIE_GAIN_FOCUS          0x00010000
00520 
00525 #define SIE_LOST_FOCUS          0x00020000
00526 
00544 typedef int (* skin_event_cb_t) (HWND hwnd, skin_item_t* item, 
00545                 int event, void* data);
00550 #define MSG_CB_GOON     0
00551 
00556 #define MSG_CB_DEF_GOON 1
00557 
00562 #define MSG_CB_STOP     2
00563 
00589 typedef int (* skin_msg_cb_t) (HWND hwnd, int message, 
00590                 WPARAM wparam, LPARAM lparam, int* result);
00591 
00596 #define SKIN_STYLE_NONE     0x00000000
00597 
00602 #define SKIN_STYLE_TOOLTIP  0x00000001
00603 
00608 #define SKIN_STYLE_MODAL    0x00000002
00609 
00611 struct skin_head_s
00612 {
00614     char* name;
00615 
00621     DWORD style;
00622 
00624     const BITMAP* bmps;
00626     const LOGFONT* fonts;
00627 
00629     int bk_bmp_index;
00630 
00632     int nr_items;
00634     skin_item_t* items;
00635 
00637     DWORD attached;
00638 
00639     /******** start of internal fields ********/
00640 
00641     /* The event callback function of the skin. */
00642     skin_event_cb_t event_cb;
00643 
00644     /* The window message procedure of the skin window. */
00645     skin_msg_cb_t msg_cb;
00646 
00647     /**** The fields initialized when skin_init called. ****/
00648     /* The rectangle heap for hit-test regions. */
00649     BLOCKHEAP rc_heap;
00650 
00651     /**** 
00652      * The fields initialized when create_skin_main_window or 
00653      * create_skin_control called.
00654      ****/
00655     /* The handle of window in which the skin locates. */
00656     HWND hwnd;
00657     /* The handle of tool tip window. */
00658     HWND tool_tip;
00659 
00660     /* The old x and y. */
00661     int oldx, oldy;
00662     /* The current hilighted item. */
00663     skin_item_t* hilighted;
00664 
00665     /* cached identifier. */
00666     int cached_id;
00667     /* the item whose identifier is cached_id. */
00668     skin_item_t* cached_item;
00669 };
00670 
00689 MGEXT_EXPORT BOOL skin_init (skin_head_t* skin, 
00690                 skin_event_cb_t event_cb, skin_msg_cb_t msg_cb);
00691 
00702 MGEXT_EXPORT void skin_deinit (skin_head_t* skin);
00703 
00731 MGEXT_EXPORT HWND create_skin_main_window_ex (skin_head_t* skin, HWND hosting, 
00732                 int x, int y, int w, int h, DWORD dwExStyle, BOOL modal);
00737 #define create_skin_main_window(skin, hosting, x, y, w, h, modal) \
00738                 create_skin_main_window_ex (skin, hosting, x, y, w, h, 0, modal);
00739 
00771 MGEXT_EXPORT HWND create_skin_control (skin_head_t* skin, HWND parent, 
00772                 int id, int x, int y, int w, int h);
00773 
00787 MGEXT_EXPORT BOOL is_skin_main_window (HWND hwnd);
00788 
00799 MGEXT_EXPORT void destroy_skin_window (HWND hwnd);
00800 
00815 MGEXT_EXPORT skin_head_t* set_window_skin (HWND hwnd, skin_head_t *new_skin);
00816 
00829 MGEXT_EXPORT skin_head_t* get_window_skin (HWND hwnd);
00830 
00845 static inline skin_event_cb_t skin_set_event_cb (skin_head_t* skin, 
00846                 skin_event_cb_t event_cb)
00847 {
00848     skin_event_cb_t old = skin->event_cb;
00849     skin->event_cb = event_cb;
00850     return old;
00851 }
00852 
00867 static inline skin_msg_cb_t skin_set_msg_cb (skin_head_t* skin, 
00868                 skin_msg_cb_t msg_cb)
00869 {
00870     skin_msg_cb_t old = skin->msg_cb;
00871     skin->msg_cb = msg_cb;
00872     return old;
00873 }
00874 
00888 MGEXT_EXPORT skin_item_t* skin_get_item (skin_head_t* skin, int id);
00889 
00903 MGEXT_EXPORT DWORD skin_get_item_status (skin_head_t* skin, int id);
00904 
00915 MGEXT_EXPORT skin_item_t* skin_get_hilited_item (skin_head_t* skin);
00916 
00931 MGEXT_EXPORT DWORD skin_show_item (skin_head_t* skin, int id, BOOL show);
00932 
00946 MGEXT_EXPORT DWORD skin_enable_item (skin_head_t* skin, int id, BOOL enable);
00947 
00961 MGEXT_EXPORT skin_item_t* skin_set_hilited_item (skin_head_t* skin, int id);
00962 
00977 MGEXT_EXPORT BOOL skin_get_check_status (skin_head_t* skin, int id);
00978 
00994 MGEXT_EXPORT DWORD skin_set_check_status (skin_head_t* skin, 
00995                 int id, BOOL check);
00996 
01012 MGEXT_EXPORT const char* skin_get_item_label (skin_head_t* skin, int id);
01013 
01030 MGEXT_EXPORT BOOL skin_set_item_label (skin_head_t* skin, 
01031                 int id, const char* label);
01032 
01047 MGEXT_EXPORT HWND skin_get_control_hwnd (skin_head_t* skin, int id);
01048 
01062 MGEXT_EXPORT int skin_get_thumb_pos (skin_head_t* skin, int id);
01063 
01080 MGEXT_EXPORT BOOL skin_set_thumb_pos (skin_head_t* skin, int id, int pos);
01081 
01099 MGEXT_EXPORT BOOL skin_get_slider_info (skin_head_t* skin, 
01100                 int id, sie_slider_t* sie);
01101 
01117 MGEXT_EXPORT BOOL skin_set_slider_info (skin_head_t* skin, 
01118                 int id, const sie_slider_t* sie);
01119 
01138 MGEXT_EXPORT int skin_scale_slider_pos (const sie_slider_t* org, 
01139                 int new_min, int new_max);
01140 
01141 #ifdef __cplusplus
01142 }
01143 #endif  /* __cplusplus */
01144 
01149 #endif /* _EXT_SKIN */
01150 
01151 #endif /* _MGUI_SKIN_H */
01152 

Generated on Mon Jun 26 14:21:34 2006 for MiniGUI V2.0.3 API Reference by  doxygen 1.4.2