00001
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef _MGUI_SKIN_H
00033 #define _MGUI_SKIN_H
00034
00035 #ifdef _EXT_SKIN
00036
00049
00050 #define SKIN_MSG_LBUTTONDOWN 1
00051 #define SKIN_MSG_LBUTTONUP 2
00052 #define SKIN_MSG_CLICK 3
00053
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
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
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
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
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
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
00232
00237 #define SI_ROTSLIDER_CW 0x00000100
00238
00243 #define SI_ROTSLIDER_ANTICW 0x00000200
00244
00249 #define SI_ROTSLIDER_STATIC 0x00000400
00250
00251 #endif
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
00383
00384 RECT shape;
00385
00386 RECT rc_hittest;
00387
00388 CLIPRGN region;
00389
00390 skin_item_ops_t *ops;
00391
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
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
00638
00639
00640 skin_event_cb_t event_cb;
00641
00642
00643 skin_msg_cb_t msg_cb;
00644
00645
00646
00647 BLOCKHEAP rc_heap;
00648
00649
00650
00651
00652
00653
00654 HWND hwnd;
00655
00656 HWND tool_tip;
00657
00658
00659 int oldx, oldy;
00660
00661 skin_item_t* hilighted;
00662
00663
00664 int cached_id;
00665
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
01142
01147 #endif
01148
01149 #endif
01150