00001
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifndef _MGUI_SKIN_H
00034 #define _MGUI_SKIN_H
00035
00036 #ifdef _EXT_SKIN
00037
00050
00051 #define SKIN_MSG_LBUTTONDOWN 1
00052 #define SKIN_MSG_LBUTTONUP 2
00053 #define SKIN_MSG_CLICK 3
00054
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
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
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
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
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
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
00234
00239 #define SI_ROTSLIDER_CW 0x00000100
00240
00245 #define SI_ROTSLIDER_ANTICW 0x00000200
00246
00251 #define SI_ROTSLIDER_STATIC 0x00000400
00252
00253 #endif
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
00385
00386 RECT shape;
00387
00388 RECT rc_hittest;
00389
00390 CLIPRGN region;
00391
00392 skin_item_ops_t *ops;
00393
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
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
00640
00641
00642 skin_event_cb_t event_cb;
00643
00644
00645 skin_msg_cb_t msg_cb;
00646
00647
00648
00649 BLOCKHEAP rc_heap;
00650
00651
00652
00653
00654
00655
00656 HWND hwnd;
00657
00658 HWND tool_tip;
00659
00660
00661 int oldx, oldy;
00662
00663 skin_item_t* hilighted;
00664
00665
00666 int cached_id;
00667
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
01144
01149 #endif
01150
01151 #endif
01152