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

📄 interface.cpp

📁 tcpmp 中修改过的界面文件
💻 CPP
📖 第 1 页 / 共 5 页
字号:
//
//		for( int i=0; i<MAX_BUTTONS; i++ ) {
//			SetWindowPos(p->ga_pSkinBtns[i]->GetSafeHwnd(),HWND_TOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_SHOWWINDOW);
//		}		
		DeferWindowPos( hDwp, p->WndTitle,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_SHOWWINDOW);
		DeferWindowPos( hDwp, p->WndTrack,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_SHOWWINDOW);
		DeferWindowPos( hDwp, p->WndVol,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_SHOWWINDOW);
		DeferWindowPos( hDwp, p->WndPlayList,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_SHOWWINDOW);
		
		for( int i=0; i<MAX_BUTTONS; i++ ) {
			DeferWindowPos( hDwp, p->ga_pSkinBtns[i]->GetSafeHwnd(),HWND_TOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_SHOWWINDOW);
		}

		::EndDeferWindowPos( hDwp );
	} else {
		ShowWindow( p->WndTitle, SW_HIDE);
		ShowWindow( p->WndTrack, SW_HIDE);
		ShowWindow( p->WndVol, SW_HIDE);

		ShowWindow( p->WndPlayList, SW_HIDE);

		for( int i=0; i<MAX_BUTTONS; i++ ) {
			ShowWindow(p->ga_pSkinBtns[i]->GetSafeHwnd(), SW_HIDE);
		}
	}

//	SendMessage( (HWND)p->Win.Wnd, WM_SETREDRAW, TRUE, 0 );
}

//调整各控件的位置
static void Resize(intface* p)
{
	RECT r;
	bool_t Rotated = IsOrientationChanged();

	DEBUG_MSG(DEBUG_VIDEO,T("Resize begin"));

	if (Rotated) {
		p->Player->Set(p->Player,PLAYER_ROTATEBEGIN,NULL,0);
		p->Player->Set(p->Player,PLAYER_RESETVIDEO,NULL,0);
		if (!p->Win.ToolBarHeight) {
			p->VolResizeNeeded2 = 1; // toolbar position may change later
			if (p->WndVol && IsWindowVisible(p->WndVol)) { //if (p->WndVolBack && IsWindowVisible(p->WndVolBack))
				ShowVol(p,0);
				p->VolResizeNeeded2 = 2;
			}

			ShowSkinButtons( p, 0 );
		} else {
			p->VolResizeNeeded = 1;
		}

		if (p->Win.FullScreen) {
			PostMessage((HWND)p->Win.Wnd,MSG_PLAYER,PLAYER_FULLSCREEN,0);
		}
	}

	p->Offset.x = 0;
	p->Offset.y = 0;
	ClientToScreen((HWND)p->Win.Wnd,&p->Offset);

	if (!p->Win.FullScreen)	{
#if !defined(TARGET_WINCE) && defined(MAXIMIZE_FULLSCREEN)
		WINDOWPLACEMENT Place;
		Place.length = sizeof(Place);
		GetWindowPlacement(p->Win.Wnd,&Place);
		if (Place.showCmd != SW_MAXIMIZE)
#endif
		{
			GetClientRect((HWND)p->Win.Wnd,&r);

			if (r.right != p->ClientRect.right || r.bottom != p->ClientRect.bottom)	{
				bool_t Skin = p->Skin[p->SkinNo].Valid;
				int TrackHeight = 0;
				p->TitleHeight = 0;
				p->ClientRect = r;

				r.top += p->Win.ToolBarHeight;

				if (p->WndTrack) {	//播放进度条
					int nThumb = WinUnitToPixelY(&p->Win, p->pTrackSlider->m_rcThumbPicSelArea.bottom );
					SendMessage(p->WndTrack, TBM_SETTHUMBLENGTH, nThumb, 0);
					if (p->TrackThumb != nThumb)
					{
						p->TrackThumb = nThumb; // avoid calling this regulary because it shows the trackbar
					}
				}

				if (p->WndTitle) { //标题条
					p->TitleTimeWidth = 0;
					p->TitleFontSize = 9;//TITLEFONT;
					p->TitleFont = (HFONT)WinFont(&p->Win,&p->TitleFontSize,0);
					p->TitleHeight = WinUnitToPixelY(&p->Win,8); //WinUnitToPixelY(&p->Win,TITLEHEIGHT);
					p->TitleBorder = WinUnitToPixelX(&p->Win,1); //3);
					p->TitleWidth = p->rtTitle.right - p->rtTitle.left;//r.right - r.left;

					if (Skin) {
						skinitem* i = &p->Skin[p->SkinNo].Item[SKIN_TITLE];
						p->TitleWidth = i->Rect.Width;
						p->TitleHeight = i->Rect.Height;
						MoveWindow(p->WndTitle,r.left + i->Rect.x,r.top + i->Rect.y,p->TitleWidth,p->TitleHeight,TRUE);
					} else {
						if (p->Win.ToolBarHeight) {
							r.bottom -= p->TitleHeight;
							MoveWindow(p->WndTitle,r.left,r.bottom,p->TitleWidth,p->TitleHeight,TRUE);
						} else {
							MoveWindow(p->WndTitle,r.left,r.top,p->TitleWidth,p->TitleHeight,TRUE);
							r.top += p->TitleHeight;
						}
					}

					p->TitleTop = (p->TitleHeight-WinUnitToPixelY(&p->Win,p->TitleFontSize))/2;

					//add by zy
					MoveWindow(p->WndTitle, p->rtTitle.left, p->rtTitle.top, 
						p->rtTitle.right - p->rtTitle.left, p->rtTitle.bottom - p->rtTitle.top,
						TRUE);
					/////////////////////////////////////////////////////////////////////////////////////////////
				}

				//add by zy
				if( p->WndVol ) {
					int nThumb = WinUnitToPixelY(&p->Win, p->pVolSlider->m_rcThumbPicSelArea.bottom );
					SendMessage(p->WndVol, TBM_SETTHUMBLENGTH, nThumb, 0);
				}
				/////////////////////////////////////////////////////////////////////////////////////////////					
				
				//add by zy
				if (p->WndPlayList)	{ //播放列表
					p->PLFontSize = 8;//9;//TITLEFONT;
					p->PLFont = (HFONT)WinFont(&p->Win,&p->PLFontSize,0);

					MoveWindow(p->WndPlayList, p->rtPlayList.left, p->rtPlayList.top, p->rtPlayList.right - p->rtPlayList.left, p->rtPlayList.bottom - p->rtPlayList.top, TRUE);
					/////////////////////////////////////////////////////////////////////////////////////////////
				}

				p->SkinArea.x = r.left;
				p->SkinArea.y = r.top;
				p->SkinArea.Width = r.right - r.left;
				p->SkinArea.Height = r.bottom - r.top;

				//test 测试改变播放区域
				//p->SkinArea.x += 50;
				//p->SkinArea.y += 50;
				//p->SkinArea.Width -= 100;
				//p->SkinArea.Height -= 90;				
				p->SkinArea.x = p->DispAreaRect.left;
				p->SkinArea.y = p->DispAreaRect.top;
				p->SkinArea.Width = p->DispAreaRect.right - p->DispAreaRect.left;
				p->SkinArea.Height= p->DispAreaRect.bottom - p->DispAreaRect.top;

				if (!Skin) {
					p->SkinViewport = p->SkinArea;
				} else {
					p->SkinViewport = p->Skin[p->SkinNo].Item[SKIN_VIEWPORT].Rect;
					p->SkinViewport.x += p->SkinArea.x;
					p->SkinViewport.y += p->SkinArea.y;
				}

				if (p->Win.ToolBarHeight && !p->VolResizeNeeded) {
					ResizeVolume(p);
				}
			}

			p->Viewport = p->SkinViewport;
			p->Viewport.x += p->Offset.x;
			p->Viewport.y += p->Offset.y;
			p->Player->Set(p->Player,PLAYER_SKIN_VIEWPORT,&p->Viewport,sizeof(rect));
			p->Player->Set(p->Player,PLAYER_UPDATEVIDEO,NULL,0);

			if (p->VolResizeNeeded)	{
				ResizeVolume(p);
				p->VolResizeNeeded = 0;
			}
		}
	} else {
		GetClientRect((HWND)p->Win.Wnd,&r);
		p->Viewport.x = r.left + p->Offset.x;
		p->Viewport.y = r.top + p->Offset.y;
		p->Viewport.Width = r.right - r.left;
		p->Viewport.Height = r.bottom - r.top;
	}

	if (Rotated) {
		p->Player->Set(p->Player,PLAYER_ROTATEEND,NULL,0);
	}
	
	DEBUG_MSG4(DEBUG_VIDEO,T("Resize end %d,%d,%d,%d"),p->Viewport.x,p->Viewport.y,p->Viewport.Width,p->Viewport.Height);
}


static BOOL CALLBACK EnumCheck(HWND Wnd, LPARAM lParam )
{
	intface* p = (intface*) lParam;
	RECT r;

	if (Wnd == p->Win.Wnd)
		return 0;

	if (IsWindowVisible(Wnd))
	{
		GetWindowRect(Wnd,&r);

		if (p->Viewport.x < r.right &&
			p->Viewport.x + p->Viewport.Width > r.left &&
			p->Viewport.y < r.bottom &&
			p->Viewport.y + p->Viewport.Height > r.top)
		{
			p->Overlap = 1;
			return 0;
		}
	}
	return 1;
}

static void UpdateHotKey(intface* p,bool_t State,bool_t NoKeep)
{
	int i;
	if (!p->AllKeys)
	{
		for (i=0;i<HOTKEYCOUNT;++i)
			if (p->HotKey[i])
			{
				if (State)
				{
					if (!WinEssentialKey(p->HotKey[i]))
						WinRegisterHotKey(&p->Win,HotKey[i],p->HotKey[i]);
				}
				else
				if (NoKeep || !(p->HotKey[i] & HOTKEY_KEEP))
					WinUnRegisterHotKey(&p->Win,HotKey[i]);
				else
				if (WinEssentialKey(p->HotKey[i])) //essential keys -> register in the background
					WinRegisterHotKey(&p->Win,HotKey[i],p->HotKey[i]);
			}
	}
	else
	{
		WinAllKeys(State);
		if (!State && !NoKeep)
			for (i=0;i<HOTKEYCOUNT;++i)
				if (p->HotKey[i] & HOTKEY_KEEP)
					WinRegisterHotKey(&p->Win,HotKey[i],p->HotKey[i]);
	}
}

static void UpdateSleepTimer(intface* p)
{
#if defined(TARGET_WINCE)
	if (p->Play>0 || p->FFwd>0)
	{
		SleepTimerReset();
		SetTimer((HWND)p->Win.Wnd,TIMER_SLEEP,SLEEP_CYCLE,NULL);
	}
	else
		KillTimer((HWND)p->Win.Wnd,TIMER_SLEEP);
#endif
}

static void UpdateTitleScroll(intface* p)
{
	if (p->Focus && p->TitleNameSize < p->TitleNameWidth)
	{
		if (p->TitleNameOffset >= p->TitleNameWidth - p->TitleNameSize)
			p->TitleNameOffset = p->TitleNameWidth - p->TitleNameSize;
		SetTimer((HWND)p->Win.Wnd,TIMER_TITLESCROLL,TITLESCROLL_CYCLE,NULL);
	}
	else
	{
		p->TitleNameOffset = 0;
		p->ScrollMode = 0;
		KillTimer((HWND)p->Win.Wnd,TIMER_TITLESCROLL);
	}
}

static void TitleScroll(intface* p)
{
	if (p->ScrollMode<TITLESCROLL_WAIT)
		++p->ScrollMode;
	else
	if (p->ScrollMode==TITLESCROLL_WAIT)
	{
		p->TitleNameOffset += 3;
		if (p->TitleNameOffset >= p->TitleNameWidth - p->TitleNameSize)
		{
			p->TitleNameOffset = p->TitleNameWidth - p->TitleNameSize;
			++p->ScrollMode;
		}
		InvalidateRect(p->WndTitle,NULL,1); 
	}
	else
	if (p->ScrollMode<TITLESCROLL_WAIT*2+1)
		++p->ScrollMode;
	else
	{
		p->TitleNameOffset -= 3;
		if (p->TitleNameOffset<=0)
		{
			p->TitleNameOffset=0;
			p->ScrollMode = 0;
		}
		InvalidateRect(p->WndTitle,NULL,1); 
	}

	UpdateTitleScroll(p);
}

static bool_t ShowVideo(intface* p)
{
	bool_t b = p->Focus;
	if (!b)
		p->Player->Get(p->Player,PLAYER_SHOWINBACKGROUND,&b,sizeof(b));
	return b;
}

static void UpdateClippingTimer(intface* p)
{
	if (p->Clipping && ShowVideo(p))
		SetTimer((HWND)p->Win.Wnd,TIMER_CLIPPING,CLIPPING_CYCLE,NULL);
	else
		KillTimer((HWND)p->Win.Wnd,TIMER_CLIPPING);
}

static bool_t IsOverlay(intface* p)
{
	bool_t b = 0;
	p->Player->Get(p->Player,PLAYER_VIDEO_OVERLAY,&b,sizeof(b));
	return b;
}

static bool_t IsOverlapped(intface* p)
{
	if (!p->Win.FullScreen || p->Wait)
	{
		// check for overlapping top-level windows
		p->Overlap = 0;
		EnumWindows(EnumCheck,(LPARAM)p);
		if (p->Overlap)
			return 1;
	}
	return 0;
}

static void UpdateClipping(intface* p,bool_t Suggest,bool_t HotKey)
{
	if (p->Clipping != Suggest)
	{
		KillTimer((HWND)p->Win.Wnd,TIMER_CLIPPING2);

		if (!Suggest && IsOverlapped(p))
			return; // overlapping window -> clipping still needed

		p->Clipping = Suggest;
		p->Player->Set(p->Player,PLAYER_CLIPPING,&p->Clipping,sizeof(bool_t));

		if (HotKey)
			UpdateHotKey(p,!p->Clipping,0);

		UpdateClippingTimer(p);
	}
}

static void RefreshButton(intface* p,int No,bool_t* State,int Id,int Off,int On)
{
	int i;
	bool_t b;

	if (p->Player->Get(p->Player,No,&b,sizeof(b)) != ERR_NONE)
		b = -1;

	switch (No)
	{
	case PLAYER_PLAY: i = SKIN_PLAY; break;
	case PLAYER_FFWD: i = SKIN_FFWD; break;
	case PLAYER_MUTE: i = SKIN_MUTE; break;
	case PLAYER_FULLSCREEN: i = SKIN_FULLSCREEN; break;
	case PLAYER_REPEAT: i = SKIN_REPEAT; break;
	default: i = -1; break;
	}

	if (i>=0 && p->Skin[p->SkinNo].Item[i].Pushed != b)
	{
		p->Skin[p->SkinNo].Item[i].Pushed = b;
		SkinDrawItem(p->Skin+p->SkinNo,p->Win.Wnd,i,&p->SkinArea);
	}

	//令按钮状态更新
	int n;
	switch (No)
	{
	case PLAYER_PLAY: 
		n = GetButtonInfoIndex(IF_PLAYPAUSE); break;
	//case PLAYER_FFWD:
	//	n = GetButtonInfoIndex(IF_FASTFORWARD); break;
	case PLAYER_MUTE: 
		n = GetButtonInfoIndex(IF_OPTIONS_MUTE); break;
	case PLAYER_FULLSCREEN: 
		n = GetButtonInfoIndex(IF_OPTIONS_FULLSCREEN); break;
	case PLAYER_REPEAT: 
		n = GetButtonInfoIndex(IF_OPTIONS_REPEAT); break;
	case PLAYER_SHUFFLE: 
		n = GetButtonInfoIndex(IF_OPTIONS_SHUFFLE); break;
	default: n = -1; break;
	}
	if( n>=0 && n<MAX_BUTTONS ) {
		CQSkinButton* pBtn = p->ga_pSkinBtns[n];
		if( pBtn ) {
			pBtn->SetCheck( (int)b );
		}
	}


	if (State && b != *State)
	{
		if (b == -1 || *State == -1)
			SendMessage((HWND)p->Win.WndTB,TB_ENABLEBUTTON,Id,MAKELPARAM(b!=-1,0));

		*State = b;

		if (b != -1)
		{
			SendMessage((HWND)p->Win.WndTB,TB_CHECKBUTTON,Id,MAKELPARAM(b,0));

			if (On>=0)
				SendMessage((HWND)p->Win.WndTB,TB_CHANGEBITMAP,Id,MAKELPARAM(p->Win.BitmapNo+(b?On:Off),0));
		}
	}
}

static void SetTrackThumb(HWND Wnd, bool_t State)
{	//return; //暂时
	int Style = GetWindowLong(Wnd,GWL_STYLE);

	if ((Style & TBS_NOTHUMB) != (State?0:TBS_NOTHUMB))
	{
		Style ^= TBS_NOTHUMB;
		SetWindowLong(Wnd,GWL_STYLE,Style);
	}
}

static void UpdateTitleTime(intface* p)
{
	if (p->WndTitle)
	{
		tick_t Time;
		if (p->Player->Get(p->Player,PLAYER_POSITION,&Time,sizeof(tick_t)) == ERR_NONE)
		{
			Time = (Time / TICKSPERSEC) * TICKSPERSEC;
			if (Time<0)
				Time=0;
		}
		else

⌨️ 快捷键说明

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