當前位置:編程學習大全網 - 源碼下載 - 請問誰知道chkenplayer (最小的播放器)的源代碼?

請問誰知道chkenplayer (最小的播放器)的源代碼?

/*******************************************************************************

創建時間: 2005年5月27日 4:24

路 徑: C:\KenPlayer

文 件: BasePlayer.cpp

作 者: CHKen

*******************************************************************************/

#include "Main.h"

#include "BasePlayer.h"

#include "MainDlg.h"

#include "LRC.h"

void FreeBasePlayer(CBasePlayer **ppPlayerControl){

m_MainDlg.m_DrawMessage.m_DrawScrollBarPos[0].Enable(FALSE);

m_MainDlg.m_DrawMessage.m_DrawScrollBarPos[0].m_LoadPos=0;

m_MainDlg.m_DrawMessage.m_DrawScrollBarPos[0].SetPos(0,true);

CBasePlayer *LsPlayer=*ppPlayerControl;

*ppPlayerControl=NULL;

if(LsPlayer){

LsPlayer->m_pPlayItem=&LsPlayer->m_DumpPlayItem;//停止,防止錯誤,脫離真實列表

LsPlayer->FreeThis();

}

}

void CBasePlayer::FreeThis(){

//if(m_lpParentWnd)

m_lpParentWnd->KillTimer(-1);

UnHookThis();

m_IsPlay=FALSE;

ChangePlayButton();

m_lpParentWnd=NULL;

//delete this;

}

CBasePlayer::CBasePlayer(CKWnd *lpParentWnd,CPlayerItem *pPlayItem)

:m_lpParentWnd(lpParentWnd),m_pPlayItem(pPlayItem),

m_DumpPlayItem(pPlayItem->m_Addr,Ken_Str_NULL,Ken_Str_NULL,Ken_Str_NULL){

m_X1000Scale=1000*4/3;

m_hWnd=0;

m_Proc=0;

m_PlayerType=0;

//m_hCursor=NULL;

m_IsPlay=FALSE;

}

#define WM_THREAD_MSG (WM_USER+0x400)

//void CBasePlayer::RunPlayerCommand(DWORD Cmd,LPARAM Param){}

bool CBasePlayer::OnThread(){return true;}

bool CBasePlayer::OnThreadMessage(WPARAM wParam,LPARAM lParam){return false;}

BOOL CBasePlayer::PostThreadMessage(IN WPARAM wParam, IN LPARAM lParam){

return ::PostThreadMessage(m_ThreadId,WM_THREAD_MSG,wParam,lParam);

}

void CBasePlayer::PostRetMessage(WPARAM wParam,LPARAM lParam){

if(m_lpParentWnd)m_lpParentWnd->PostMessage(WM_PLAYER_MESSAGE,wParam,lParam);

}

static DWORD WINAPI _ThreadProc(CBasePlayer *lpThis){

MSG m_Msg;

if(lpThis->OnThread())

while(true){

GetMessage(&m_Msg,NULL,WM_THREAD_MSG,WM_THREAD_MSG);//if(m_Msg.hwnd==0)

if(!lpThis->OnThreadMessage(m_Msg.wParam,m_Msg.lParam))break;

}

return 0;

}

void CBasePlayer::StartThread(){

::CloseHandle(::CreateThread(0,0,(LPTHREAD_START_ROUTINE)_ThreadProc,this,0,&m_ThreadId));

}

//void CBasePlayer::MoveWindow(int x,int y,int w,int h){}

void CBasePlayer::StartTimer(UINT nElapse){

if(m_lpParentWnd)

m_lpParentWnd->SetTimer(-1,nElapse);

}

void CBasePlayer::ConvTimerToStr(DWORD Timer,char *OutBuf){

wsprintf(OutBuf,"%02d:%02d:%02d",

Timer/(1000*60*60),Timer/(1000*60)%60,Timer/(1000)%60);

}

void CBasePlayer::ChangePlayButton(){

if(m_lpParentWnd){

m_MainDlg.m_DrawMessage.m_DrawButtons[5].SetWindowText(m_IsPlay?";":"4");// | >

m_MainDlg.m_DrawMessage.m_DrawButtons[5].RePaint();

}

}

static void ConvAddTimer(CBasePlayer *pThis,char *Buf,DWORD Pos){

char Buf1[32];

if(*Buf)lstrcat(Buf,"/");

pThis->ConvTimerToStr(Pos,Buf1);

lstrcat(Buf,Buf1);

}

void CBasePlayer::ChangePosition(DWORD LoadPos,DWORD CurPos,DWORD MaxPos){

if(m_lpParentWnd){

m_MainDlg.m_DrawMessage.m_DrawScrollBarPos[0].m_LoadPos=LoadPos;

m_MainDlg.m_DrawMessage.m_DrawScrollBarPos[0].m_MaxPos=MaxPos;

m_MainDlg.m_DrawMessage.m_DrawScrollBarPos[0].SetPos(CurPos,true);

char Buf[32*3];

Buf[0]=0;

DWORD LRCPos=CurPos;

if(m_MainDlg.m_DrawMessage.m_DrawScrollBarPos[0].m_IsPressed)

ConvAddTimer(this,Buf,LRCPos=m_MainDlg.m_DrawMessage.m_DrawScrollBarPos[0].GetCurPos());

ConvAddTimer(this,Buf,CurPos);

ConvAddTimer(this,Buf,MaxPos);

SetMessageTimer(Buf);

CLRC::RunCommand(MLPlayPosChanged, (MLPARAM)LRCPos, 0);

}

}

void CBasePlayer::SetItemTimer(DWORD Timer){

char buf[64];

ConvTimerToStr(Timer,buf);

m_pPlayItem->m_Timer=buf;

m_MainDlg.m_DrawListView.RePaint();

}

void CBasePlayer::SetMessageTimer(char *pTimer){

m_MainDlg.m_DrawMessage.m_Message.m_InfoText=pTimer;

m_MainDlg.m_DrawMessage.m_Message.RePaint();;

}

////////////////////////////////////////////////////////////////////////////////

void CBasePlayer::HookThis(){

m_Proc=Attach(m_hWnd);

}

void CBasePlayer::UnHookThis(){

if(m_Proc)Detach(m_Proc);

m_Proc=0;

}

LRESULT CBasePlayer::OnMsg(UINT Msg,WPARAM wParam,LPARAM lParam){

switch(Msg){

case WM_MOUSEMOVE:

case WM_LBUTTONDBLCLK:

case WM_LBUTTONDOWN:

if(m_lpParentWnd)

m_lpParentWnd->PostMessage(Msg,wParam,lParam);

break;

}

return ::CallWindowProc((WNDPROC)m_Proc,m_hWnd,Msg,wParam,lParam);

}

//void CBasePlayer::OnPaint(CKDC *DrawDC,LPRECT lpRc){}

有很多的!!註意!

  • 上一篇:遊資主力散戶的開源代碼
  • 下一篇:文字遊戲MUD
  • copyright 2024編程學習大全網