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

多媒体编程

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "globals.h"
  3. #include "CPI_Player.h"
  4. #include "CPI_Playlist.h"
  5. #include "CPI_PlaylistItem.h"
  6. #include "CPI_ID3.h"
  7. ////////////////////////////////////////////////////////////////////////
  8. //
  9. //
  10. //
  11. void    playlist_move_control(int ControlID, LPRECT NewPlaylistrect,
  12.                               int type)
  13. {
  14.     /*
  15.        RECT    winrect;
  16.        int     xsize, ysize;
  17.        HWND    hwndDlg = windows.dlg_playlist;
  18.        HWND    hwndControl = GetDlgItem(hwndDlg, ControlID);
  19.        GetWindowRect(hwndControl, // handle to window
  20.        &winrect); // address of structure for window coordinates
  21.        xsize = winrect.right - winrect.left;
  22.        ysize = winrect.bottom - winrect.top;
  23.        ScreenToClient(hwndDlg, // window handle for source coordinates
  24.         (LPPOINT) & winrect); // address of structure containing coordinates);
  25.        switch (type) {
  26.        case TOPRIGHT:
  27.     MoveWindow(hwndControl, // handle to window
  28.         winrect.left +
  29.         ((NewPlaylistrect->right - globals.playlist_rect.right)
  30.          + (globals.playlist_rect.left - NewPlaylistrect->left)), // horizontal position
  31.         winrect.top, //+NewPlaylistrect->top,          // vertical position
  32.         xsize, // width
  33.         ysize, // height
  34.         TRUE); // repaint flag
  35.     break;
  36.        case RESIZE:
  37.     MoveWindow(hwndControl, // handle to window
  38.         winrect.left, // horizontal position
  39.         winrect.top, //+NewPlaylistrect->top,          // vertical position
  40.         xsize +
  41.         ((NewPlaylistrect->right - globals.playlist_rect.right)
  42.          + (globals.playlist_rect.left - NewPlaylistrect->left)), // width
  43.         ysize +
  44.         ((NewPlaylistrect->bottom
  45.           - globals.playlist_rect.bottom) +
  46.          (globals.playlist_rect.top - NewPlaylistrect->top)), // height
  47.         TRUE); // repaint flag
  48.     break;
  49.        case BOTTOMLEFT:
  50.     MoveWindow(hwndControl, // handle to window
  51.         winrect.left, // horizontal position
  52.     // horizontal position
  53.         winrect.top +
  54.         ((NewPlaylistrect->bottom
  55.           - globals.playlist_rect.bottom) +
  56.          (globals.playlist_rect.top - NewPlaylistrect->top)), //+NewPlaylistrect->top,          // vertical position
  57.         xsize, // width
  58.         ysize, // height
  59.         TRUE); // repaint flag
  60.     break;
  61.        case BOTTOMRIGHT:
  62.     MoveWindow(hwndControl, // handle to window
  63.         winrect.left +
  64.         ((NewPlaylistrect->right - globals.playlist_rect.right)
  65.          + (globals.playlist_rect.left - NewPlaylistrect->left)), // horizontal position
  66.         winrect.top +
  67.         ((NewPlaylistrect->bottom
  68.           - globals.playlist_rect.bottom) +
  69.          (globals.playlist_rect.top - NewPlaylistrect->top)), //+NewPlaylistrect->top,          // vertical position
  70.         xsize, // width
  71.         ysize, // height
  72.         TRUE); // repaint flag
  73.     break;
  74.        }
  75.     */
  76. }
  77. BOOL    playlist_skin_set_control_bitmap(char *position)
  78. {
  79.     /*
  80.        HWND    hDlg = windows.dlg_playlist;
  81.        HWND    button;
  82.        unsigned int teller = 0;
  83.        char    name[MAX_PATH];
  84.        int     controlid = 0;
  85.        short   i = 0;
  86.        LONG    style;
  87.        UINT    x = 0, y = 0, w = 0, h = 0;
  88.        char   *items[] =
  89.     { "Add", "Save", "AddDir", "Clear", "ClearSel", "MoveUp",
  90.     "MoveDown",
  91.     "Shuffle", "Close", "Close2",
  92.     "Minimize", "Maximize", "Find", NULL
  93.        };
  94.        UINT    controlids[] =
  95.     { IDC_OPENLIST, IDC_SAVELIST, IDC_ADDDIR, IDC_CLEAR, IDC_CLEARSEL,
  96.     IDC_MOVEUP, IDC_MOVEDOWN, IDC_SHUFFLE, IDOK, IDC_CLOSE, IDC_MINIMIZE, 
  97.     IDC_MAXIMIZE, IDC_FIND,
  98.     0
  99.        };
  100.        RECT    winrect;
  101.        WINDOWPLACEMENT wndpl;
  102.        if (IsIconic(hDlg)) {
  103.     wndpl.length = sizeof(WINDOWPLACEMENT);
  104.     GetWindowPlacement(hDlg, &wndpl);
  105.     CopyRect(&winrect, &wndpl.rcNormalPosition);
  106.        } else
  107.     GetWindowRect(hDlg, &winrect);
  108.        winrect.right -= winrect.left;
  109.        winrect.bottom -= winrect.top;
  110.        winrect.left = 0;
  111.        winrect.top = 0;
  112.        while (teller < strlen(position)) {
  113.     if (position[teller] == '=' || position[teller] == ',')
  114.         position[teller] = ' ';
  115.     teller++;
  116.        }
  117.        sscanf(position, "%s %d %d %d %d", name, &x, &y, &w, &h);
  118.        while (items[i] != NULL) {
  119.     if (!stricmp(name, items[i])) {
  120.         controlid = controlids[i];
  121.         break;
  122.     };
  123.     i++;
  124.        }
  125.        if (!stricmp(name, "List")) {
  126.     button = GetDlgItem(hDlg, IDC_PLAYLIST);
  127.     SetWindowPos(button, NULL, x, y, winrect.right - w - x,
  128.           winrect.bottom - h - y,
  129.           SWP_NOOWNERZORDER | SWP_NOZORDER | SWP_NOREDRAW);
  130.     return TRUE;
  131.        }
  132.        if (controlid) {
  133.     BITMAP  bm;
  134.     char    playlistbitmapfile[MAX_PATH];
  135.     char    pathname[MAX_PATH];
  136.     button = GetDlgItem(hDlg, controlid);
  137.     style = GetWindowLong(button, GWL_STYLE);
  138.     style |= BS_OWNERDRAW;
  139.     SetWindowLong(button, GWL_STYLE, style);
  140.     SetWindowLong(button, GWL_USERDATA, w);
  141.     strcpy(playlistbitmapfile, options.playlist_skin_file);
  142.     path_remove_filespec(playlistbitmapfile);
  143.     sprintf(pathname, "%s%s.bmp", playlistbitmapfile, name);
  144.     DeleteObject(PlayListBitmap.bm[i]);
  145.     PlayListBitmap.bm[i] =
  146.         LoadImage(0, pathname, IMAGE_BITMAP, 0, 0,
  147.            LR_LOADFROMFILE);
  148.     if (!PlayListBitmap.bm[i])
  149.         ShowWindow(GetDlgItem(hDlg, controlid), SW_HIDE);
  150.     GetObject(PlayListBitmap.bm[i], sizeof(bm), &bm);
  151.     SetWindowPos(GetDlgItem(hDlg, controlid), NULL, 0, 0,
  152.           bm.bmWidth, bm.bmHeight / 2,
  153.           SWP_NOREDRAW | SWP_NOMOVE | SWP_NOOWNERZORDER |
  154.           SWP_NOZORDER);
  155.     switch (w) {
  156.     case BOTTOMRIGHT:
  157.         SetWindowPos(button, NULL, winrect.right - x,
  158.       winrect.bottom - y, 0, 0,
  159.       SWP_NOSIZE | SWP_NOOWNERZORDER | SWP_NOZORDER
  160.       | SWP_NOREDRAW);
  161.         break;
  162.     case TOPRIGHT:
  163.         SetWindowPos(button, NULL, winrect.right - x, y, 0, 0,
  164.       SWP_NOSIZE | SWP_NOOWNERZORDER | SWP_NOZORDER
  165.       | SWP_NOREDRAW);
  166.         break;
  167.     case BOTTOMLEFT:
  168.         SetWindowPos(button, NULL, x, winrect.bottom - y, 0, 0,
  169.       SWP_NOSIZE | SWP_NOOWNERZORDER | SWP_NOZORDER
  170.       | SWP_NOREDRAW);
  171.         break;
  172.     case TOPLEFT:
  173.         SetWindowPos(button, NULL, x, y, 0, 0,
  174.       SWP_NOSIZE | SWP_NOOWNERZORDER | SWP_NOZORDER
  175.       | SWP_NOREDRAW);
  176.         break;
  177.     }
  178.     return TRUE;
  179.        }
  180.      */
  181.     return FALSE;
  182. }
  183. BOOL    playlist_skin_get_ini_value(char *key, char *position, SIZE * rect)
  184. {
  185.     /*
  186.        SIZE    readrect;
  187.        while (*position != 0) {
  188.     unsigned int teller = 0;
  189.     char    name[MAX_PATH];
  190.     while (teller < strlen(position)) {
  191.         if (position[teller] == '=' || position[teller] == ',')
  192.      position[teller] = ' ';
  193.         teller++;
  194.     }
  195.     sscanf(position, "%s %i %i", name, &readrect.cx, &readrect.cy);
  196.     if (!stricmp(name, key)) {
  197.         rect->cx = readrect.cx;
  198.         rect->cy = readrect.cy;
  199.         return TRUE;
  200.     }
  201.     position = position + strlen(position) + 1;
  202.        }
  203.     */
  204.     return FALSE;
  205. }
  206. /*
  207. You should add your initialization code here. This function will be called
  208. when the dialog box receives the WM_INITDIALOG message.
  209. */
  210. int     playlist_skin_read()
  211. {
  212.     /*
  213.        char    values[32768];
  214.        char    playlistfile[MAX_PATH];
  215.        char    playlistbitmapfile[MAX_PATH];
  216.        char   *position;
  217.        char    buffer[4096];
  218.        HWND    hDlg = windows.dlg_playlist;
  219.        int     i = 0;
  220.        UINT    controlids[] =
  221.     { IDC_OPENLIST, IDC_SAVELIST, IDC_ADDDIR, IDC_CLEAR, IDC_CLEARSEL,
  222.     IDC_MOVEUP, IDC_MOVEDOWN, IDC_SHUFFLE, IDOK, IDC_CLOSE, 
  223.     IDC_MINIMIZE, IDC_MAXIMIZE, IDC_FIND,
  224.     0
  225.        };
  226.        while (controlids[i] != 0)
  227.     SetWindowLong(GetDlgItem(hDlg, controlids[i++]), GWL_USERDATA, 0);
  228.        if (!*options.playlist_skin_file || !options.use_playlist_skin)
  229.     return FALSE;
  230.        GetPrivateProfileString(NULL, NULL, NULL,
  231.          buffer, sizeof(buffer),
  232.          options.playlist_skin_file);
  233.        if (GetPrivateProfileSection
  234.     ("Playlist", values, 32767, options.playlist_skin_file) == 0) {
  235.     MessageBox(hDlg, "Can't open ini file!",
  236.         options.playlist_skin_file,
  237.         MB_ICONERROR | MB_SETFOREGROUND | MB_TOPMOST);
  238.        } // points to initialization filename
  239.        strcpy(playlistfile, options.playlist_skin_file);
  240.        path_remove_filespec(playlistfile);
  241.        position = values;
  242.        while (*position != 0) {
  243.     playlist_skin_set_control_bitmap(position);
  244.     position = position + strlen(position) + 1;
  245.        }
  246.        sprintf(playlistbitmapfile, "%sPlaylist.bmp", playlistfile);
  247.        DeleteObject(graphics.bmp_playlist_bg);
  248.        graphics.bmp_playlist_bg =
  249.     LoadImage(0, playlistbitmapfile, IMAGE_BITMAP, 0, 0,
  250.        LR_LOADFROMFILE);
  251.        if (!graphics.bmp_playlist_bg)
  252.     MessageBox(hDlg, "Can't load bitmap", playlistbitmapfile,
  253.         MB_ICONERROR | MB_SETFOREGROUND | MB_TOPMOST);
  254.        position = values;
  255.        playlist_skin_get_ini_value("UpLeft", position,
  256.      &PlayListBitmap.UpLeft);
  257.        position = values;
  258.        playlist_skin_get_ini_value("UpRight", position,
  259.      &PlayListBitmap.UpRight);
  260.        position = values;
  261.        playlist_skin_get_ini_value("DownLeft", position,
  262.      &PlayListBitmap.DownLeft);
  263.        position = values;
  264.        playlist_skin_get_ini_value("DownRight", position,
  265.      &PlayListBitmap.DownRight);
  266.        position = values;
  267.        playlist_skin_get_ini_value("UpMid", position, &PlayListBitmap.UpMid);
  268.        position = values;
  269.        playlist_skin_get_ini_value("DownMid", position,
  270.      &PlayListBitmap.DownMid);
  271.        position = values;
  272.        playlist_skin_get_ini_value("LeftMid", position,
  273.      &PlayListBitmap.LeftMid);
  274.        position = values;
  275.        playlist_skin_get_ini_value("RightMid", position,
  276.      &PlayListBitmap.RightMid);
  277.        position = values;
  278.        playlist_skin_get_ini_value("MinSize", position,
  279.      &PlayListBitmap.MinSize);
  280.        position = values;
  281.        playlist_skin_get_ini_value("Colors", position,
  282.      &PlayListBitmap.Colors);
  283.        if (PlayListBitmap.UpLeft.cx) {
  284.     LONG    style;
  285.     HWND    button;
  286.     LONG    data;
  287.     style = GetWindowLong(hDlg, GWL_STYLE);
  288.     style &= ~WS_CAPTION;
  289.     style &= ~WS_THICKFRAME;
  290.     style &= ~WS_BORDER;
  291.     SetWindowLong(hDlg, GWL_STYLE, style);
  292.     ShowWindow(GetDlgItem(hDlg, IDC_MINIMIZE), SW_SHOW);
  293.     ShowWindow(GetDlgItem(hDlg, IDC_MAXIMIZE), SW_SHOW);
  294.     ShowWindow(GetDlgItem(hDlg, IDC_CLOSE), SW_SHOW);
  295.     ShowWindow(GetDlgItem(hDlg, IDC_SORTTEXT), SW_HIDE);
  296.     ShowWindow(GetDlgItem(hDlg, IDC_MOVETEXT), SW_HIDE);
  297.     // Check for the find button.
  298.     button = GetDlgItem(hDlg, IDC_FIND);
  299.     data = GetWindowLong(button, GWL_USERDATA);
  300.     if (!data) {
  301.         ShowWindow(button, SW_HIDE);
  302.     } else
  303.         ShowWindow(button, SW_SHOW);
  304.        } else
  305.     return FALSE;
  306.     */
  307.     return 1;
  308. }
  309. void    playlist_draw_control(UINT controlid, LPDRAWITEMSTRUCT ds)
  310. {
  311.     /*
  312.        HDC     winmemdc = CreateCompatibleDC(ds->hDC);
  313.        HBITMAP h;
  314.        HBITMAP image;
  315.        HPALETTE oldpal;
  316.        int     height = 0, i = 0;
  317.        UINT    controlids[] =
  318.     { IDC_OPENLIST, IDC_SAVELIST, IDC_ADDDIR, IDC_CLEAR, IDC_CLEARSEL,
  319.     IDC_MOVEUP, IDC_MOVEDOWN, IDC_SHUFFLE, IDOK, IDC_CLOSE, IDC_MINIMIZE, 
  320.     IDC_MAXIMIZE, IDC_FIND, 0
  321.        };
  322.        while (controlids[i] != 0) {
  323.     if (controlids[i] == ds->CtlID) {
  324.         image = PlayListBitmap.bm[i];
  325.         break;
  326.     }
  327.     i++;
  328.        }
  329.        if (ds->itemState & ODS_SELECTED) {
  330.     height = ds->rcItem.bottom;
  331.        }
  332.        h = (HBITMAP) SelectObject(winmemdc, image);
  333.        oldpal = SelectPalette(ds->hDC, graphics.pal_main, FALSE);
  334.        RealizePalette(ds->hDC);
  335.        BitBlt(ds->hDC, 0, 0, ds->rcItem.right, ds->rcItem.bottom, winmemdc,
  336.        0, height, SRCCOPY);
  337.        SelectPalette(ds->hDC, oldpal, FALSE);
  338.        SelectObject(winmemdc, h);
  339.        DeleteDC(winmemdc);
  340.     */
  341. }
  342. #define  MIDUP 1
  343. #define  MIDDOWN 2
  344. #define  MIDLEFT 3
  345. #define  MIDRIGHT 4
  346. #define  CENTER 5
  347. BOOL    playlist_skin_draw_side(HDC hdc, HDC winmemdc, BITMAP * bm,
  348.                                 RECT * winrect, int type)
  349. {
  350.     /*
  351.        RECT    Siderect;
  352.        RECT    Destrect;
  353.        int     mode;
  354.        switch (type) {
  355.        case MIDUP:
  356.     Siderect.left = PlayListBitmap.UpLeft.cx;
  357.     Siderect.top = 0;
  358.     Siderect.right = bm->bmWidth - PlayListBitmap.UpRight.cx;
  359.     Siderect.bottom = PlayListBitmap.UpMid.cx;
  360.     Destrect.left = PlayListBitmap.UpLeft.cx;
  361.     Destrect.top = 0;
  362.     Destrect.right = winrect->right - (PlayListBitmap.UpRight.cx);
  363.     Destrect.bottom = PlayListBitmap.UpMid.cx;
  364.     mode = PlayListBitmap.UpMid.cy;
  365.     break;
  366.        case MIDDOWN:
  367.     Siderect.left = PlayListBitmap.DownLeft.cx;
  368.     Siderect.top = bm->bmHeight - PlayListBitmap.DownMid.cx;
  369.     Siderect.right = bm->bmWidth - PlayListBitmap.DownRight.cx;
  370.     Siderect.bottom = bm->bmHeight;
  371.     Destrect.left = PlayListBitmap.DownLeft.cx;
  372.     Destrect.top = winrect->bottom - (PlayListBitmap.DownMid.cx);
  373.     Destrect.right = winrect->right - (PlayListBitmap.DownRight.cx);
  374.     Destrect.bottom = winrect->bottom;
  375.     mode = PlayListBitmap.DownMid.cy;
  376.     break;
  377.        case MIDLEFT:
  378.     Siderect.left = 0;
  379.     Siderect.top = PlayListBitmap.UpLeft.cy;
  380.     Siderect.right = PlayListBitmap.LeftMid.cx;
  381.     Siderect.bottom = bm->bmHeight - PlayListBitmap.DownLeft.cy;
  382.     Destrect.left = 0;
  383.     Destrect.top = PlayListBitmap.UpLeft.cy;
  384.     Destrect.right = PlayListBitmap.LeftMid.cx;
  385.     Destrect.bottom = winrect->bottom - PlayListBitmap.DownLeft.cy;
  386.     mode = PlayListBitmap.LeftMid.cy;
  387.     break;
  388.        case MIDRIGHT:
  389.     Siderect.left = bm->bmWidth - (PlayListBitmap.RightMid.cx);
  390.     Siderect.top = PlayListBitmap.UpRight.cy;
  391.     Siderect.right = bm->bmWidth;
  392.     Siderect.bottom = bm->bmHeight - PlayListBitmap.DownRight.cy;
  393.     Destrect.left = winrect->right - PlayListBitmap.RightMid.cx;
  394.     Destrect.top = PlayListBitmap.UpRight.cy;
  395.     Destrect.right = winrect->right;
  396.     Destrect.bottom = winrect->bottom - PlayListBitmap.DownRight.cy;
  397.     mode = PlayListBitmap.RightMid.cy;
  398.     break;
  399.        case CENTER:
  400.     Siderect.left = PlayListBitmap.LeftMid.cx;
  401.     Siderect.top = PlayListBitmap.UpMid.cx;
  402.     Siderect.right = bm->bmWidth - PlayListBitmap.RightMid.cx;
  403.     Siderect.bottom = bm->bmHeight - PlayListBitmap.DownMid.cx;
  404.     Destrect.left = PlayListBitmap.LeftMid.cx;
  405.     Destrect.top = PlayListBitmap.UpMid.cx;
  406.     Destrect.right = winrect->right - PlayListBitmap.RightMid.cx;;
  407.     Destrect.bottom = winrect->bottom - PlayListBitmap.DownMid.cx;
  408.     mode = 1;
  409.     break;
  410.        }
  411.        if (mode == 1) {
  412.     StretchBlt(hdc, // handle to destination DC
  413.         Destrect.left, // x-coord of destination upper-left corner
  414.         Destrect.top, // y-coord of destination upper-left corner
  415.         Destrect.right - Destrect.left, // width of destination rectangle
  416.         Destrect.bottom - Destrect.top, // height of destination rectangle
  417.         winmemdc, // handle to source DC
  418.         Siderect.left, // x-coord of source upper-left corner
  419.         Siderect.top, // y-coord of source upper-left corner
  420.         Siderect.right - Siderect.left, // width of source rectangle
  421.         Siderect.bottom - Siderect.top, // height of source rectangle
  422.         SRCCOPY // raster operation code
  423.         );
  424.        } else {
  425.     //      Figure out when our last images will be drawn.
  426.     int     nEndCol =
  427.         (Destrect.right - Destrect.left) / (Siderect.right -
  428.      Siderect.left) + 1;
  429.     int     nEndRow =
  430.         (Destrect.bottom - Destrect.top) / (Siderect.bottom -
  431.      Siderect.top) + 1;
  432.     int     nCol, nRow;
  433.     //
  434.     //      We would use clipping when the tiling is used as a background bitmap.
  435.     //      This would substantially reduce the number of BitBlt's we do.
  436.     for (nCol = 0; nCol < nEndCol; nCol++) {
  437.         int     xcount, xrest = 0;
  438.         xcount =
  439.      (Destrect.right - Destrect.left) -
  440.      ((Siderect.right - Siderect.left) * (nCol + 1));
  441.         if (xcount < 0)
  442.      xrest = xcount;
  443.         for (nRow = 0; nRow < nEndRow; nRow++) {
  444.      int     ycount, yrest = 0;
  445.      ycount =
  446.          (Destrect.bottom - Destrect.top) -
  447.          ((nRow + 1) * (Siderect.bottom - Siderect.top));
  448.      if (ycount < 0)
  449.          yrest = ycount;
  450.      BitBlt(hdc,
  451.             Destrect.left +
  452.             ((Siderect.right - Siderect.left) *
  453.      nCol),
  454.             Destrect.top +
  455.             ((Siderect.bottom - Siderect.top) *
  456.      nRow),
  457.             Siderect.right - Siderect.left + xrest,
  458.             Siderect.bottom - Siderect.top + yrest,
  459.             winmemdc, Siderect.left, Siderect.top, SRCCOPY);
  460.         }
  461.     }
  462.        }
  463.     */
  464.     return TRUE;
  465. }
  466. //
  467. //
  468. //
  469. LRESULT CALLBACK playlist_windowproc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
  470. {
  471.     /*
  472.        switch (msg) 
  473.     {
  474.        case WM_ERASEBKGND:
  475.      if(!PlayListBitmap.UpLeft.cx)
  476.      return FALSE;
  477.      else
  478.      return TRUE;
  479.        case WM_PAINT:
  480.      {
  481.      HDC     winhdc, winmemdc;
  482.      HBITMAP h;
  483.      BITMAP  bm;
  484.      HPALETTE oldpal;
  485.      PAINTSTRUCT Paint;
  486.      RECT    winrect;
  487.      RECT    Listviewrect;
  488.      if (!PlayListBitmap.UpLeft.cx)
  489.      break;
  490.      winhdc = BeginPaint(hwndDlg, &Paint);
  491.      GetClientRect(hwndDlg, &winrect);
  492.      GetWindowRect(windows.m_hWndPlaylist_ListView, &Listviewrect);
  493.      Listviewrect.right -= Listviewrect.left;
  494.      Listviewrect.bottom -= Listviewrect.top;
  495.      ScreenToClient(hwndDlg, (LPPOINT) & Listviewrect);
  496.      Listviewrect.right += Listviewrect.left;
  497.      Listviewrect.bottom += Listviewrect.top;
  498.      ExcludeClipRect(winhdc, Listviewrect.left, Listviewrect.top,
  499.      Listviewrect.right, Listviewrect.bottom);
  500.      winmemdc = CreateCompatibleDC(winhdc);
  501.      GetObject(graphics.bmp_playlist_bg, sizeof(bm), &bm);
  502.      h = (HBITMAP) SelectObject(winmemdc, graphics.bmp_playlist_bg);
  503.      oldpal = SelectPalette(winhdc, graphics.pal_main, FALSE);
  504.      RealizePalette(winhdc);
  505.      BitBlt(winhdc, 0, 0, PlayListBitmap.UpLeft.cx,
  506.         PlayListBitmap.UpLeft.cy, winmemdc, 0, 0, SRCCOPY);
  507.      playlist_skin_draw_side(winhdc, winmemdc, &bm, &winrect,
  508.      MIDUP);
  509.      BitBlt(winhdc, winrect.right - (PlayListBitmap.UpRight.cx), 0,
  510.         PlayListBitmap.UpRight.cx, PlayListBitmap.UpRight.cy,
  511.         winmemdc, bm.bmWidth - PlayListBitmap.UpRight.cx, 0,
  512.         SRCCOPY);
  513.      playlist_skin_draw_side(winhdc, winmemdc, &bm, &winrect,
  514.      MIDLEFT);
  515.      playlist_skin_draw_side(winhdc, winmemdc, &bm, &winrect,
  516.      MIDRIGHT);
  517.      BitBlt(winhdc, 0, winrect.bottom - PlayListBitmap.DownLeft.cy,
  518.         PlayListBitmap.DownLeft.cx, PlayListBitmap.DownLeft.cy,
  519.         winmemdc, 0, bm.bmHeight - PlayListBitmap.DownLeft.cy,
  520.         SRCCOPY);
  521.      playlist_skin_draw_side(winhdc, winmemdc, &bm, &winrect,
  522.      MIDDOWN);
  523.      BitBlt(winhdc, winrect.right - (PlayListBitmap.DownRight.cx),
  524.         winrect.bottom - PlayListBitmap.DownRight.cy,
  525.         PlayListBitmap.DownRight.cx,
  526.         PlayListBitmap.DownRight.cy, winmemdc,
  527.         bm.bmWidth - PlayListBitmap.DownRight.cx,
  528.         bm.bmHeight - PlayListBitmap.DownRight.cy, SRCCOPY);
  529.      SelectPalette(winmemdc, oldpal, FALSE);
  530.      SelectObject(winmemdc, h);
  531.      DeleteDC(winmemdc);
  532.      EndPaint(hwndDlg, &Paint);
  533.      }
  534.      return 0;
  535.        case WM_DRAWITEM:
  536.      playlist_draw_control(wParam, (LPDRAWITEMSTRUCT) lParam);
  537.      return TRUE;
  538.        case WM_INITDIALOG:
  539.      windows.wnd_playlist_IPEdit = NULL;
  540.      playlist_skin_read();
  541.      return TRUE;
  542.        case WM_SIZE:
  543.     {
  544.         RECT    NewPlaylistrect;
  545.         int     moveflag;
  546.      InvalidateRect(windows.dlg_playlist, NULL, TRUE);
  547.         if (wParam != SIZE_MINIMIZED) {
  548.      GetWindowRect(hwndDlg, &NewPlaylistrect);
  549.      windows.dlg_playlist = hwndDlg;
  550.      playlist_move_control(IDC_PLAYLIST, &NewPlaylistrect,
  551.            RESIZE);
  552.      if (!
  553.          (moveflag =
  554.           GetWindowLong(GetDlgItem
  555.         (hwndDlg, IDC_SORTTEXT),
  556.         GWL_USERDATA))) moveflag = TOPRIGHT;
  557.      playlist_move_control(IDC_SORTTEXT, &NewPlaylistrect,
  558.            moveflag);
  559.      if (!
  560.          (moveflag =
  561.           GetWindowLong(GetDlgItem
  562.         (hwndDlg, IDC_OPENLIST),
  563.         GWL_USERDATA))) moveflag = TOPRIGHT;
  564.      playlist_move_control(IDC_OPENLIST, &NewPlaylistrect,
  565.            moveflag);
  566.      if (!
  567.          (moveflag =
  568.           GetWindowLong(GetDlgItem
  569.         (hwndDlg, IDC_SAVELIST),
  570.         GWL_USERDATA))) moveflag = TOPRIGHT;
  571.      playlist_move_control(IDC_SAVELIST, &NewPlaylistrect,
  572.            moveflag);
  573.      if (!
  574.          (moveflag =
  575.           GetWindowLong(GetDlgItem(hwndDlg, IDC_CLEAR),
  576.         GWL_USERDATA))) moveflag = TOPRIGHT;
  577.      playlist_move_control(IDC_CLEAR, &NewPlaylistrect,
  578.            moveflag);
  579.      if (!
  580.          (moveflag =
  581.           GetWindowLong(GetDlgItem
  582.         (hwndDlg, IDC_CLEARSEL),
  583.         GWL_USERDATA))) moveflag = TOPRIGHT;
  584.      playlist_move_control(IDC_CLEARSEL, &NewPlaylistrect,
  585.            moveflag);
  586.      if (!(moveflag = GetWindowLong(GetDlgItem(hwndDlg, IDC_MOVETEXT), GWL_USERDATA)))
  587.      moveflag = TOPRIGHT;
  588.      playlist_move_control(IDC_MOVETEXT, &NewPlaylistrect, moveflag);
  589.      if (!
  590.          (moveflag =
  591.           GetWindowLong(GetDlgItem
  592.         (hwndDlg, IDC_MOVEUP),
  593.         GWL_USERDATA))) moveflag = TOPRIGHT;
  594.      playlist_move_control(IDC_MOVEUP, &NewPlaylistrect,
  595.            moveflag);
  596.      if (!
  597.          (moveflag =
  598.           GetWindowLong(GetDlgItem
  599.         (hwndDlg, IDC_MOVEDOWN),
  600.         GWL_USERDATA))) moveflag = TOPRIGHT;
  601.      playlist_move_control(IDC_MOVEDOWN, &NewPlaylistrect,
  602.            moveflag);
  603.      if (!
  604.          (moveflag =
  605.           GetWindowLong(GetDlgItem(hwndDlg, IDOK),
  606.         GWL_USERDATA))) moveflag = BOTTOMRIGHT;
  607.      playlist_move_control(IDOK, &NewPlaylistrect, moveflag);
  608.      if (!
  609.          (moveflag =
  610.           GetWindowLong(GetDlgItem
  611.         (hwndDlg, IDC_SHUFFLE),
  612.         GWL_USERDATA))) moveflag = TOPRIGHT;
  613.      playlist_move_control(IDC_SHUFFLE, &NewPlaylistrect,
  614.            moveflag);
  615.      if (!
  616.          (moveflag =
  617.           GetWindowLong(GetDlgItem
  618.         (hwndDlg, IDC_ADDDIR),
  619.         GWL_USERDATA))) moveflag = TOPRIGHT;
  620.      playlist_move_control(IDC_ADDDIR, &NewPlaylistrect,
  621.            moveflag);
  622.      if (!
  623.          (moveflag =
  624.           GetWindowLong(GetDlgItem
  625.         (hwndDlg, IDC_MINIMIZE),
  626.         GWL_USERDATA))) moveflag = TOPRIGHT;
  627.      playlist_move_control(IDC_MINIMIZE, &NewPlaylistrect,
  628.            moveflag);
  629.      if (!
  630.          (moveflag =
  631.           GetWindowLong(GetDlgItem
  632.         (hwndDlg, IDC_MAXIMIZE),
  633.         GWL_USERDATA))) moveflag = TOPRIGHT;
  634.      playlist_move_control(IDC_MAXIMIZE, &NewPlaylistrect,
  635.            moveflag);
  636.      if (!
  637.          (moveflag =
  638.           GetWindowLong(GetDlgItem(hwndDlg, IDC_CLOSE),
  639.         GWL_USERDATA))) moveflag = TOPRIGHT;
  640.      playlist_move_control(IDC_CLOSE, &NewPlaylistrect,
  641.            moveflag);
  642.      if (!
  643.          (moveflag =
  644.           GetWindowLong(GetDlgItem(hwndDlg, IDC_FIND),
  645.         GWL_USERDATA))) moveflag = TOPRIGHT;
  646.      playlist_move_control(IDC_FIND, &NewPlaylistrect,
  647.            moveflag);
  648.      GetWindowRect(hwndDlg, &globals.playlist_rect);
  649.      CopyRect(&options.playlist_window_pos,
  650.       &globals.playlist_rect);
  651.         }
  652.         break;
  653.     }
  654.     return 0;
  655.        }
  656.     */
  657.     return FALSE;
  658. }