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

📄 interface.cpp

📁 tcpmp 中修改过的界面文件
💻 CPP
📖 第 1 页 / 共 5 页
字号:

		tcscpy_s(URL,TSIZEOF(URL),CmdLine);

		p->CmdLineMode = 1;

		n = 1;
		p->Player->Set(p->Player,PLAYER_LIST_COUNT,&n,sizeof(n));

		PlayerAdd(p->Player,0,URL,NULL);
	}

	n = 0;
	p->Player->Set(p->Player,PLAYER_LIST_CURRIDX,&n,sizeof(n));

	if (!IsWindowEnabled((HWND)p->Win.Wnd))
		Toggle(p,PLAYER_PLAY,0);
}

void SetTrackPos(intface* p,int x)
{
	fraction Percent;
	RECT r,rt;
	int Adj;

	if (p->TrackSetPos == x)
		return;

	p->TrackSetPos = x;
	SendMessage(p->WndTrack,TBM_GETCHANNELRECT,0,(LONG)&r);
	SendMessage(p->WndTrack,TBM_GETTHUMBRECT,0,(LONG)&rt);
	Adj = (rt.right-rt.left) >> 1;
	r.left += Adj;
	r.right -= (rt.right-rt.left)-Adj;

	if (x > 32768) x -= 65536;
	if (r.right <= r.left) r.right = r.left+1;
	if (x < r.left) x = r.left;
	if (x > r.right) x = r.right;
	x = Scale(TRACKMAX,x-r.left,r.right-r.left);

	Percent.Num = x;
	Percent.Den = TRACKMAX;
	p->Player->Set(p->Player,PLAYER_PERCENT,&Percent,sizeof(Percent));

//	//临时:刷新进度条
//	::InvalidateRect( p->WndTrack, NULL, FALSE );
}

//媒体文件名及显示时间
LRESULT CALLBACK TitleProc(HWND WndTitle, UINT Msg, WPARAM wParam, LPARAM lParam)
{
	intface* p = (intface*) WinGetObject(WndTitle);
	if (p)
	{
		PAINTSTRUCT Paint;
		RECT r;
		tchar_t Time[32];

		switch (Msg)
		{
		case WM_ERASEBKGND:
			//GetClientRect(WndTitle,&r);
			//FillRect((HDC)wParam,&r,p->TitleBrush ? p->TitleBrush:GetSysColorBrush(COLOR_BTNFACE));
			return (LRESULT)true;
			break;

//#if defined(TARGET_WINCE)
		case WM_CTLCOLORSTATIC:
			return (LRESULT)::GetStockObject(NULL_BRUSH); 
			//return (LRESULT) GetSysColorBrush(COLOR_BTNFACE);
			break;
//#endif
			
		case WM_SIZE:
			p->UpdateScroll = 1;
			break;

		case WM_LBUTTONDOWN:
			break;

		case WM_MOUSEMOVE:
			break;

		case WM_LBUTTONUP:
			break;

		case WM_PAINT:
			BeginPaint(WndTitle,&Paint);

			//add by zy
			//画图
			CPoint ptLeftTop, ptWidthHeight;
			RECT rtSelArea = p->rtTitle;
			ptLeftTop.x = rtSelArea.left;
			ptLeftTop.y = rtSelArea.top;
			ptWidthHeight.x = rtSelArea.right - rtSelArea.left;
			ptWidthHeight.y = rtSelArea.bottom - rtSelArea.top;
			/////////////////////////////////////////////////////
			
			CImage *pBk = NULL;
			int byIndex = 0;
			if( byIndex>=0 ) {
				pBk = p->m_pimgState[byIndex];
			}
			if( pBk==NULL ) {
				pBk = p->m_pimgState[0];
			}
			if( pBk ) {
				if( ptWidthHeight.x==0 ) {
					ptWidthHeight.x = pBk->GetWidth();
				}
				if( ptWidthHeight.y==0 ) {
					ptWidthHeight.y = pBk->GetHeight();
				}
				
				RECT rcClient;
				GetClientRect(WndTitle, &rcClient);
				//注意: CImage是从底算起, 即ySrc为0时,从下端算起
				ptLeftTop.y = pBk->GetHeight()-(rtSelArea.bottom-rtSelArea.top)-rtSelArea.top;
				pBk->Draw( Paint.hdc, rcClient.left, rcClient.top, rcClient.right-rcClient.left, rcClient.bottom-rcClient.top, 
					ptLeftTop.x, ptLeftTop.y, ptWidthHeight.x, ptWidthHeight.y );
			}
			///////////////////////////////////////////////////////////////////////

			SelectObject(Paint.hdc,p->TitleFont);
			SetBkColor(Paint.hdc,p->TitleFace);
			SetTextColor(Paint.hdc,p->TitleText);
			//add by zy
			SetBkMode( Paint.hdc, TRANSPARENT );
			/////////////////////////////////////
#if !defined(TARGET_WINCE)
			SetTextAlign(Paint.hdc,TA_LEFT);
#endif

			if (!p->TitleTimeWidth)
			{
				SIZE Size;
				tchar_t* s;
				tchar_t Dur[32];
				tick_t Duration;
				tchar_t TitleName[256];
				node* Format;

				if (p->Player->Get(p->Player,PLAYER_FORMAT,&Format,sizeof(Format)) == ERR_NONE && !Format)
					p->TitleTime = -1;

				p->Player->Get(p->Player,PLAYER_TITLE,TitleName,sizeof(TitleName));
				if (tcscmp(p->TitleName,TitleName)!=0)
				{
					tcscpy_s(p->TitleName,TSIZEOF(p->TitleName),TitleName);
					GetTextExtentPoint(Paint.hdc,p->TitleName,tcslen(p->TitleName),&Size);
					p->TitleNameWidth = Size.cx;
					p->TitleNameOffset = 0;
					p->ScrollMode = 0;
					p->UpdateScroll = 1;
				}

				s = Dur;
				Dur[0] = 0;
				if (p->Player->Get(p->Player,PLAYER_DURATION,&Duration,sizeof(Duration)) == ERR_NONE && Duration>=0)
				{
					TickToString(Dur,TSIZEOF(Dur),Duration,0,0,1);
					if (p->TitleTime<0)
						p->TitleTime = 0;
				}
				else
					s = T("0:00:00");

				GetTextExtentPoint(Paint.hdc,s,tcslen(s),&Size);
				p->TitleTimeWidth = Size.cx;
				p->TitleDurWidth = 0;
				p->TitleDur[0] = 0;

				if (Dur[0])
				{
					stprintf_s(p->TitleDur,TSIZEOF(p->TitleDur),T("/%s"),Dur);
					GetTextExtentPoint(Paint.hdc,p->TitleDur,tcslen(p->TitleDur),&Size);
					p->TitleDurWidth = Size.cx;
					p->UpdateScroll = 1;
				}
			}

			if (p->TitleTime>=0)
				TickToString(Time,TSIZEOF(Time),p->TitleTime,0,0,1);
			else
				Time[0] = 0;

			r.top = p->TitleTop;
			r.bottom = p->TitleHeight - p->TitleTop;
			r.left = p->TitleBorder;
			r.right = p->TitleWidth - p->TitleTimeWidth - p->TitleDurWidth - p->TitleBorder * 2;
			p->TitleNameSize  = r.right - r.left;

			if (p->UpdateScroll)
			{
				p->UpdateScroll = 0;
				UpdateTitleScroll(p);
			}

			//画标题
			ExtTextOut(Paint.hdc,r.left-p->TitleNameOffset,r.top,ETO_CLIPPED,&r,p->TitleName,tcslen(p->TitleName),NULL);


			r.left = r.right + p->TitleBorder;
			r.right = r.left + p->TitleTimeWidth;
			////SetBkColor(Paint.hdc,0xFFFFFF);
			//画已播放时间
			//ExtTextOut(Paint.hdc,r.left,r.top,ETO_CLIPPED|ETO_OPAQUE,&r,Time,tcslen(Time),NULL);
			ExtTextOut(Paint.hdc,r.left,r.top,ETO_CLIPPED,&r,Time,tcslen(Time),NULL);
			////SetBkColor(Paint.hdc,0x00FF00);

			if (p->TitleDurWidth)
			{
				r.left = r.right;
				r.right = r.left + p->TitleDurWidth;
				//画媒体的总的时间长度
				ExtTextOut(Paint.hdc,r.left,r.top,ETO_CLIPPED,&r,p->TitleDur,tcslen(p->TitleDur),NULL);
			}

			EndPaint(WndTitle,&Paint);
			break;
		}
	}
	return DefWindowProc(WndTitle,Msg,wParam,lParam);
}

static void SetKeyInSeek(intface* p)
{
	bool_t First = !p->InSeek;
	p->InSeek = 1;
	p->Player->Set(p->Player,PLAYER_INSEEK,&p->InSeek,sizeof(p->InSeek));
	SetTimer((HWND)p->Win.Wnd,TIMER_KEYINSEEK,First?KEYINSEEK_START:KEYINSEEK_REPEAT,NULL);
}

static void StopSeek(intface* p)
{
	p->InSeek = 0;
	p->Player->Set(p->Player,PLAYER_INSEEK,&p->InSeek,sizeof(p->InSeek));
	KillTimer((HWND)p->Win.Wnd,TIMER_KEYINSEEK);
	if (p->Capture)
	{
		ReleaseCapture();
		p->Capture = 0;
		KillTimer((HWND)p->Win.Wnd,TIMER_SLIDERINSEEK);
	}
}

void UpdateVol(intface* p)
{
	if (p->Vol >= 0)
	{
		SendMessage(p->WndVol,TBM_SETPOS,1,p->Vol);
		p->Player->Set(p->Player,PLAYER_VOLUME,&p->Vol,sizeof(p->Vol));
		p->Vol = -1;
		//更新显示
		::InvalidateRect( p->WndVol, NULL, FALSE );				
		
		if (p->Skin[p->SkinNo].Valid)
			SkinUpdate(&p->Skin[p->SkinNo],p->Player,p->Win.Wnd,&p->SkinArea);
	}
}

void SetVolPos(intface* p,int x)
{
	RECT r;
	int Adj;
	SendMessage(p->WndVol,TBM_GETCHANNELRECT,0,(LONG)&r);
	Adj = WinUnitToPixelX(&p->Win,VOLTHUMB)/4;
	r.left += Adj;
	r.right -= Adj;
	
	if (x > 32768) x -= 65536;
	if (r.right <= r.left) r.right = r.left+1;
	if (x < r.left) x = r.left;
	if (x > r.right) x = r.right;
	
	p->Vol = (100*(x-r.left))/(r.right-r.left);
}


//播放进度条窗口函数
LRESULT CALLBACK TrackProc(HWND WndTrack, UINT Msg, WPARAM wParam, LPARAM lParam)
{
	intface* p = (intface*) WinGetObject(WndTrack);
	if (Msg == WM_LBUTTONDOWN)	{
		p->InSeek = 1;
		p->Capture = 1;
		p->TrackSetPos = -1;
		p->Player->Set(p->Player,PLAYER_INSEEK,&p->InSeek,sizeof(p->InSeek));
		SetTrackPos(p,LOWORD(lParam));
		SetCapture(WndTrack);
		SetTimer((HWND)p->Win.Wnd,TIMER_SLIDERINSEEK,SLIDERINSEEK_CYCLE,NULL);
		return 0;
	}
	if (Msg == WM_MOUSEMOVE)
	{
		if (p->InSeek && (wParam & MK_LBUTTON))
			SetTrackPos(p,LOWORD(lParam));
		return 0;
	}
	if (Msg == WM_LBUTTONUP)
	{
		if (p->InSeek)
		{
			SetTrackPos(p,LOWORD(lParam));
			StopSeek(p);
		}
		return 0;
	}

/*
	//add by zy
	if (Msg == WM_ERASEBKGND)
	{
		HDC hdc = (HDC)wParam;
		return (LRESULT)true;
	}
	if (Msg == WM_PAINT)
	{
		PAINTSTRUCT paint;
		BeginPaint(WndTrack, &paint);

		//依状态画图
		CPoint ptLeftTop, ptWidthHeight;
		RECT rtSelArea = p->rtTrack;
		ptLeftTop.x = rtSelArea.left;
		ptLeftTop.y = rtSelArea.top;
		ptWidthHeight.x = rtSelArea.right;
		ptWidthHeight.y = rtSelArea.bottom;
		/////////////////////////////////////////////////////
		
		CImage *pBk = NULL;
		int byIndex = 0;
		if( byIndex>=0 ) {
			pBk = p->m_pimgState[byIndex];
		}
		if( pBk==NULL ) {
			pBk = p->m_pimgState[0];
		}
		if( pBk ) {
			if( ptWidthHeight.x==0 ) {
				ptWidthHeight.x = pBk->GetWidth();
			}
			if( ptWidthHeight.y==0 ) {
				ptWidthHeight.y = pBk->GetHeight();
			}
			
			RECT rcClient;
			GetClientRect(WndTrack, &rcClient);
			//注意: CImage是从底算起, 即ySrc为0时,从下端算起
			ptLeftTop.y = pBk->GetHeight()-rtSelArea.bottom-rtSelArea.top;
			pBk->Draw( paint.hdc, rcClient.left, rcClient.top, rcClient.right-rcClient.left, rcClient.bottom-rcClient.top, ptLeftTop.x, ptLeftTop.y, ptWidthHeight.x, ptWidthHeight.y );
		}
		
		EndPaint(WndTrack, &paint);
		return 0;
	}
*/
	///////////////////////////////////////////////////////////////////
	
	return CallWindowProc(p->DefTrackProc,WndTrack,Msg,wParam,lParam);
}

//音量条底座的窗口函数
LRESULT CALLBACK VolBackProc(HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
	//DEBUG_MSG1(DEBUG_WIN,T("MSG %04x"),Msg);
	
	switch (Msg)
	{
#if defined(TARGET_WINCE)
	case WM_CTLCOLORSTATIC:
		return (LRESULT) GetSysColorBrush(COLOR_BTNFACE);
#endif
	}
	return DefWindowProc(Wnd,Msg,wParam,lParam);
}

//音量条窗口函数
LRESULT CALLBACK VolProc(HWND WndVol, UINT Msg, WPARAM wParam, LPARAM lParam)
{
	intface* p = (intface*) WinGetObject(WndVol);
	
	switch (Msg)
	{
	case WM_MOUSEMOVE:
		if ((wParam & MK_LBUTTON)==0)
			break;
		
	case WM_LBUTTONDOWN:
	case WM_LBUTTONDBLCLK:		
		SetVolPos(p,LOWORD(lParam));
		if (!p->InVol)
		{
			p->InVol = 1;
			SetForegroundWindow((HWND)p->Win.Wnd);
			SetCapture(WndVol);
			SetTimer((HWND)p->Win.Wnd,TIMER_SLIDERINVOL,SLIDERINVOL_CYCLE,NULL);
			UpdateVol(p);
		}
		return 0;
		
	case WM_LBUTTONUP:
		if (!p->InVol)
			SetForegroundWindow((HWND)p->Win.Wnd);
		else
		{
			p->InVol = 0;
			ReleaseCapture();
			KillTimer((HWND)p->Win.Wnd,TIMER_SLIDERINVOL);
		}
		SetVolPos(p,LOWORD(lParam));
		UpdateVol(p);
		return 0;
	}
	
	return CallWindowProc(p->DefVolProc,WndVol,Msg,wParam,lParam);
}

//皮肤滑动条的窗口函数
LRESULT CALLBACK QSkinSliderProc(HWND WndSlider, UINT Msg, WPARAM wParam, LPARAM lParam)
{
	intface* p = (intface*) WinGetObject(WndSlider);
	return CallWindowProc(p->DefQSkinSliderProc,WndSlider,Msg,wParam,lParam);
}


void CreateDeviceMenu(intface* p)
{
	int No;
	int *i;

	NodeEnumClass(&p->VOutput,VOUT_CLASS);
	NodeEnumClass(&p->AOutput,AOUT_CLASS);

	for (No=0,i=ARRAYBEGIN(p->VOutput,int);i!=ARRAYEND(p->VOutput,int);++i,++No)
	{
		if (VOutIDCT(*i))
		{
			tchar_t s[256];
			stprintf_s(s,TSIZEOF(s),LangStr(INTERFACE_ID,IF_OPTIONS_VIDEO_ACCEL),LangStr(*i,NODE_NAME));
			WinMenuInsert(&p->Win,1,IF_OPTIONS_VIDEO_TURNOFF,IF_VIDEOACCEL+No,s);
		}
		WinMenuInsert(&p->Win,1,IF_OPTIONS_VIDEO_TURNOFF,IF_VIDEO+No,LangStr(*i,NODE_NAME));
	}

	for (No=0,i=ARRAYBEGIN(p->AOutput,int);i!=ARRAYEND(p->AOutput,int);++i,++No)
		WinMenuIns

⌨️ 快捷键说明

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