MFC超酷播放器

//窗体类代码 Player.h

class CMyApp:public CWinApp
{
public:
virtual BOOL InitInstance();
};

class CMainWindow:public CFrameWnd
{
protected:
HWND m_hMyMCIWnd;
CListBox ListBox1;

CButton btn;
CButton btn1;
CButton btn2;
CButton btn3;
CButton clo;
CButton open;

CPalette m_palette;
void DoGradientFill(CDC* pDC,LPRECT pRect);
CString GetSuffix(CString strFileName);
CBrush m_brRedBrush;
CBrush m_brush;
CFont font;
int x,y;
int h;
int work;

public:
CMainWindow();

protected:
static const TCHAR szFilters1[];
static const TCHAR szFilters2[];

afx_msg void OnLButtonDown(UINT nFlags,CPoint point);
afx_msg void OnLButtonUp(UINT nFlags,CPoint point);
afx_msg void OnMouseMove(UINT nFlags,CPoint point);
afx_msg BOOL OnMouseWheel(UINT nFlags,short zDelta,CPoint point);

afx_msg int OnCreate(LPCREATESTRUCT lpcs);
afx_msg LRESULT OnMCINotify(WPARAM wParam,LPARAM lParam);

afx_msg void OnBtnClick();
afx_msg void OnBtnClick1();
afx_msg void OnBtnClick2();
    afx_msg void OnBtnClick3();
afx_msg void OnBtnClick4();
afx_msg void OnBtnClick5();

afx_msg void OnTimer(UINT nTimerID);
afx_msg void OnSize(UINT nType,int cx,int cy);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg HBRUSH OnCtlColor(CDC* pDC,CWnd *pWnd,UINT nCtlColor);
    DECLARE_MESSAGE_MAP()
};

//窗体代码Player.cpp

#include <afxwin.h>
#include "Player.h"
#include "VolumeControl.h"
#include <vfw.h>
#include <afxext.h>
#include "math.h"

#pragma comment(lib,"vfw32.lib")
#define IDC_LISTBOX 1000
#define IDC_OPEN 1001
#define IDC_OPEN1 1002
#define IDC_OPEN2 1003
#define IDC_OPEN3 1004
#define IDC_OPEN4 1007
#define IDC_CLOSE 1005
#define IDC_MAIN 1006

CMyApp myApp;
const TCHAR CMainWindow::szFilters1[]=_T("Sound Files (*.mp3) | *.mp3|All Files (*.*) | *.*||");
const TCHAR CMainWindow::szFilters2[]=_T("Movie Files (*.avi) | *.avi|All Files (*.*) | *.*||");
CString name;
UINT nSound;
BOOL flag=FALSE;
CString str1;
CString str;
int sign=1;
int nVolume;
int length;
ControlWindow *con;
int count=0;

BOOL CMyApp::InitInstance()
{
m_pMainWnd=new CMainWindow;
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}

BEGIN_MESSAGE_MAP(CMainWindow,CFrameWnd)
ON_WM_CREATE()
ON_BN_CLICKED(IDC_OPEN,OnBtnClick)
ON_BN_CLICKED(IDC_OPEN1,OnBtnClick1)
ON_BN_CLICKED(IDC_OPEN2,OnBtnClick2)
ON_BN_CLICKED(IDC_OPEN3,OnBtnClick3)
    ON_BN_CLICKED(IDC_CLOSE,OnBtnClick4)
ON_BN_CLICKED(IDC_OPEN4,OnBtnClick5)
ON_WM_ERASEBKGND()
ON_WM_CTLCOLOR()
ON_WM_SIZE()
ON_WM_TIMER()
ON_WM_MOUSEWHEEL()
ON_MESSAGE(MCIWNDF_NOTIFYMODE,OnMCINotify)
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()

CMainWindow::CMainWindow()
{
Create(NULL,_T("Player"),WS_POPUPWINDOW,CRect(100,100,620,610),this);
}

int CMainWindow::OnCreate(LPCREATESTRUCT lpcs)
{
if (CFrameWnd::OnCreate(lpcs)==-1)
   return -1;

//CoInitializeEx

CClientDC dc(this);

con=new ControlWindow();
//con->ShowWindow(SW_SHOW);
if (dc.GetDeviceCaps(RASTERCAPS) & RC_PALETTE)
{
   struct{
    LOGPALETTE lp;
    PALETTEENTRY ape[63];
   }pal;

   LOGPALETTE* pLP=(LOGPALETTE*) &pal;
   pLP->palVersion=0x300;
   pLP->palNumEntries=64;

   for (int i=0;i<64;i++)
   {
    pLP->palPalEntry[i].peRed=0;
    pLP->palPalEntry[i].peGreen=0;
    pLP->palPalEntry[i].peBlue=255-(i*4);
    pLP->palPalEntry[i].peFlags=0;
   }
   m_palette.CreatePalette(pLP);
}

CRect rect;
rect.SetRect(10,444,50,484);
clo.Create(NULL,WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON | BS_ICON | WS_BORDER,rect,this,IDC_CLOSE);
clo.SetIcon(AfxGetApp()->LoadIcon(_T("IDI_ICON5")));

rect.SetRect(460,444,500,484);
open.Create(NULL,WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON | BS_ICON | WS_BORDER,rect,this,IDC_OPEN4);
open.SetIcon(AfxGetApp()->LoadIcon(_T("IDI_ICON7")));

rect.SetRect(300,444,340,484);
btn.Create(NULL,WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON | BS_ICON | WS_BORDER,rect,this,IDC_OPEN);
btn.SetIcon(AfxGetApp()->LoadIcon(_T("IDI_ICON1")));

rect.SetRect(340,444,380,484);
btn2.Create(NULL,WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON | BS_ICON | WS_BORDER,rect,this,IDC_OPEN2);
btn2.SetIcon(AfxGetApp()->LoadIcon(_T("IDI_ICON3")));

rect.SetRect(380,444,420,484);
btn1.Create(NULL,WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON | BS_ICON | WS_BORDER,rect,this,IDC_OPEN1);
btn1.SetIcon(AfxGetApp()->LoadIcon(_T("IDI_ICON2")));

rect.SetRect(420,444,460,484);
btn3.Create(NULL,WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON | BS_ICON | WS_BORDER,rect,this,IDC_OPEN3);
btn3.SetIcon(AfxGetApp()->LoadIcon(_T("IDI_ICON4")));

//bitmap.m_hObject=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),"b.bmp",IMAGE_BITMAP,110,40,LR_LOADFROMFILE);
//CClientDC dc1(this);
//CBitmap bitmap;
//bitmap.LoadBitmap(_T("IDB_BITMAP1"));
//CBrush brush(&bitmap);
//dc1.FillRect(CRect(390,445,500,485),&brush);

rect.SetRect(370,5,505,430);
ListBox1.Create(WS_CHILD | WS_VISIBLE | LBS_STANDARD | WS_BORDER ,rect,this,IDC_LISTBOX);
font.CreatePointFont(100,_T("MS Scans Serif"));
    ListBox1.SetFont(&font);

if (!MCIWndRegisterClass())
MessageBox("初始化未成功");

//m_hMyMCIWnd=MCIWndCreate(m_hWnd,AfxGetInstanceHandle(),MCIWNDF_NOTIFYSIZE | MCIWNDF_NOERRORDLG | MCIWNDF_NOTIFYMODE | WS_CHILD | WS_VISIBLE | WS_BORDER | MCIWNDF_NOMENU,NULL);
m_hMyMCIWnd=MCIWndCreate(this->GetSafeHwnd(),AfxGetInstanceHandle(),WS_CHILD | WS_VISIBLE | MCIWNDF_NOPLAYBAR | MCIWNDF_NOMENU | MCIWNDF_NOTIFYMODE | WS_BORDER,NULL);
nVolume=MCIWndGetVolume(m_hMyMCIWnd);
}

BOOL CMainWindow::OnEraseBkgnd(CDC* pDC)
{
CRect rect;
GetClientRect(&rect);

::SetWindowPos(m_hMyMCIWnd,NULL,3,3,3,3,SWP_NOZORDER);

CPalette* pOldPalette;
if ((HPALETTE)m_palette!=NULL){
   pOldPalette=pDC->SelectPalette(&m_palette,FALSE);
   pDC->RealizePalette();
}

DoGradientFill(pDC,&rect);

if ((HPALETTE) m_palette!=NULL)
   pDC->SelectPalette(pOldPalette,FALSE);
return TRUE;
}

void CMainWindow::OnBtnClick1()
{
ListBox1.DeleteString(ListBox1.GetCurSel());
}

void CMainWindow::OnBtnClick2()
{
CFileDialog dlg(TRUE,_T("avi"),_T("*.avi"),OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT,szFilters2);
    if (dlg.DoModal()==IDOK){
name=dlg.GetFileName();
MCIWndStop(m_hMyMCIWnd);
   
ListBox1.AddString(name);
CString filename=name;
MessageBox(GetSuffix(filename));

if (filename.GetLength()>0 && GetSuffix(filename)=="avi"){
   nSound=MCIWndOpen(m_hMyMCIWnd,(LPCSTR)filename,NULL);

   ::SetWindowPos(m_hMyMCIWnd,NULL,3,3,400,400,SWP_NOZORDER);
   HRGN hRgn1=::CreateRoundRectRgn(3,3,400,400,20,20);
   ::SetWindowRgn(m_hMyMCIWnd,hRgn1,TRUE);

   if (nSound==0)
   {
    MCIWndPlay(m_hMyMCIWnd);
    con->m_slider.EnableWindow(TRUE);
    con->m_slider1.EnableWindow(TRUE);
    SetTimer(1,1000,NULL);
   }
}
else{
   //MCIWndDestroy(m_hMyMCIWnd);
   MessageBox(_T("没有读出文件"),0,MB_OK);
}
}
}

void CMainWindow::OnBtnClick3()
{
for(int i=0;i<ListBox1.GetCount();i++)
{
   ListBox1.DeleteString(i);
   i--;
}
}

void CMainWindow::OnBtnClick4()
{
this->CloseWindow();
this->DestroyWindow();
}

void CMainWindow::OnBtnClick5()
{
count++;
if (count%2==0){
   con->ShowWindow(SW_SHOW);
   open.SetIcon(AfxGetApp()->LoadIcon("IDI_ICON7"));
}
else{
   con->ShowWindow(SW_HIDE);
   open.SetIcon(AfxGetApp()->LoadIcon("IDI_ICON8"));
}
}

void CMainWindow::OnBtnClick()
{
CFileDialog dlg(TRUE,_T("mp3"),_T("*.mp3"),OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT,szFilters1);
    if (dlg.DoModal()==IDOK){
name=dlg.GetFileName();
MCIWndStop(m_hMyMCIWnd);
   
ListBox1.AddString(name);
CString filename=name;

if (filename.GetLength()>0 && GetSuffix(filename)=="mp3"){
   nSound=MCIWndOpen(m_hMyMCIWnd,(LPCSTR)filename,NULL);

   if (nSound==0){
    MCIWndPlay(m_hMyMCIWnd);
    con->m_slider.EnableWindow(TRUE);
    con->m_slider1.EnableWindow(TRUE);
    SetTimer(1,1000,NULL);
   }
}
else{
   //MCIWndDestroy(m_hMyMCIWnd);
   MessageBox(_T("没有读出文件"),0,MB_OK);
}
}
}

CString CMainWindow::GetSuffix(CString strFileName)  
{  
return   strFileName.Right(strFileName.GetLength()-strFileName.ReverseFind('.')-1);  
}

LRESULT CMainWindow::OnMCINotify(WPARAM wParam,LPARAM lParam)
{
if(wParam==MCI_MODE_STOP)
{
   MessageBox("结束");
   //MCIWndDestroy(m_hMyMCIWnd);
}
return TRUE;
}

void CMainWindow::DoGradientFill(CDC* pDC,LPRECT pRect)
{
CBrush *brush3[255];
TRY{
CBrush* pBrush[64];
for (int i=0;i<64;i++)
   pBrush[i]=new CBrush(PALETTERGB(255-(i*4),0,0));

int nWidth=pRect->right-pRect->left;
int nHeight=pRect->bottom-pRect->top;
CRect rect;

for (int i=0;i<nHeight;i++){
   rect.SetRect(0,i,nWidth,i+1);
   pDC->FillRect(&rect,pBrush[(i*63)/nHeight]);
}

for (int i=0;i<64;i++)
   delete pBrush[i];

pDC->SetBkMode(TRANSPARENT);

CBrush brush1(RGB(223,108,215));
pDC->FillRect(CRect(5,400,365,410),&brush1);

pDC->SetTextColor(RGB(h,125,32));
pDC->TextOut(120,20+h,name,name.GetLength());

pDC->TextOut(50,380,str,str.GetLength());
pDC->TextOut(5,380,str1,str1.GetLength());

CBrush brush(RGB(0,0,0));
pDC->FillRect(CRect(0,440,520,490),&brush);

CBrush br1(RGB(32,235,123));
pDC->FillRect(CRect(70,445,78,485),&br1);
HICON hIcon=AfxGetApp()->LoadIcon("IDI_ICON6");

pDC->DrawIcon(10,450,hIcon);
pDC->StretchBlt(83,445,16,16,pDC,10,450,36,36,SRCCOPY);

CBrush br(RGB(255,0,0));
pDC->FillRect(CRect(71,486-((nVolume*40)/1000),77,484),&br);

for (int i=0;i<255;i++){
brush3[i]=new CBrush(PALETTERGB(255-i,255-i,i));
}

for (int j=0;j<255;j++){
pDC->FillRect(CRect(6+j,401,110+j,408.9),brush3[j]);
}

CBrush brush4(RGB(223,108,215));
pDC->FillRect(CRect(5+work,401,365,408.9),&brush4);

for (int i=0;i<255;i++){
   delete brush3[i];
}

}CATCH (CException,e){
   this->DestroyWindow();
   this->CloseWindow();
}
END_CATCH
}

void CMainWindow::OnLButtonDown(UINT nFlags,CPoint point)
{
flag=TRUE;
x=point.x;
y=point.y;
}

void CMainWindow::OnLButtonUp(UINT nFlags, CPoint point)
{
flag=FALSE;
}

void CMainWindow::OnMouseMove(UINT nFlags, CPoint point)
{
if (flag){
   CRect rect;
   ::GetWindowRect(m_hWnd,rect);

   ::SetWindowPos(m_hWnd,NULL,rect.left+point.x-x,rect.top+point.y-y,rect.Width(),rect.Height(),SWP_NOSIZE);
}
}

BOOL CMainWindow::OnMouseWheel(UINT nFlags, short zDelta, CPoint point)
{
CClientDC dc(this);
if (zDelta>0){
   if (nVolume<1000){
   nVolume+=20;
   }
}
else{
   if (nVolume>0){
   nVolume-=20;
   }
}

MCIWndSetVolume(m_hMyMCIWnd,nVolume);
return TRUE;
}

void CMainWindow::OnSize(UINT nType,int cx,int cy)
{
CRect rect;
CFrameWnd::OnSize(nType,cx,cy);

HRGN hRgn1=::CreateRoundRectRgn(3,3,cx,cy,20,20);
::SetWindowRgn(m_hWnd,hRgn1,TRUE);

::SetWindowPos(m_hMyMCIWnd,NULL,3,3,cx-150,cy-120,SWP_NOZORDER);
HRGN hRgn2=::CreateRectRgn(3,3,cx-150,cy-150);
::SetWindowRgn(m_hMyMCIWnd,hRgn2,TRUE);

//CWnd* pWnd1=GetDlgItem(IDC_LISTBOX);
//pWnd1->SetWindowPos(NULL,cx-145,5,140,cy-70,SWP_NOZORDER);
//CWnd* pWnd2=GetDlgItem(IDC_OPEN);
//pWnd2->SetWindowPos(NULL,cx-160,cy-60,cx,cy,SWP_NOSIZE);

}

void CMainWindow::OnTimer(UINT nTimerID)
{
CClientDC dc(this);
CTime tm((((MCIWndGetPosition(m_hMyMCIWnd)*60)/MCIWndGetLength(m_hMyMCIWnd))/60),(((MCIWndGetPosition(m_hMyMCIWnd)*60)/MCIWndGetLength(m_hMyMCIWnd))%60));
str1=tm.Format("%M:%S");
work=((360*MCIWndGetPosition(m_hMyMCIWnd))/MCIWndGetLength(m_hMyMCIWnd));
CString str;
str.Format("%d",work);
//MessageBox(str);

CTime t((3600/MCIWndGetLength(m_hMyMCIWnd))*60,(1/MCIWndGetLength(m_hMyMCIWnd)));
str=t.Format("%M:%S");

length=(255*MCIWndGetPosition(m_hMyMCIWnd))/MCIWndGetLength(m_hMyMCIWnd);
h+=20*sign;
if (abs(177-h)>=177)
{
   sign=sign*(-1);
}

Invalidate(TRUE);
}

HBRUSH CMainWindow::OnCtlColor(CDC *pDC, CWnd *pWnd, UINT nCtlColor)
{
CFrameWnd::OnCtlColor(pDC,pWnd,nCtlColor);
if (ListBox1.m_hWnd==pWnd->m_hWnd){
   pDC->SetTextColor(RGB(255,255,255));
   pDC->SetBkColor(RGB(123,128,248));
   m_brRedBrush.CreateSolidBrush(RGB(123,128,248));
   return (HBRUSH) m_brRedBrush;
}
}

//资源代码

//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by Player.rc
//

// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        112
#define _APS_NEXT_COMMAND_VALUE         40001
#define _APS_NEXT_CONTROL_VALUE         1001
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif

//音量控制类代码VolumeControl.h

#include <afxcmn.h>

class ControlWindow:public CFrameWnd
{
public:
CSliderCtrl m_slider;
CSliderCtrl m_slider1;

protected:
int x,y;
CPalette m_palette;
int SetVolume(int left,int right);
int SetVol(int dwVolume);
void DoGradientFill(CDC* pDC,LPRECT pRect);

public:
ControlWindow();

protected:
afx_msg int OnCreate(LPCREATESTRUCT lpcs);
afx_msg void OnMouseMove(UINT nFlags,CPoint point);
afx_msg void OnLButtonDown(UINT nFlags,CPoint point);
afx_msg void OnLButtonUp(UINT nFlags,CPoint point);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg HBRUSH OnCtlColor(CDC* pDC,CWnd *pWnd,UINT nCtlColor);
afx_msg void OnHScroll(UINT nSBCode,UINT nPos,CScrollBar *pScrollBar);

DECLARE_MESSAGE_MAP()
};

//音量控制子窗口代码VolumeControl.cpp

#include <afxwin.h>
#include <afxcmn.h>
#include "VolumeControl.h"
#include <mmsystem.h>
#define IDC_CONTROL 1000
#define IDC_VOLUME 1001
#define MAX_VOL_VALUE 65535

BOOL flags=FALSE;

BEGIN_MESSAGE_MAP(ControlWindow,CFrameWnd)
ON_WM_CREATE()
ON_WM_ERASEBKGND()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_CTLCOLOR()
ON_WM_HSCROLL()
END_MESSAGE_MAP()

ControlWindow::ControlWindow()
{
Create(NULL,_T("VolumeControl"),WS_POPUPWINDOW,CRect(100,100,620,400));
}

BOOL ControlWindow::OnEraseBkgnd(CDC *pDC)
{
CRect rect;
GetClientRect(&rect);

CPalette* pOldPalette;
if ((HPALETTE)m_palette!=NULL){
   pOldPalette=pDC->SelectPalette(&m_palette,FALSE);
   pDC->RealizePalette();
}

DoGradientFill(pDC,&rect);

if ((HPALETTE) m_palette!=NULL)
   pDC->SelectPalette(pOldPalette,FALSE);
return TRUE;
}

int ControlWindow::OnCreate(LPCREATESTRUCT lpcs)
{
if (CFrameWnd::OnCreate(lpcs)==-1){
   return -1;
}

HRGN hRgn=::CreateRoundRectRgn(3,3,510,290,20,20);
::SetWindowRgn(m_hWnd,hRgn,TRUE);

m_slider.Create(WS_VISIBLE | TBS_ENABLESELRANGE,CRect(120,50,400,80),this,IDC_CONTROL);
m_slider.SetRange(0, MAX_VOL_VALUE, TRUE);
m_slider.SetTic(MAX_VOL_VALUE/2);
m_slider.SetPos(MAX_VOL_VALUE/2);
m_slider.EnableWindow(FALSE);

m_slider1.Create(WS_VISIBLE | TBS_ENABLESELRANGE,CRect(120,100,400,130),this,IDC_VOLUME);
m_slider1.SetRange(0, MAX_VOL_VALUE, TRUE);
m_slider1.SetPos(MAX_VOL_VALUE/2);
m_slider1.SetTic(MAX_VOL_VALUE/2);
m_slider1.EnableWindow(FALSE);

CClientDC dc(this);
if (dc.GetDeviceCaps(RASTERCAPS) & RC_PALETTE)
{
   struct{
    LOGPALETTE lp;
    PALETTEENTRY ape[63];
   }pal;

   LOGPALETTE* pLP=(LOGPALETTE*) &pal;
   pLP->palVersion=0x300;
   pLP->palNumEntries=64;

   for (int i=0;i<64;i++)
   {
    pLP->palPalEntry[i].peRed=0;
    pLP->palPalEntry[i].peGreen=0;
    pLP->palPalEntry[i].peBlue=255-(i*4);
    pLP->palPalEntry[i].peFlags=0;
   }
   m_palette.CreatePalette(pLP);
}

return 0;
}

void ControlWindow::OnLButtonDown(UINT nFlags,CPoint point)
{
flags=TRUE;
x=point.x;
y=point.y;
}

void ControlWindow::OnMouseMove(UINT nFlags,CPoint point)
{
if (flags){
   CRect rect;
   ::GetWindowRect(m_hWnd,rect);

   ::SetWindowPos(m_hWnd,NULL,rect.left+point.x-x,rect.top+point.y-y,rect.Width(),rect.Height(),SWP_NOSIZE);
}
}

void ControlWindow::OnLButtonUp(UINT nFlags, CPoint point)
{
flags=FALSE;
}

int ControlWindow::SetVolume(int left,int right)
{
DWORD newVol=(DWORD)MAKEWPARAM(left,right);
int err=::waveOutSetVolume((HWAVEOUT)WAVE_MAPPER,newVol);
if(err!=0){
   return err;
}
}

int ControlWindow::SetVol(int dwVolume)
{
MMRESULT result;
HMIXER hMixer;
MIXERLINE ml={0};
MIXERLINECONTROLS mlc={0};
MIXERCONTROL mc={0};
MIXERCONTROLDETAILS mcd={0};
MIXERCONTROLDETAILS_UNSIGNED mcdu={0};

result=mixerOpen(&hMixer,MIXER_OBJECTF_MIXER,0,0,0);
if (MMSYSERR_NOERROR==result){
   ml.cbStruct=sizeof(MIXERLINE);
   ml.dwComponentType=MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
   result=mixerGetLineInfo((HMIXEROBJ)hMixer,&ml,MIXER_GETLINEINFOF_COMPONENTTYPE);
   if (MMSYSERR_NOERROR==result){
    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_GETLINECONTROLSF_ONEBYTYPE);
    if   (MMSYSERR_NOERROR==result){
     mcdu.dwValue=dwVolume;
     mcd.cbStruct=sizeof(MIXERCONTROLDETAILS);
     mcd.hwndOwner=0;
     mcd.dwControlID=mc.dwControlID;
     mcd.paDetails=&mcdu;
     mcd.cbDetails=sizeof(MIXERCONTROLDETAILS_UNSIGNED);
     mcd.cChannels=1;
     result=mixerSetControlDetails((HMIXEROBJ)hMixer,&mcd,MIXER_SETCONTROLDETAILSF_VALUE);
     if   (MMSYSERR_NOERROR   ==   result)
      return 1;
     else
      AfxMessageBox("mixerSetControlDetails() failed");
    }else
     AfxMessageBox("mixerGetLineControls() failed");
   }else
    AfxMessageBox("mixerGetLineInfo() failed");
   mixerClose(hMixer);
}else
   AfxMessageBox("mixerOpen() failed");
return 0;
}

void ControlWindow::OnHScroll(UINT nSBCode,UINT nPos,CScrollBar *pScrollBar)
{
CSliderCtrl *pSlider=(CSliderCtrl *)pScrollBar;
int nValue= pSlider->GetPos();

if (m_slider.m_hWnd==pSlider->m_hWnd){
   if (nPos>MAX_VOL_VALUE/2)
    SetVolume(MAX_VOL_VALUE-nValue,nValue);
   else if(nPos<MAX_VOL_VALUE/2)
    SetVolume(MAX_VOL_VALUE-nValue,nValue);
}
else if (m_slider1.m_hWnd==pSlider->m_hWnd){
   SetVol(nValue);
}
}

HBRUSH ControlWindow::OnCtlColor(CDC *pDC,CWnd *pWnd,UINT nCtlColor)
{
CFrameWnd::OnCtlColor(pDC,pWnd,nCtlColor);
if (m_slider.m_hWnd==pWnd->m_hWnd){
   pDC->SetBkMode(TRANSPARENT);
   HBRUSH m_brush=(HBRUSH)::GetStockObject(NULL_BRUSH);
   m_brush=CreateSolidBrush(RGB(168,168,168));
   return m_brush;
}
else if (m_slider1.m_hWnd==pWnd->m_hWnd){
   pDC->SetBkMode(TRANSPARENT);
   HBRUSH m_brush=(HBRUSH)::GetStockObject(NULL_BRUSH);
   m_brush=CreateSolidBrush(RGB(168,168,168));
   return m_brush;
}
}

void ControlWindow::DoGradientFill(CDC* pDC,LPRECT pRect)
{
CBrush *brush3[255];
TRY{
   CBrush* pBrush[64];
   for (int i=0;i<64;i++)
    pBrush[i]=new CBrush(PALETTERGB(255-(i*4),0,0));
   int nWidth=pRect->right-pRect->left;
   int nHeight=pRect->bottom-pRect->top;
   CRect rect;
   for (int i=0;i<nHeight;i++){
   rect.SetRect(0,i,nWidth,i+1);
   pDC->FillRect(&rect,pBrush[(i*63)/nHeight]);
   }
   for (int i=0;i<64;i++)
    delete pBrush[i];

   HICON hIcon2=AfxGetApp()->LoadIcon("IDI_ICON3");
   pDC->DrawIcon(80,50,hIcon2);

   HICON hIcon1=AfxGetApp()->LoadIcon("IDI_ICON6");
   pDC->DrawIcon(80,100,hIcon1);
}CATCH (CException,e){
   this->DestroyWindow();
   this->CloseWindow();
}END_CATCH
}

这是我自己开发,意义不在于多难,主要是这是我第一次接触API编程,以前都是用Windows Forms来编程.或者是Java,这回依靠系统动态链接库来完成.感觉MFC很强大,也比较难的.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值