ÇÁ·Î±×·¡¹Ö

 3206, 7/161 ȸ¿ø°¡ÀÔ  ·Î±×ÀΠ 
   khfs200
   win 32 api ·Î ¹ÂÁ÷Ç÷¹ÀÌ¾î ¸¸µé±â

http://www.hackerschool.org/HS_Boards/zboard.php?id=QNA_programming&no=6463 [º¹»ç]


Àç»ýÁßÀÎ ³ë·¡¸íÀ» TextOut() À¸·Î ³ªÅ¸³»°í½ÍÀºµ¥ ¾îÂî ÇÒÁö °¨À̾ÈÀâÈ÷³×¿ä..

#include <windows.h>
#include <mmsystem.h>
#include <tchar.h>
#include <commctrl.h>

#pragma comment(lib, "winmm")
#pragma comment(lib, "comctl32")
#define  MCI_NOT_OPEN        ((UINT)-1)

#define  ID_CHECKBUTTON_MUTE  150

#define  ID_BUTTON_PREV       160
#define  ID_BUTTON_STOP       161
#define  ID_BUTTON_PLAY       162
#define  ID_BUTTON_NEXT       163

#define  ID_LISTBOX_PLAYLIST  170

#define  ID_BUTTON_LIST_ADD   180
#define  ID_BUTTON_LIST_DEL   181

#define  ID_COMBOBOX_REPEAT   200
#define  ID_COMBOBOX_SHUFFLE  201


LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
HWND      g_hWnd;
LPCTSTR   lpszClass=TEXT("MP3Ç÷¹À̾î");

UINT      g_wDeviceID=MCI_NOT_OPEN;

HWND      hTrackPlay=NULL;
HWND      hTrackWaveVol=NULL;
HWND      hComboRepeat=NULL;
HWND      hComboShuffle=NULL;
HWND      hCheckButtonMute=NULL;
HWND      hListPlay=NULL;
int       nPlayStatus=0;
DWORD     dwThreadID=0;
HANDLE    hThread=NULL;
DWORD     dwPlayPos=0;
UINT      nPlayMsg=0;
int       nMainLoop=0;
HANDLE    hMP3DelayEvent=NULL;

typedef struct
{
        char szFilePath[MAX_PATH];
        char szFileName[MAX_PATH];
}PLAYITEMDATA;

typedef struct
{
        HMIXER  hMixer;
        DWORD   dwChannels;
        DWORD   dwMixerCtrlID;
        DWORD   dwMixerMuteCtrlID;
}MIXERDATA;

PLAYITEMDATA nowPlaySongData;
MIXERDATA  stMP3Mixer={NULL, 0, 0, 0};
TCHAR      *strRepeatItems[]={TEXT("¹Ýº¹¾øÀ½"),TEXT("Áö±Ý°î¹Ýº¹"),TEXT("Àüü¹Ýº¹")};
TCHAR      *strShuffleItems[]={TEXT("¼ø¼­´ë·Î"),TEXT("¹«ÀÛÀ§")};
int         nPlayListNum=0;
HFONT       hFontTime, hOldFontTime;
TCHAR       szPlayTime[128]="00:00:00";

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
          ,LPSTR lpszCmdParam,int nCmdShow)
{
        MSG       Message;
        WNDCLASS  WndClass;

        g_hInst=hInstance;

        WndClass.cbClsExtra=0;
        WndClass.cbWndExtra=0;
        WndClass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
        WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
        WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
        WndClass.hInstance=hInstance;
        WndClass.lpfnWndProc=WndProc;
        WndClass.lpszClassName=lpszClass;
        WndClass.lpszMenuName=NULL;
        WndClass.style=CS_HREDRAW | CS_VREDRAW;
        RegisterClass(&WndClass);

        g_hWnd=CreateWindow(lpszClass,lpszClass,WS_POPUPWINDOW | WS_CAPTION | WS_MINIMIZEBOX ,
                                CW_USEDEFAULT,CW_USEDEFAULT,326,630,
                                NULL,(HMENU)NULL,hInstance,NULL);
        ShowWindow(g_hWnd, nCmdShow);

        while (GetMessage(&Message,NULL,0,0))
        {
                TranslateMessage(&Message);
                DispatchMessage(&Message);
        }

        return (int)Message.wParam;
}
HMIXER OpenVolumeCtrl(HWND hWnd, MIXERDATA *pstMP3Mixer)
{
        MMRESULT           result;
        HMIXER             hMixer;
        MIXERLINE          ml  = {0};
        MIXERLINECONTROLS  mlc = {0};         
        MIXERCONTROL       mc  = {0};
        
        result = mixerOpen(&hMixer, MIXER_OBJECTF_MIXER, (DWORD)hWnd,
                               0, MIXER_OBJECTF_MIXER | CALLBACK_WINDOW);

        if (MMSYSERR_NOERROR != result)
    {
                MessageBox(hWnd, "mixerOpen Error!", "Mixer Error", MB_OK);
                return FALSE;
        }
        
        ZeroMemory(&ml,sizeof(MIXERLINE));

        ml.cbStruct = sizeof(MIXERLINE);


        // http://msdn.microsoft.com/en-us/library/ms712129(VS.85).aspx

        // ¸¶½ºÅÍ º¼·ý
        //ml.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;

        // Wave º¼·ý
    ml.dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT;
    
        result = mixerGetLineInfo((HMIXEROBJ) hMixer,
                                      &ml, MIXER_OBJECTF_HMIXER | MIXER_GETLINEINFOF_COMPONENTTYPE);
        
        if (MMSYSERR_NOERROR != result)
    {
                 MessageBox(hWnd, "mixerGetLineInfo Error!", "Mixer Error", MB_OK);
         return FALSE;
        }

        pstMP3Mixer->dwChannels = MIXERCONTROL_CONTROLF_UNIFORM;

        // º¼·ý ÄÁÆ®·Ñ ID¾ò±â
        mlc.cbStruct = sizeof(MIXERLINECONTROLS);         
        mlc.dwLineID = ml.dwLineID;         
        mlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;         
        mlc.cControls = 1;         
        mlc.pamxctrl = &mc;         
        mlc.cbmxctrl = sizeof(MIXERCONTROL);         
        result = mixerGetLineControls((HMIXEROBJ) hMixer,
                                          &mlc, MIXER_OBJECTF_HMIXER | MIXER_GETLINECONTROLSF_ONEBYTYPE);

        if (MMSYSERR_NOERROR != result)
    {
                MessageBox(hWnd, "mixerGetLineControls Error! - Wave Control", "Mixer Error", MB_OK);
                return FALSE;
        }

        pstMP3Mixer->dwMixerCtrlID=mc.dwControlID;

        pstMP3Mixer->hMixer=hMixer;


        // Mute ÄÁÆ®·Ñ ID¾ò±â
        mlc.dwControlType = MIXERCONTROL_CONTROLTYPE_MUTE;         
        result = mixerGetLineControls((HMIXEROBJ) hMixer,
                &mlc, MIXER_OBJECTF_HMIXER | MIXER_GETLINECONTROLSF_ONEBYTYPE);
        
        if (MMSYSERR_NOERROR != result)
    {
                MessageBox(hWnd, "mixerGetLineControls Error! - Mute Control", "Mixer Error", MB_OK);
                return FALSE;
        }
        
        pstMP3Mixer->dwMixerMuteCtrlID=mc.dwControlID;    

        return hMixer;
}


void CloseVolumeCtrl(MIXERDATA *pstMP3Mixer)
{
    if (pstMP3Mixer->hMixer) mixerClose(pstMP3Mixer->hMixer);
}


void SetVolume(MIXERDATA *pstMP3Mixer, DWORD dwVolume)
{
        MMRESULT                      result;
        MIXERCONTROLDETAILS           mcd  = {0};         
        MIXERCONTROLDETAILS_UNSIGNED  mcdu = {0};
        
        if (dwVolume > 65535) dwVolume=65535;

        mcdu.dwValue = dwVolume; // º¼·ý Å©±â´Â 0¿¡¼­ 65535 »çÀÌ °ª         
        mcd.cbStruct = sizeof(MIXERCONTROLDETAILS);         
        mcd.hwndOwner = 0;
        mcd.dwControlID = pstMP3Mixer->dwMixerCtrlID;         
        mcd.paDetails = &mcdu;
        mcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);         
        mcd.cChannels = pstMP3Mixer->dwChannels;
        
        result = mixerSetControlDetails((HMIXEROBJ) pstMP3Mixer->hMixer,
                                            &mcd, MIXER_SETCONTROLDETAILSF_VALUE);
        if (MMSYSERR_NOERROR != result)
    {
                MessageBox(g_hWnd, "mixerSetControlDetails Error!", "Mixer Error", MB_OK);
                return ;
        }
}


DWORD GetVolume(MIXERDATA *pstMP3Mixer)
{
        MMRESULT                      result;
        MIXERCONTROLDETAILS           mcd  = {0};         
        MIXERCONTROLDETAILS_UNSIGNED  mcdu = {0};
        
        mcdu.dwValue = 0; // º¼·ý Å©±â´Â 0¿¡¼­ 65535 »çÀÌ °ª         
        mcd.cbStruct = sizeof(MIXERCONTROLDETAILS);         
        mcd.hwndOwner = 0;
        mcd.dwControlID = pstMP3Mixer->dwMixerCtrlID;         
        mcd.paDetails = &mcdu;
        mcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);         
        mcd.cChannels = pstMP3Mixer->dwChannels;
        
        result = mixerGetControlDetails((HMIXEROBJ) pstMP3Mixer->hMixer,
                                   &mcd, MIXER_GETCONTROLDETAILSF_VALUE);

        if (MMSYSERR_NOERROR != result)
    {
                MessageBox(g_hWnd, "mixerGetControlDetails Error!", "Mixer Error", MB_OK);
                return FALSE;
        }

        return mcdu.dwValue;
}


BOOL GetMute(MIXERDATA *pstMP3Mixer)
{
        MMRESULT                     m_nStatus;
    MIXERCONTROLDETAILS          mcd;
    MIXERCONTROLDETAILS_BOOLEAN  mcd_b = {0};
        
    mcd.cbStruct = sizeof(MIXERCONTROLDETAILS);
    mcd.dwControlID = pstMP3Mixer->dwMixerMuteCtrlID;
    mcd.cChannels = pstMP3Mixer->dwChannels;
    mcd.cMultipleItems = 0;
    mcd.cbDetails = sizeof(MIXERCONTROLDETAILS_BOOLEAN);
    mcd.paDetails = &mcd_b;
    m_nStatus = mixerGetControlDetails((HMIXEROBJ)pstMP3Mixer->hMixer, &mcd, 0L);
    return mcd_b.fValue;
}


BOOL SetMute(MIXERDATA *pstMP3Mixer, BOOL bVal)
{
        MMRESULT                     m_nStatus;
    MIXERCONTROLDETAILS          mcd;
    MIXERCONTROLDETAILS_BOOLEAN  mcd_b;
        
    mcd_b.fValue = bVal;
    mcd.cbStruct = sizeof(MIXERCONTROLDETAILS);
    mcd.dwControlID = pstMP3Mixer->dwMixerMuteCtrlID;
    mcd.cChannels = pstMP3Mixer->dwChannels;
    mcd.cMultipleItems = 0;
    mcd.cbDetails = sizeof(MIXERCONTROLDETAILS_BOOLEAN);
    mcd.paDetails = &mcd_b;
    m_nStatus = mixerSetControlDetails((HMIXEROBJ)pstMP3Mixer->hMixer, &mcd, 0L);
    return (m_nStatus == MMSYSERR_NOERROR);
}



//************************************************************************************************
// MCI ó¸® ÇÔ¼öµé
//************************************************************************************************
DWORD OpenMP3(UINT *pwDeviceID, LPSTR lpszMP3filename)
{
        DWORD           Result;
        MCI_OPEN_PARMS  mciOpenParms;
    MCI_SET_PARMS   mciSetParms;

        // ÀåÄ¡¸¦ OpenÇÏ°í ID¸¦ ¹ß±Þ¹Þ´Â´Ù.
        mciOpenParms.lpstrDeviceType = "MPEGVideo";
        mciOpenParms.lpstrElementName = lpszMP3filename;

        Result=mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT,
                                 (DWORD)(LPVOID) &mciOpenParms);

        if (Result)
        {
                return Result;
        }

        *pwDeviceID=mciOpenParms.wDeviceID;
        
        mciSetParms.dwTimeFormat = MCI_FORMAT_MILLISECONDS;  // TimeÀ» miliseconds´ÜÀ§·Î
        mciSendCommand(mciOpenParms.wDeviceID, MCI_SET, MCI_SET_TIME_FORMAT, (DWORD)&mciSetParms);

        return 0;
}


void Close(UINT *pwDeviceID)
{        
    if((*pwDeviceID)!=MCI_NOT_OPEN)
        {
                 MCI_GENERIC_PARMS mciGenericParms;
                 mciSendCommand(*pwDeviceID,MCI_STOP,MCI_WAIT,(DWORD)&mciGenericParms);
         mciSendCommand(*pwDeviceID,MCI_CLOSE, 0, (DWORD)NULL);
            *pwDeviceID=MCI_NOT_OPEN;
        }
}


DWORD Play(HWND hWndNotify, UINT wDeviceID)
{
        DWORD           Result;
        MCI_PLAY_PARMS  mciPlayParms;

    mciPlayParms.dwCallback=(DWORD)hWndNotify;
        
        Result = mciSendCommand(wDeviceID, MCI_PLAY, MCI_NOTIFY,
                                    (DWORD)(LPVOID)&mciPlayParms);

        if (Result)
        {
                mciSendCommand(wDeviceID, MCI_CLOSE, 0, (DWORD)NULL);
                return Result;
        }

        return 0;
}


void Stop(UINT wDeviceID)
{
        if(wDeviceID!=MCI_NOT_OPEN)
        {
                MCI_GENERIC_PARMS mciGenericParms;
                mciSendCommand(wDeviceID,MCI_STOP,MCI_WAIT,(DWORD)&mciGenericParms);
        }
}


void Pause(UINT wDeviceID)
{
        if(wDeviceID!=MCI_NOT_OPEN)
        {
                MCI_GENERIC_PARMS mciGenericParms;
                mciSendCommand(wDeviceID,MCI_PAUSE,MCI_WAIT,(DWORD)&mciGenericParms);
        }
}


void Resume(UINT wDeviceID)
{
        if(wDeviceID!=MCI_NOT_OPEN)
        {
                MCI_GENERIC_PARMS mciGenericParms;
                mciSendCommand(wDeviceID,MCI_RESUME,MCI_WAIT,(DWORD)&mciGenericParms);
        }
}


DWORD GetLength(UINT wDeviceID)
{
        if(wDeviceID!=MCI_NOT_OPEN)
        {
                MCI_STATUS_PARMS mciStatusParms;
                mciStatusParms.dwItem=MCI_STATUS_LENGTH;
                mciSendCommand(wDeviceID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)&mciStatusParms);
                return mciStatusParms.dwReturn;
        }
        
        return 0;
}


DWORD GetPos(UINT wDeviceID)
{
        if(wDeviceID!=MCI_NOT_OPEN)
        {
                MCI_STATUS_PARMS mciStatusParms;
                mciStatusParms.dwItem=MCI_STATUS_POSITION;
                mciSendCommand(wDeviceID,MCI_STATUS,MCI_STATUS_ITEM|MCI_WAIT,(DWORD)&mciStatusParms);
                return mciStatusParms.dwReturn;
        }

        return 0;
}


void SetPos(UINT wDeviceID, DWORD dwPos)
{
        if(wDeviceID!=MCI_NOT_OPEN)
        {
                MCI_SEEK_PARMS mciSeekParms;
                mciSeekParms.dwTo=dwPos;
                mciSendCommand(wDeviceID,MCI_SEEK,MCI_TO,(DWORD)&mciSeekParms);
        }        
}


void MoveStartPos(UINT wDeviceID)
{
        if(wDeviceID!=MCI_NOT_OPEN)
        {
                MCI_SEEK_PARMS mciSeekParms;
                mciSendCommand(wDeviceID,MCI_SEEK,MCI_SEEK_TO_START,(DWORD)&mciSeekParms);
        }
}


void MoveEndPos(UINT wDeviceID)
{
        if(wDeviceID!=MCI_NOT_OPEN)
        {
                MCI_SEEK_PARMS mciSeekParms;
                mciSendCommand(wDeviceID,MCI_SEEK,MCI_SEEK_TO_END,(DWORD)&mciSeekParms);
        }
}







//************************************************************************************************
// Æ®·¢¹Ù ó¸® ÇÔ¼öµé
//************************************************************************************************

void SetTrackBarRangeMax(HWND hTrackbar, int nMax, BOOL bRedraw)
{
        SendMessage(hTrackbar, TBM_SETRANGEMAX, bRedraw, nMax);
}


void SetTrackBarRangeMin(HWND hTrackbar, int nMin, BOOL bRedraw)
{
        SendMessage(hTrackbar, TBM_SETRANGEMIN, bRedraw, nMin);
}


int GetTrackBarRangeMax(HWND hTrackbar)
{
        return SendMessage(hTrackbar, TBM_GETRANGEMAX, 0, 0);
}


int GetTrackBarRangeMin(HWND hTrackbar)
{
        return SendMessage(hTrackbar, TBM_GETRANGEMIN, 0, 0);
}


void SetTrackBarPos(HWND hTrackbar, int nPos, BOOL bRedraw)
{
        SendMessage(hTrackbar, TBM_SETPOS, bRedraw, nPos);
}


DWORD GetTrackBarPos(HWND hTrackbar)
{
        return SendMessage(hTrackbar, TBM_GETPOS, 0, 0);
}





//************************************************************************************************
// ½º·¹µå ÇÔ¼ö
//************************************************************************************************

DWORD WINAPI MP3ThreadFunc(LPVOID temp)
{
        while(nMainLoop)
        {
                if (nPlayStatus)
                {
                    SendMessage(g_hWnd, nPlayMsg, nPlayMsg, nPlayMsg);
                }
                WaitForMultipleObjects(1, &hMP3DelayEvent, TRUE, 100);
        }

        return 0;
}





//************************************************************************************************
// ½º·¹µå ¹× ¿¬ÁÖ Ã³¸® ÇÔ¼ö
//************************************************************************************************

void StopFunc()
{
        nPlayStatus=0;
        
        Stop(g_wDeviceID);

        ResetEvent(hMP3DelayEvent);

        SetTrackBarPos(hTrackPlay, 0, TRUE);
}

void WaitThreadClose()
{
        nPlayStatus=0;
        nMainLoop=0;
        Stop(g_wDeviceID);

        if (hThread)
        {                
                PulseEvent(hMP3DelayEvent);
                WaitForSingleObject(hThread, INFINITE);
        CloseHandle(hThread);
                hThread=NULL;
        }

        SetTrackBarPos(hTrackPlay, 0, TRUE);
}




//************************************************************************************************
// Ç÷¹ÀÌ ¸®½ºÆ® ó¸® ÇÔ¼ö
//************************************************************************************************

DWORD PlayList_AddData(HWND hWnd, HWND hList)
{
        OPENFILENAME   OFN;
        TCHAR          lpstrFile[MAX_PATH]="";
        PLAYITEMDATA  *pData=NULL;
    int            i, nSelIdxPlayList=0;

        memset(&OFN, 0, sizeof(OPENFILENAME));
        OFN.lStructSize = sizeof(OPENFILENAME);
        OFN.hwndOwner=hWnd;
        OFN.lpstrFilter=TEXT("MP3 ÆÄÀÏ(*.MP3)\0*.MP3\0");
        OFN.lpstrFile=lpstrFile;
        OFN.nMaxFile=MAX_PATH;
        if (GetOpenFileName(&OFN)!=0)
        {                
                pData=(PLAYITEMDATA *)malloc(sizeof(PLAYITEMDATA));
        strcpy(pData->szFilePath, OFN.lpstrFile);
                for(i=strlen(pData->szFilePath)-1; i > 0; i--)
                {
                        if (pData->szFilePath[i]=='\\'){ i++; break; }
                }
                
                strcpy(pData->szFileName, &(pData->szFilePath[i]));
                
                nSelIdxPlayList=SendMessage(hList, LB_GETCOUNT,0,0);
                SendMessage(hList,LB_INSERTSTRING,nSelIdxPlayList,(LPARAM)pData->szFileName);
                SendMessage(hList, LB_SETITEMDATA,nSelIdxPlayList,(LPARAM)pData);
                return TRUE;
        }

        return FALSE;
}

DWORD PlayList_DelData(HWND hList)
{
        PLAYITEMDATA  *pData=NULL;
        int           *buffer=NULL;
        int            nSelCountPlayList, nSelIdxPlayList, i;
                                
        nSelCountPlayList=SendMessage(hList,LB_GETSELCOUNT,0,0);                                
                                
        if (nSelCountPlayList!=0)
        {
                buffer=(int *)malloc(sizeof(int)*nSelCountPlayList);
                        
                if (buffer)
                {
                        SendMessage(hList, LB_GETSELITEMS,nSelCountPlayList,(LPARAM)buffer);
                                        
                        for (i=nSelCountPlayList-1; i >= 0; i--)
                        {
                                nSelIdxPlayList=buffer[i];
                                pData=(PLAYITEMDATA *)SendMessage(hList, LB_GETITEMDATA,nSelIdxPlayList,0);
                                if (pData)
                                {
                                        free(pData);
                                        SendMessage(hList, LB_DELETESTRING,nSelIdxPlayList,0);
                                }else{
                                        MessageBox(g_hWnd,"No Del!","No Del!",MB_OK);
                                }
                        }
                                        
                        free(buffer);
                        return TRUE;
                }
        }

        return FALSE;
}


void PlayList_DelAllData(HWND hList)
{
        int            nSelCountPlayList, i;
        PLAYITEMDATA  *pData=NULL;

        nSelCountPlayList=SendMessage(hList, LB_GETCOUNT,0,0);
        for (i=nSelCountPlayList-1; i >= 0; i--)
        {
                pData=(PLAYITEMDATA *)SendMessage(hList,LB_GETITEMDATA,i,0);
                if (pData)
                {
                        free(pData);
                        SendMessage(hList,LB_DELETESTRING,i,0);
                }
        }
}

void PlayList_PlayData(HWND hWnd, PLAYITEMDATA *pData)
{
        DWORD          Result;
        TCHAR          str[256];

        if (pData)
        {
                if (g_wDeviceID!=MCI_NOT_OPEN)
                {
                        StopFunc();
                        Close(&g_wDeviceID);
                }

                Result=OpenMP3(&g_wDeviceID, pData->szFilePath);
                if (Result)
                {
                        mciGetErrorString(Result, str, 256);
                        MessageBox(hWnd, str,"¿¡·¯ ¹ß»ý",MB_OK);
                }else{
                        SetTrackBarRangeMin(hTrackPlay, 0, TRUE);
                        SetTrackBarRangeMax(hTrackPlay, GetLength(g_wDeviceID), TRUE);
                        SetTrackBarPos(hTrackPlay, 0, TRUE);
                        
                        Result=Play(hWnd, g_wDeviceID);
                        if (Result)
                        {
                                mciGetErrorString(Result, str, 256);
                                MessageBox(hWnd, str,"¿¡·¯ ¹ß»ý",MB_OK);
                        }else{
                                nPlayStatus=1;
                                dwPlayPos=0;
                                ResetEvent(hMP3DelayEvent);                                                                
                        }
                }
        }        
}

void PlayList_PrevPlay(HWND hWnd, HWND hList)
{
        PLAYITEMDATA *pData=NULL;
        int           nSelIdxPlayList, nSelCountPlayList;

        nSelCountPlayList=SendMessage(hList, LB_GETCOUNT,0,0);
        if (nSelCountPlayList <= 0) return ;
        if (nSelCountPlayList <= nPlayListNum) nPlayListNum=nSelCountPlayList-1;
                                        
        nSelIdxPlayList=nPlayListNum;
        
        nSelIdxPlayList--;
        if (nSelIdxPlayList < 0) nSelIdxPlayList=nSelCountPlayList-1;
                      
        nPlayListNum=nSelIdxPlayList;

        SetFocus(hList);
        
        SendMessage(hList, LB_SELITEMRANGE, 0, 0);
        
        pData=(PLAYITEMDATA *)SendMessage(hList, LB_GETITEMDATA, (WPARAM)nSelIdxPlayList,0);
        
        if (pData)
        {
                CopyMemory(&nowPlaySongData, pData, sizeof(PLAYITEMDATA));
                
                PlayList_PlayData(hWnd, &nowPlaySongData);
        }
}

void PlayList_NextPlay(HWND hWnd, HWND hList, BOOL bRepeat)
{
        PLAYITEMDATA *pData=NULL;
        int           nSelIdxPlayList, nSelCountPlayList;
        nSelCountPlayList=SendMessage(hList, LB_GETCOUNT,0,0);
        if (nSelCountPlayList <= 0) return ;
        if (nSelCountPlayList <= nPlayListNum) nPlayListNum=nSelCountPlayList-1;
        
        nSelIdxPlayList=nPlayListNum;
        
        nSelIdxPlayList++;
        if (nSelIdxPlayList >= nSelCountPlayList)
        {
                if (bRepeat!=TRUE)
                {
                        if (g_wDeviceID!=MCI_NOT_OPEN)
                        {
                                StopFunc();
                                Close(&g_wDeviceID);
                        }
                        return ;
                }
                nSelIdxPlayList=0;
        }

        nPlayListNum=nSelIdxPlayList;

        SetFocus(hList);

        SendMessage(hList, LB_SETCURSEL, (WPARAM)nSelIdxPlayList,0);

        pData=(PLAYITEMDATA *)SendMessage(hList, LB_GETITEMDATA, nSelIdxPlayList,0);
        
        if (pData)
        {
                CopyMemory(&nowPlaySongData, pData, sizeof(PLAYITEMDATA));
                
                PlayList_PlayData(hWnd, &nowPlaySongData);
        }
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
        HDC           hdc;
        PAINTSTRUCT   ps;
        DWORD         Result;
        TCHAR         str[256];
        TCHAR        *Mes="(MP3Ç÷¹À̾î)";
    DWORD         dwTmpPlayPos=0;
        DWORD         dwHour, dwMinute, dwSecond;
        int           i, nSelIdxRepeat, nSelIdxShuffle, nSelIdxPlayList, nSelCountPlayList;
        RECT          rtClear1={50,40,300,150};

        if (iMessage==nPlayMsg && wParam==(WPARAM)nPlayMsg && lParam==(LPARAM)nPlayMsg)
        {
                if (g_wDeviceID!=MCI_NOT_OPEN)
                {
                        dwPlayPos=GetPos(g_wDeviceID);                                
                        SetTrackBarPos(hTrackPlay, dwPlayPos, TRUE);
                        dwPlayPos/=1000;
            dwSecond=dwPlayPos%60;
                        dwPlayPos/=60;
            dwMinute=dwPlayPos%60;
                        dwPlayPos/=60;
            dwHour=dwPlayPos;
                        wsprintf(szPlayTime, "%002d:%002d:%002d", dwHour, dwMinute, dwSecond);
                        InvalidateRect(hWnd, &rtClear1, FALSE);
                }  
                return 0;
        }else switch(iMessage)
        {
        case WM_CREATE:
                ZeroMemory(&nowPlaySongData, sizeof(PLAYITEMDATA));

                hMP3DelayEvent=CreateEvent(NULL, FALSE, FALSE, "MP3DelayEvent");
                
                nPlayMsg=RegisterWindowMessage(TEXT("MOJIGURA@NAVER.COM_MCIMP3PLAY001"));

                hFontTime=CreateFont(50,0,0,0,FW_BOLD,0,0,0,HANGEUL_CHARSET,3,2,1,
                                         VARIABLE_PITCH | FF_ROMAN,"±¼¸²");

                InitCommonControls();
                
                hTrackPlay=CreateWindow(TRACKBAR_CLASS,NULL,WS_CHILD | WS_VISIBLE ,
                        10,100,300,40,hWnd,NULL,g_hInst,NULL);
                
                hTrackWaveVol=CreateWindow(TRACKBAR_CLASS,NULL,WS_CHILD | WS_VISIBLE ,
                        210,150,100,40,hWnd,NULL,g_hInst,NULL);

                hComboRepeat=CreateWindow("combobox",NULL,WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST,
                        10,150,120,200,hWnd,(HMENU)ID_COMBOBOX_REPEAT,g_hInst,NULL);

                hComboShuffle=CreateWindow("combobox",NULL,WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST,
                        10,180,120,200,hWnd,(HMENU)ID_COMBOBOX_SHUFFLE,g_hInst,NULL);

                hCheckButtonMute=CreateWindow(TEXT("button"),TEXT("Mute"),WS_CHILD | WS_VISIBLE |
                        BS_AUTOCHECKBOX,135,150,65,25,hWnd,(HMENU)ID_CHECKBUTTON_MUTE,g_hInst,NULL);

                CreateWindow(TEXT("button"),TEXT("|¢¸"),WS_CHILD | WS_VISIBLE |
                                 BS_PUSHBUTTON,40,210,60,25,hWnd,(HMENU)ID_BUTTON_PREV,g_hInst,NULL);
                CreateWindow(TEXT("button"),TEXT("¡á"),WS_CHILD | WS_VISIBLE |
                                 BS_PUSHBUTTON,100,210,60,25,hWnd,(HMENU)ID_BUTTON_STOP,g_hInst,NULL);
                CreateWindow(TEXT("button"),TEXT("¢º||"),WS_CHILD | WS_VISIBLE |
                                 BS_PUSHBUTTON,160,210,60,25,hWnd,(HMENU)ID_BUTTON_PLAY,g_hInst,NULL);
                CreateWindow(TEXT("button"),TEXT("¢º|"),WS_CHILD | WS_VISIBLE |
                                 BS_PUSHBUTTON,220,210,60,25,hWnd,(HMENU)ID_BUTTON_NEXT,g_hInst,NULL);

                hListPlay=CreateWindow(TEXT("listbox"),NULL,WS_CHILD | WS_VISIBLE | WS_BORDER |
                        LBS_NOTIFY | LBS_MULTIPLESEL,10,240,300,300,hWnd,(HMENU)ID_LISTBOX_PLAYLIST,g_hInst,NULL);

                CreateWindow(TEXT("button"),TEXT("ADD"),WS_CHILD | WS_VISIBLE |
                                 BS_PUSHBUTTON,20,535,60,25,hWnd,(HMENU)ID_BUTTON_LIST_ADD,g_hInst,NULL);
                CreateWindow(TEXT("button"),TEXT("DEL"),WS_CHILD | WS_VISIBLE |
                                 BS_PUSHBUTTON,80,535,60,25,hWnd,(HMENU)ID_BUTTON_LIST_DEL,g_hInst,NULL);

                for(i=0; i < 3; i++)
                {
                        SendMessage(hComboRepeat,CB_ADDSTRING,0,(LPARAM)strRepeatItems[i]);
                }

                for(i=0; i < 1; i++)
                {
                        SendMessage(hComboShuffle,CB_ADDSTRING,0,(LPARAM)strShuffleItems[i]);
                }

                SendMessage(hComboRepeat,CB_SETCURSEL,0,0);
                SendMessage(hComboShuffle,CB_SETCURSEL,0,0);

                SetTrackBarRangeMin(hTrackPlay, 0, TRUE);
                SetTrackBarRangeMax(hTrackPlay, 0, TRUE);
                SetTrackBarPos(hTrackPlay, 0, TRUE);

                OpenVolumeCtrl(hWnd, &stMP3Mixer);        

                if (GetMute(&stMP3Mixer)==TRUE) SendMessage(hCheckButtonMute,BM_SETCHECK,BST_CHECKED,0);
                                             &

  Hit : 6034     Date : 2014/05/25 11:25



    
3086   ¾î¼Àºí¸®¾î Áú¹®Á» µå¸±²¾¿ä[6]     woonkeekim
06/29 3516
3085   c¾ð¾î µ¥ÀÌÅÍÇü Áú¹®[4]     wjsgywns10
06/19 3421
3084   À¥¼­¹ö ·Î±× User Agent[1]     meis1541
06/16 3398
3083   C++ Áú¹®µå¸³´Ï´Ù![1]     È£¹Ú
06/16 3138
3082   ÆÄÀ̽ã Áú¹®ÀÌ¿ä!     jang0263
06/15 3989
3081   ½ÎÀÌŬ·´¿¡¼­ ³×À̹öÄ«Æä·Î ¿È°Ü¾ßÇϴµ¥ ±ÛÀ» ¿È°Ü¾ßÇÕ´Ï´Ù     jj4st13
06/14 3450
3080   ÄÚµåºí·° Çѱ۱úÁü Çö»ó µµ¿ÍÁÖ¼¼¿ä[1]     ifocean
06/12 7649
3079   C++ ÇÁ·Î±×·¡¹Ö Áú¹®µå¸³´Ï´Ù!![3]     È£¹Ú
06/12 3117
3078   2¹ø¤Š ÇÁ·Î±×·¡¹Ö Àε¥¿ä ¤Ð¤Ð[1]     ¸¸µçÀÌ
06/09 6768
3077   ÀÚ¹Ù Áú¹®ÀÔ´Ï´Ù.¤Ì¤Ì     cherish_247
06/04 3364
3076   (¹Ýº¹¹®)c¾ð¾î ¹®ÀÚÀÎÁö ¼ýÀÚÀÎÁö È®ÀÎ ÇÏ´Â °Å ¾î¶»°Ô ¸¸µå³ª¿ä ?[17]     stingygirl
06/02 23902
  win 32 api ·Î ¹ÂÁ÷Ç÷¹ÀÌ¾î ¸¸µé±â     khfs200
05/25 6033
3074   c# ¹è¿­¼±¾ð ÀÌ·¸°Ô ÇÏ´Â °Å ¸Â³ª¿ä??     gksmf9315
05/20 3906
3073   µð¹ö±ë ÀßÇϽô ºÐµé ºÎŹµå¸³´Ï´Ù.     MainThread
05/19 3137
3072   C¾ð¾î ÇÁ·Î±×·¡¹Ö µµ¿ÍÁÖ¼¼¿ä ¤Ð¤Ð¤Ð[2]     gxcolin
05/17 7356
3071   c++ ¿¡·¯[1]     zx4564
05/06 3788
3070   ÆÄÀ̽ã urllib¸ðµâ Áú¹®Àִµ¥¿ä      yuhioh8
04/21 3755
3069   getchÇÔ¼ö Áú¹®ÀÔ´Ï´Ù.[4]     mystell
04/11 4786
3068   c¾ð¾î óÀ½À¸·Î Çغ¸´Âµ¥.. ¿À·ù°¡ 1°³ ¶ß³×¿ä.. ¹¹°¡ Ʋ¸°°ÅÁÒ?!?? ¤Ð[2]     dpyeong
04/05 6271
3067   C¾ð¾î¸¦ ¹è¿öº¸·Á Çϴµ¥ visual studio ±î´Â°Ô Àß ¾ÈµÇ³×¿ä[4]     ¿ìµ¿
03/31 3761
[1][2][3][4][5][6] 7 [8][9][10]..[161]

Copyright 1999-2024 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org