⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 freeampui.cpp

📁 FreeAMP(MP3播放)程序源代码-用来研究MP3解码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
            ResolveLink(file, sizeof(file));
        }

        List<char*> fileList;
        struct stat st;

        stat(file, &st);

        if(st.st_mode & _S_IFDIR)
        {
            HANDLE findFileHandle = NULL;
            WIN32_FIND_DATA findData;
            char findPath[MAX_PATH + 1];

            strcpy(findPath, file);
            strcat(findPath, "\\*.mp?");

            findFileHandle = FindFirstFile(findPath, &findData);

            if(findFileHandle != INVALID_HANDLE_VALUE)
            {
                do
                {
                    strcpy(findPath, file);
                    strcat(findPath, "\\");
                    strcat(findPath, findData.cFileName);
                    m_plm->AddItem(findPath,0);

                }while(FindNextFile(findFileHandle, &findData));

                FindClose(findFileHandle);
            }
        }
        else
        {
            pExtension = strrchr(file, '.');

            if(pExtension && strcasecmp(pExtension, ".m3u") == 0)
            { 
                Error error;

                error = m_plm->ExpandM3U(file, fileList);

                if(IsError(error))
                {
                    MessageBox(NULL, "Cannot open playlist file", file, MB_OK); 
                }
                else
                {
                    char* item = NULL;
                    int32 i = 0;

                    while(item = fileList.ItemAt(i++))
                    {
                        m_plm->AddItem(item,0);
                    }
                }
            }
            else
            {
                /*OutputDebugString(file);
                OutputDebugString("\r\n");*/
                m_plm->AddItem(file,0);
            }
        }
	}

	if(!originalCount) 
    {
		m_target->AcceptEvent(new Event(CMD_Play));
	}
}

void 
FreeAmpUI::
Command(int32 command, 
        View* source)
{
    switch(command)
    {
        case kPlayControl:
        {            
            m_target->AcceptEvent(new Event(CMD_Play));
            break;
        }

        case kStopControl:
        {            
            m_target->AcceptEvent(new Event(CMD_Stop));
            break;
        }

        case kPauseControl:
        {
            m_target->AcceptEvent(new Event(CMD_TogglePause));
            break;
        }

        case kLastControl:
        {
			m_target->AcceptEvent(new Event(CMD_PrevMediaPiece));
            break;
        }

        case kNextControl:
        {
			m_target->AcceptEvent(new Event(CMD_NextMediaPiece));
            break;
        }

        case kModeControl:
        {
            break;
        }

        case kMinimizeControl:
        {
            bool liveInTray;

            m_prefs->GetPrefBoolean(kLiveInTrayPref, &liveInTray);

            if(liveInTray)
                ShowWindow(m_hwnd, SW_HIDE);
            else
                ShowWindow(m_hwnd, SW_MINIMIZE);

            break;
        }

        case kCloseControl:
        {
            DestroyWindow( m_hwnd );
            break;
        }

        case kRepeatControl:
        {
            m_plm->ToggleRepeat();
            break;
        }

        case kShuffleControl:
        {
            m_plm->ToggleShuffle();
            break;
        }

        case kAddControl:
        {
            List<char*> fileList;
            

            if(FileOpenDialog(  m_hwnd, 
                                kOpenAudioFileTitle,
                                kAudioFileFilter,
                                &fileList,
                                m_prefs))
            {
                AddFileListToPlayList(&fileList);
            }

            break;
        }

        case kDeleteControl:
        {
            m_playlistView->DeleteSelection();
            break;
        }

        case kSaveControl:
        {
            char file[MAX_PATH + 1];
            
            uint32 size = sizeof(file);

            if(FileSaveDialog(  m_hwnd,
                                kSavePlaylistFileTitle,
                                kPlaylistFileFilter,
                                file, 
                                &size,
                                m_prefs))
            {
                if(strcmp(file, kSaveToRio))
                {
                    m_plm->ExportToM3U(file);
                }
                else
                {
                    m_plm->ExportToRio();
                }
            }
           
            break;
        }

        case kLoadControl:
        {
            List<char*> fileList;
           
            if(FileOpenDialog(  m_hwnd,
                                kOpenPlaylistFileTitle,
                                kPlaylistFileFilter,
                                &fileList,
                                m_prefs))
            {
                m_plm->MakeEmpty();

                AddFileListToPlayList(&fileList);

                m_plm->SetFirst();
            }
            break;
        }

        case kOpenControl:
		{
            List<char*> fileList;

			if(FileOpenDialog(  m_hwnd, 
                                kOpenAudioFileTitle,
                                kAudioFileFilter,
                                &fileList,
                                m_prefs))
			{
                m_plm->MakeEmpty();

                AddFileListToPlayList(&fileList);

                m_plm->SetFirst();

                if(m_state == UIState_Playing)
                {
                    m_target->AcceptEvent(new Event(CMD_Stop));
                    m_target->AcceptEvent(new Event(CMD_Play));
                }
                else
                {
					;
                }
			}

			break;        
		}

        case kPlaylistControl:
        {
            HRGN windowRegion = CreateRectRgn(0,0,0,0);
            RECT windowRect;

            GetWindowRgn(m_hwnd, windowRegion);

            if(EqualRgn(windowRegion, m_windowRegion))
            {
                // move region into place
                OffsetRgn(m_playListRegion, 0, 123);

                // copy window region so windows doesn't take our region    
                CombineRgn( windowRegion,
                            m_playListRegion,
                            m_windowRegion,
                            RGN_OR);

                GetRgnBox(windowRegion, &windowRect);
    
                m_width = windowRect.right - windowRect.left;
                m_height = windowRect.bottom - windowRect.top;
				            
	            SetWindowPos (	m_hwnd,
					            0, 
					            0, 
					            0, 
					            m_width, 
					            m_height, 
					            SWP_NOZORDER|SWP_NOMOVE);

                // Change window region
                SetWindowRgn(m_hwnd, windowRegion, TRUE);

                m_drawerView->OffsetBy(0, 123);
                m_playlistBackView->Show();
                m_panelBackingView->Show();
                m_playlistView->Show();
                m_scrollbarView->Show();
                m_addView->Show();
                m_deleteView->Show();
                m_loadView->Show();
                m_saveView->Show();
            }
            else
            {
                // move region into place
                OffsetRgn(m_playListRegion, 0, -123);

                // copy window region so windows doesn't take our region    
                CombineRgn( windowRegion,
                            m_windowRegion,
                            m_windowRegion,
                            RGN_OR);

                GetRgnBox(windowRegion, &windowRect);
    
                m_width = windowRect.right - windowRect.left;
                m_height = windowRect.bottom - windowRect.top;
				            
	            SetWindowPos (	m_hwnd,
					            0, 
					            0, 
					            0, 
					            m_width, 
					            m_height, 
					            SWP_NOZORDER|SWP_NOMOVE);

                // Change window region
                SetWindowRgn(m_hwnd, windowRegion, TRUE);

                m_drawerView->OffsetBy(0, -123);
                m_playlistBackView->Hide();
                m_panelBackingView->Hide();
                m_playlistView->Hide();
                m_scrollbarView->Hide();
                m_addView->Hide();
                m_deleteView->Hide();
                m_loadView->Hide();
                m_saveView->Hide();
            }

            DIB* canvas = new DIB();
            canvas->Create(m_width, m_height, m_playerCanvas->BitsPerPixel());

            canvas->SetPalette( m_bodyBitmap->Palette(), 
                                m_bodyBitmap->NumberOfPaletteEntries() );

            delete m_playerCanvas;

            m_playerCanvas = canvas;

            InvalidateRect(m_hwnd, &windowRect, FALSE);
            
            break;
        }

        case kSongInfoControl:
        {
            TimeView* view = (TimeView*)source;

            view->ToggleDisplay();
            break;
        }

        case kPrefControl:
        {
            if(DisplayPreferences(m_hwnd, m_prefs))
                ReadPreferences();
            break;
        }
    }
}

void 
FreeAmpUI::
Notify(int32 command, LPNMHDR notifyMsgHdr)
{
    if(notifyMsgHdr->code == TTN_NEEDTEXT)
    {
        int32 idCtrl = notifyMsgHdr->idFrom;
        LPTOOLTIPTEXT lpttt = (LPTOOLTIPTEXT) notifyMsgHdr; 

        POINT pt;

        GetCursorPos(&pt);

        ScreenToClient(m_hwnd, &pt);

        // tooltips only use rects... we have non-rectangular controls
        if(PtInRegion(m_controlRegions[idCtrl], pt.x, pt.y))
        {
            switch (idCtrl) 
            { 
                case kRepeatControl:
                    lpttt->lpszText = "Repeat"; 
                    break;
                case kShuffleControl:
                    lpttt->lpszText = "Shuffle"; 
                    break;
                case kOpenControl:
                    lpttt->lpszText = "Open..."; 
                    break;
                case kModeControl:
                    lpttt->lpszText = "Change Player Mode (disabled)"; 
                    break;
                case kMinimizeControl:
                    lpttt->lpszText = "Minimize"; 
                    break;
                case kCloseControl:
                    lpttt->lpszText = "Close"; 
                    break;
                case kPlayControl:
                    if(m_state == UIState_Stopped)
                        lpttt->lpszText = "Play"; 
                    else
                        lpttt->lpszText = "Stop";
                    break;
                case kPauseControl:
                    if(m_state == UIState_Paused)
                        lpttt->lpszText = "Continue Playing"; 
                    else
                        lpttt->lpszText = "Pause"; 
                    break;
                case kNextControl:
                    lpttt->lpszText = "Next Song"; 
                    break;
                case kLastControl:
                    lpttt->lpszText = "Previous Song"; 
                    break;
                case kPlaylistControl:
                    lpttt->lpszText = "Open Playlist"; 
                    break;
                case kSongInfoControl:
                    lpttt->lpszText = "Change Display Mode"; 
                    break;
                case kVolumeControl:
                    lpttt->lpszText = "Volume"; 
                    break;
                case kSeekControl:
                    lpttt->lpszText = "Seek"; 
                    break;
            }
        }
    }
    else
    {
        switch( command )
        {
            case kVolumeControl:
            {
                switch(notifyMsgHdr->code)
                {
                    case DIAL_BUTTON_DOWN:
                    {
                        m_target->AcceptEvent(new Event(CMD_GetVolume));
                        SetTimer(m_hwnd, TIMER_VOLUME_POSITION, 200, NULL);

                        m_timeView->Hide();
                        m_volumeInfoView->Show();
                       
                        break;
                    }

                    case DIAL_BUTTON_UP:
                    {
                        KillTimer(m_hwnd, TIMER_VOLUME_POSITION);
                        m_timeView->Show();
                        m_volumeInfoView->Hide();
                        m_volumeView->SetPosition(0);
                        break;
                    }

                    case DIAL_MOVE:
                    {
                        /*char buffer[256];
                        wsprintf(buffer,"position = %d\r\n", m_volumeView->Position());
                        OutputDebugString(buffer);*/

                        m_volumeAcceleration = m_volumeView->Position() / 5;

                        break;
                    }
                }

                break;
            }

            case kSeekControl:
            {
                switch(notifyMsgHdr->code)
                {
                    case DIAL_BUTTON_DOWN:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -