skin.c
上传用户:tuheem
上传日期:2007-05-01
资源大小:21889k
文件大小:17k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "globals.h"
  3. main_set_default_skin(void)
  4. {
  5.     HINSTANCE hInstance;
  6.     float   positionpercentage;
  7.     if (Skin.Object[PositionSlider].maxw == 1) {
  8.         positionpercentage =
  9.             (float) globals.main_int_track_position /
  10.             (float) Skin.Object[PositionSlider].h;
  11.     } else {
  12.         positionpercentage =
  13.             (float) globals.main_int_track_position /
  14.             (float) Skin.Object[PositionSlider].w;
  15.     }
  16.     globals.main_int_title_scroll_position = 0;
  17.     globals.mail_int_title_scroll_max_position = 0;
  18.     memset(&Skin, 0, sizeof(Skin));
  19.     main_skin_set_struct_value(PlaySwitch, 172, 23, 24, 16, 0, 19, 60, 24,
  20.                                7, "");
  21.     main_skin_set_struct_value(StopSwitch, 222, 23, 24, 16, 0, 0, 0, 0, 0,
  22.                                "");
  23.     main_skin_set_struct_value(PauseSwitch, 197, 23, 24, 16, 0, 197, 23,
  24.                                25, 17, "");
  25.     main_skin_set_struct_value(RepeatSwitch, 197, 57, 24, 16, 0, 96, 60,
  26.                                35, 7, "");
  27.     main_skin_set_struct_value(ShuffleSwitch, 158, 57, 38, 16, 0, 50, 60,
  28.                                39, 7, "");
  29.     main_skin_set_struct_value(EqSwitch, 97, 93, 17, 28, 0, 97, 93, 18, 29,
  30.                                "");
  31.     main_skin_set_struct_value(MinimizeButton, 230, 5, 7, 8, 0, 0, 0, 0, 0,
  32.                                "");
  33.     main_skin_set_struct_value(ExitButton, 239, 5, 7, 8, 0, 0, 0, 0, 0,
  34.                                "");
  35.     main_skin_set_struct_value(NextSkinButton, 254, 44, 9, 27, 0, 0, 0, 0,
  36.                                0, "");
  37.     main_skin_set_struct_value(EjectButton, 222, 40, 24, 16, 0, 0, 0, 0, 0,
  38.                                "");
  39.     main_skin_set_struct_value(NextButton, 197, 40, 24, 16, 0, 0, 0, 0, 0,
  40.                                "");
  41.     main_skin_set_struct_value(PrevButton, 172, 40, 24, 16, 0, 0, 0, 0, 0,
  42.                                "");
  43.     main_skin_set_struct_value(MoveArea, 0, 0, 229, 12, 0, 0, 0, 0, 0, "");
  44.     main_skin_set_struct_value(PlaylistButton, 222, 57, 24, 16, 0, 0, 0, 0,
  45.                                0, "");
  46.     main_skin_set_struct_value(VolumeSlider, 84, 95, 9, 75, 1, 0, 0, 0, 0,
  47.                                "");
  48.     main_skin_set_struct_value(PositionSlider, 12, 78, 233, 8, 0, 0, 0, 0,
  49.                                0, "");
  50.     main_skin_set_struct_value(Eq1, 115, 95, 9, 75, 1, 0, 0, 0, 0, "");
  51.     main_skin_set_struct_value(Eq2, 132, 95, 9, 75, 1, 0, 0, 0, 0, "");
  52.     main_skin_set_struct_value(Eq3, 149, 95, 9, 75, 1, 0, 0, 0, 0, "");
  53.     main_skin_set_struct_value(Eq4, 166, 95, 9, 75, 1, 0, 0, 0, 0, "");
  54.     main_skin_set_struct_value(Eq5, 183, 95, 9, 75, 1, 0, 0, 0, 0, "");
  55.     main_skin_set_struct_value(Eq6, 200, 95, 9, 75, 1, 0, 0, 0, 0, "");
  56.     main_skin_set_struct_value(Eq7, 217, 95, 9, 75, 1, 0, 0, 0, 0, "");
  57.     main_skin_set_struct_value(Eq8, 234, 95, 9, 75, 1, 0, 0, 0, 0, "");
  58.     main_skin_set_struct_value(SongtitleText, 18, 21, 6, 13, 23, 0, 0, 0,
  59.                                0, "");
  60.     main_skin_set_struct_value(TrackText, 18, 44, 13, 14, 0, 0, 0, 0, 0,
  61.                                "");
  62.     main_skin_set_struct_value(TimeText, 59, 35, 13, 14, 0, 0, 0, 0, 0,
  63.                                "");
  64.     main_skin_set_struct_value(BitrateText, 89, 48, 0, 0, 0, 0, 0, 0, 0,
  65.                                "");
  66.     main_skin_set_struct_value(FreqText, 125, 48, 0, 0, 0, 0, 0, 0, 0, "");
  67.     Skin.transparentcolor = 0x0000ff00;
  68.     hInstance = GetModuleHandle(NULL);
  69.     graphics.bmp_main_up =
  70.         (HBITMAP) LoadImage(hInstance, MAKEINTRESOURCE(IDB_MAINUP),
  71.                             IMAGE_BITMAP, 0, 0, 0L);
  72.     graphics.bmp_main_down =
  73.         (HBITMAP) LoadImage(hInstance, MAKEINTRESOURCE(IDB_MAINDOWN),
  74.                             IMAGE_BITMAP, 0, 0, 0L);
  75.     graphics.bmp_main_switch = graphics.bmp_main_down;
  76.     graphics.bmp_main_time_font =
  77.         (HBITMAP) LoadImage(hInstance, MAKEINTRESOURCE(IDB_MAINBIGFONT),
  78.                             IMAGE_BITMAP, 0, 0, 0L);
  79.     graphics.bmp_main_track_font = graphics.bmp_main_time_font;
  80.     graphics.bmp_main_title_font =
  81.         (HBITMAP) LoadImage(hInstance, MAKEINTRESOURCE(IDB_MAINSMALLFONT),
  82.                             IMAGE_BITMAP, 0, 0, 0L);
  83.     if (Skin.Object[PositionSlider].maxw == 1) {
  84.         globals.main_int_track_position =
  85.             (int) ((float) (Skin.Object[PositionSlider].h) *
  86.                    positionpercentage);
  87.     } else {
  88.         globals.main_int_track_position =
  89.             (int) ((float) (Skin.Object[PositionSlider].w) *
  90.                    positionpercentage);
  91.     }
  92.     globals.main_bool_skin_next_is_default = FALSE;
  93.     main_update_title_text();
  94.     main_skin_select_menu("Default");
  95.     return TRUE;
  96. }
  97. int     main_add_tooltips(HWND hWnd, BOOL update)
  98. {
  99.     TOOLINFO ti;
  100.     char   *tips[] = {
  101.                          "Play",
  102.                          "Stop",
  103.                          "Pause",
  104.                          "Eject",
  105.                          "Repeat",
  106.                          "Shuffle",
  107.                          "Equalizer",
  108.                          "Next",
  109.                          "Previous",
  110.                          "Playlist",
  111.                          "Minimize",
  112.                          "Skinswitch",
  113.                          "Exit"
  114.                      };
  115.     int     teller;
  116.     ti.cbSize = sizeof(TOOLINFO);
  117.     ti.uFlags = 0;
  118.     ti.hwnd = hWnd;
  119.     ti.hinst = GetModuleHandle(NULL);
  120.     for (teller = PlaySwitch; teller <= ExitButton; teller++) {
  121.         ti.uId = (UINT) teller;
  122.         if (*Skin.Object[teller].tooltip)
  123.             ti.lpszText = (LPSTR) Skin.Object[teller].tooltip;
  124.         else
  125.             ti.lpszText = (LPSTR) tips[teller];
  126.         ti.rect.left = Skin.Object[teller].x;
  127.         ti.rect.top = Skin.Object[teller].y;
  128.         ti.rect.right = Skin.Object[teller].x + Skin.Object[teller].w;
  129.         ti.rect.bottom = Skin.Object[teller].y + Skin.Object[teller].h;
  130.         SendMessage(windows.wnd_tooltip,
  131.                     update ? TTM_NEWTOOLRECT : TTM_ADDTOOL, 0,
  132.                     (LPARAM) (LPTOOLINFO) & ti);
  133.         if (update == TRUE)
  134.             SendMessage(windows.wnd_tooltip, TTM_UPDATETIPTEXT, 0,
  135.                         (LPARAM) (LPTOOLINFO) & ti);
  136.     }
  137.     return 1;
  138. }
  139. int
  140. main_skin_set_struct_value(int object, int x, int y, int w, int h, int maxw, int x2, int y2, int w2, int h2,
  141.                            char *tooltip)
  142. {
  143.     Skin.Object[object].x = x;
  144.     Skin.Object[object].y = y;
  145.     Skin.Object[object].w = w;
  146.     Skin.Object[object].h = h;
  147.     Skin.Object[object].maxw = maxw;
  148.     Skin.Object[object].x2 = x2;
  149.     Skin.Object[object].y2 = y2;
  150.     Skin.Object[object].w2 = w2;
  151.     Skin.Object[object].h2 = h2;
  152.     strcpy(Skin.Object[object].tooltip, tooltip);
  153.     return TRUE;
  154. }
  155. int     main_skin_open(char *name)
  156. {
  157.     char    pathbuf[MAX_PATH];
  158.     char    values[32768];
  159.     char   *textposition;
  160.     char    buffer[4096];
  161.     char    errorbuf[4096] = "";
  162.     int     teller = 0;
  163.     int     returnval;
  164.     HINSTANCE hInstance;
  165.     Associate associate[] = {
  166.                                 "PlaySwitch", PlaySwitch,
  167.                                 "StopSwitch", StopSwitch,
  168.                                 "PauseSwitch", PauseSwitch,
  169.                                 "EjectButton", EjectButton,
  170.                                 "RepeatSwitch", RepeatSwitch,
  171.                                 "ShuffleSwitch", ShuffleSwitch,
  172.                                 "EqSwitch", EqSwitch,
  173.                                 "NextButton", NextButton,
  174.                                 "PrevButton", PrevButton,
  175.                                 "PlaylistButton", PlaylistButton,
  176.                                 "MinimizeButton", MinimizeButton,
  177.                                 "NextSkinButton", NextSkinButton,
  178.                                 "ExitButton", ExitButton,
  179.                                 "MoveArea", MoveArea,
  180.                                 "VolumeSlider", VolumeSlider,
  181.                                 "PositionSlider", PositionSlider,
  182.                                 "Eq1", Eq1,
  183.                                 "Eq2", Eq2,
  184.                                 "Eq3", Eq3,
  185.                                 "Eq4", Eq4,
  186.                                 "Eq5", Eq5,
  187.                                 "Eq6", Eq6,
  188.                                 "Eq7", Eq7,
  189.                                 "Eq8", Eq8,
  190.                                 "SongtitleText", SongtitleText,
  191.                                 "TrackText", TrackText,
  192.                                 "TimeText", TimeText,
  193.                                 "BitrateText", BitrateText,
  194.                                 "FreqText", FreqText
  195.                             };
  196.     float   positionpercentage;
  197.     if (Skin.Object[PositionSlider].maxw == 1) {
  198.         positionpercentage =
  199.             (float) globals.main_int_track_position /
  200.             (float) Skin.Object[PositionSlider].h;
  201.     } else {
  202.         positionpercentage =
  203.             (float) globals.main_int_track_position /
  204.             (float) Skin.Object[PositionSlider].w;
  205.     }
  206.     globals.main_int_title_scroll_position = 0;
  207.     globals.mail_int_title_scroll_max_position = 0;
  208.     if (*options.main_skin_file == 0) {
  209.         MessageBox(GetForegroundWindow(), "No Skin file selected!",
  210.                    "Error", MB_ICONERROR);
  211.         options.use_default_skin = TRUE;
  212.         return FALSE;
  213.     } else
  214.         strcpy(pathbuf, options.main_skin_file);
  215.     memset(&Skin, 0, sizeof(Skin));
  216.     GetPrivateProfileString(NULL, NULL, NULL,
  217.                             buffer, sizeof(buffer), pathbuf);
  218.     returnval = GetPrivateProfileSection("CoolPlayer Skin",
  219.                                          values,
  220.                                          32767,
  221.                                          pathbuf
  222.                                         );
  223.     if (returnval == 0) {
  224.         char    textbuf[MAX_PATH + 50];
  225.         sprintf(textbuf, "Not a valid CoolPlayer Skin file: %s", pathbuf);
  226.         MessageBox(GetForegroundWindow(), textbuf, "error", MB_ICONERROR);
  227.         options.use_default_skin = TRUE;
  228.         return FALSE;
  229.     }
  230.     textposition = values;
  231.     while (*textposition != 0) {
  232.         main_skin_check_ini_value(textposition, associate);
  233.         textposition = textposition + strlen(textposition) + 1;
  234.     }
  235.     path_remove_filespec(pathbuf);
  236.     strcat(pathbuf, Skin.CoolUp);
  237.     hInstance = GetModuleHandle(NULL);
  238.     DeleteObject(graphics.bmp_main_up);
  239.     graphics.bmp_main_up =
  240.         (HBITMAP) LoadImage(hInstance, pathbuf, IMAGE_BITMAP, 0, 0,
  241.                             LR_LOADFROMFILE);
  242.     if (!graphics.bmp_main_up) {
  243.         strcat(errorbuf, pathbuf);
  244.         strcat(errorbuf, "n");
  245.     }
  246.     path_remove_filespec(pathbuf);
  247.     strcat(pathbuf, Skin.CoolDown);
  248.     DeleteObject(graphics.bmp_main_down);
  249.     graphics.bmp_main_down =
  250.         (HBITMAP) LoadImage(hInstance, pathbuf, IMAGE_BITMAP, 0, 0,
  251.                             LR_LOADFROMFILE);
  252.     if (!graphics.bmp_main_down) {
  253.         strcat(errorbuf, pathbuf);
  254.         strcat(errorbuf, "n");
  255.     }
  256.     path_remove_filespec(pathbuf);
  257.     strcat(pathbuf, Skin.CoolSwitch);
  258.     DeleteObject(graphics.bmp_main_switch);
  259.     graphics.bmp_main_switch =
  260.         (HBITMAP) LoadImage(hInstance, pathbuf, IMAGE_BITMAP, 0, 0,
  261.                             LR_LOADFROMFILE);
  262.     if (!graphics.bmp_main_switch) {
  263.         strcat(errorbuf, pathbuf);
  264.         strcat(errorbuf, "n");
  265.     }
  266.     path_remove_filespec(pathbuf);
  267.     strcat(pathbuf, Skin.aTimeFont);
  268.     DeleteObject(graphics.bmp_main_time_font);
  269.     graphics.bmp_main_time_font =
  270.         (HBITMAP) LoadImage(hInstance, pathbuf, IMAGE_BITMAP, 0, 0,
  271.                             LR_LOADFROMFILE);
  272.     if (!graphics.bmp_main_time_font) {
  273.         strcat(errorbuf, pathbuf);
  274.         strcat(errorbuf, "n");
  275.     }
  276.     path_remove_filespec(pathbuf);
  277.     strcat(pathbuf, Skin.aTrackFont);
  278.     DeleteObject(graphics.bmp_main_track_font);
  279.     graphics.bmp_main_track_font =
  280.         (HBITMAP) LoadImage(hInstance, pathbuf, IMAGE_BITMAP, 0, 0,
  281.                             LR_LOADFROMFILE);
  282.     if (!graphics.bmp_main_track_font) {
  283.         strcat(errorbuf, pathbuf);
  284.         strcat(errorbuf, "n");
  285.     }
  286.     path_remove_filespec(pathbuf);
  287.     strcat(pathbuf, Skin.aTextFont);
  288.     DeleteObject(graphics.bmp_main_title_font);
  289.     graphics.bmp_main_title_font =
  290.         (HBITMAP) LoadImage(hInstance, pathbuf, IMAGE_BITMAP, 0, 0,
  291.                             LR_LOADFROMFILE);
  292.     if (!graphics.bmp_main_title_font) {
  293.         strcat(errorbuf, pathbuf);
  294.         strcat(errorbuf, "n");
  295.     }
  296.     if (!graphics.bmp_main_up || !graphics.bmp_main_down
  297.             || !graphics.bmp_main_switch || !graphics.bmp_main_time_font
  298.             || !graphics.bmp_main_title_font || !graphics.bmp_main_track_font) {
  299.         char    errorstring[5000];
  300.         sprintf(errorstring, "Can't load bitmaps!n%s", errorbuf);
  301.         MessageBox(GetForegroundWindow(), errorstring, "error",
  302.                    MB_ICONERROR);
  303.         options.use_default_skin = TRUE;
  304.         return FALSE;
  305.     }
  306.     if (Skin.Object[PositionSlider].maxw == 1) {
  307.         globals.main_int_track_position =
  308.             (int) ((float) (Skin.Object[PositionSlider].h) *
  309.                    positionpercentage);
  310.     } else {
  311.         globals.main_int_track_position =
  312.             (int) ((float) (Skin.Object[PositionSlider].w) *
  313.                    positionpercentage);
  314.     }
  315.     main_update_title_text();
  316.     return 1;
  317. }
  318. void    main_skin_check_ini_value(char *textposition,
  319.                                   Associate * associate)
  320. {
  321.     char    name[128] = "";
  322.     int     x = 0, y = 0, w = 0, h = 0, maxw = 0, x2 = 0, y2 = 0, w2 =
  323.                                          0, h2 = 0;
  324.     char    tooltip[100] = "";
  325.     int teller = 0;
  326.     while (teller < strlen(textposition)) {
  327.         if (textposition[teller] == '=' || textposition[teller] == ',')
  328.             textposition[teller] = ' ';
  329.         teller++;
  330.     }
  331.     sscanf(textposition, "%s %d %d %d %d %d %d %d %d %d %[^]", name, &x,
  332.            &y, &w, &h, &maxw, &x2, &y2, &w2, &h2, tooltip);
  333.     for (teller = 0; teller < Lastone; teller++) {
  334.         if (stricmp(name, associate[teller].name) == 0) {
  335.             main_skin_set_struct_value(associate[teller].Object, x, y, w,
  336.                                        h, maxw, x2, y2, w2, h2, tooltip);
  337.             return;
  338.         }
  339.         if (stricmp(name, "PlaylistSkin") == 0) {
  340.             char    pathbuf[MAX_PATH];
  341.             if (path_is_relative(textposition + strlen(name) + 1)) {
  342.                 strcpy(pathbuf, options.main_skin_file);
  343.                 path_remove_filespec(pathbuf);
  344.                 strcat(pathbuf, textposition + strlen(name) + 1);
  345.             } else
  346.                 strcpy(pathbuf, textposition + strlen(name) + 1);
  347.             if (!globals.playlist_bool_force_skin_from_options)
  348.                 strcpy(options.playlist_skin_file, pathbuf);
  349.         }
  350.         if (stricmp(name, "transparentcolor") == 0) {
  351.             int     colortext;
  352.             sscanf(textposition, "%s %x", name, &colortext);
  353.             Skin.transparentcolor = colortext;
  354.             return;
  355.         }
  356.         if (stricmp(name, "BmpCoolUp") == 0) {
  357.             strcpy(Skin.CoolUp, textposition + strlen(name) + 1);
  358.         }
  359.         if (stricmp(name, "BmpCoolDown") == 0) {
  360.             strcpy(Skin.CoolDown, textposition + strlen(name) + 1);
  361.         }
  362.         if (stricmp(name, "BmpCoolSwitch") == 0) {
  363.             strcpy(Skin.CoolSwitch, textposition + strlen(name) + 1);
  364.         }
  365.         if (stricmp(name, "BmpTextFont") == 0) {
  366.             strcpy(Skin.aTextFont, textposition + strlen(name) + 1);
  367.         }
  368.         if (stricmp(name, "BmpTimeFont") == 0) {
  369.             strcpy(Skin.aTimeFont, textposition + strlen(name) + 1);
  370.         }
  371.         if (stricmp(name, "BmpTrackFont") == 0) {
  372.             strcpy(Skin.aTrackFont, textposition + strlen(name) + 1);
  373.         }
  374.         if (stricmp(name, "NextSkin") == 0) {
  375.             if (stricmp(textposition + strlen(name) + 1, "default") == 0) {
  376.                 globals.main_bool_skin_next_is_default = TRUE;
  377.             } else {
  378.                 char    drive[_MAX_DRIVE];
  379.                 char    fname[MAX_PATH];
  380.                 char    modpathbuf[MAX_PATH];
  381.                 char    ext[_MAX_EXT];
  382.                 char    dir[_MAX_DIR];
  383.                 char    skinfile2[MAX_PATH];
  384.                 strcpy(skinfile2, options.main_skin_file);
  385.                 path_remove_filespec(skinfile2);
  386.                 main_get_program_path(GetModuleHandle(NULL), modpathbuf,
  387.                                       MAX_PATH);
  388.                 _splitpath(textposition + strlen(name) + 1, drive, dir,
  389.                            fname, ext);
  390.                 if (strcmp(drive, "") == 0) {
  391.                     sprintf(options.main_skin_file, "%s%s%s", skinfile2,
  392.                             fname, ext);
  393.                 } else
  394.                     strcpy(options.main_skin_file,
  395.                            textposition + strlen(name) + 1);
  396.                 if (_access(options.main_skin_file, 0) == -1) {
  397.                     sprintf(options.main_skin_file, "%s%s%s%s", modpathbuf,
  398.                             dir, fname, ext);
  399.                 }
  400.                 globals.main_bool_skin_next_is_default = FALSE;
  401.             }
  402.         }
  403.     }
  404. }