創建時間: 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){}
有很多的!!註意!