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

📄 o_display.c

📁 Zoran V966 DVD 解码 Soc芯片的源程序
💻 C
📖 第 1 页 / 共 4 页
字号:
/* **************************************************************************************
*  Copyright (c) 2005 ZORAN Corporation, All Rights Reserved
*  THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF ZORAN CORPORATION
*
*  File: $Workfile: o_display.c$
*
* Description:
* ========
* This component shows status information on the current disc. For a DVD, for example,
* the current title, chapter, audio selection, etc., will be displayed on the
* screen. This component is divided into 8 locations. The information
* displayed in each location depends on the disc type.
****************************************************************************************/
#include "Config.h"		// Global Configuration - do not remove!

#ifdef D_GUI_COMPONENT_DISPLAY
#include "include\sysdefs.h"	// Global definition - do not remove!

/****************************************************************************************************
*	INCLUDE FILES
****************************************************************************************************/
// Include project specific

#include "CoreAPI\CoreAPI.h"

#include "GUI\Menu_system\ms_display.h"
#include "GUI\Menu_system\ms_component.h"
#include "GUI\Menu_system\ms_container.h"
#include "GUI\Menu_system\ms_menu.h"
#include "GUI\Menu_system\ms_screen.h"
#include "GUI\Menu_system\ms_object.h"

#include "Strings\Strings.h"
//#include "DispInfo\DisplayInfo.h"
#include "Library\String_generate.h"

#include "GUI\Object_class\Text\mso_text.h"
#include "GUI\Object_class\Message\mso_message.h"
#include "Components\Message\o_message_device.h"
#include "Components\Display\o_display.h"
#include "GUI\Resource\Bitmap\bitmap.h"
#include "Menu\menu_operation_def.h"
#include "Menu_config\menu_config_common.h"
#ifdef D_GINGER_I86
#include "decoder\osdlayou.h"
#endif //D_GINGER_I86

#ifdef D_GINGER_I96
#include "Osdlayou.h"
#endif //D_GINGER_I96

//#include "decoder\dec_defs.h"
//#include "drive\drv_api.h"

//#include "Version.h"
//#include "drive_setting\feversion.h"
//#include "Playcore\coremain\version.h"
//#include "Playcore\nav_dvd\header\version.h"

//#include "Drive\drv_api.h"

// Include configuration header file: named constants, macros and typedefs.
#include "Components\Display\o_display_config.h"
// Include custom header file: customer specific definitions, over-writing common ones.
#include "Components\Custom\Display\o_display_custom.h"


/****************************************************************************************************
*	DECLARATION: Private (static) functions
****************************************************************************************************/
// The function to handle OPs at the container level:
static MS_OP _ComponentOperation(MSO_OBJECT __NEAR* pThis, MS_OP MsOp, UINT32 lParam);
static void _GetTimeStr(FORMATED_UNICODE_STRING __NEAR* pFormUniStr, UINT32 lParam);
static void _GetDiscTypeStr(FORMATED_UNICODE_STRING __NEAR* pFormUniStr, UINT32 lParam);
#ifdef DVD_VR_SUPPORT
static void _GetDiscNameStr(FORMATED_UNICODE_STRING __NEAR* pFormUniStr, UINT32 lParam);
static void _GetORGTitleStr(FORMATED_UNICODE_STRING __NEAR* pFormUniStr, UINT32 lParam);
static void _GetORGTitleValueStr(FORMATED_UNICODE_STRING __NEAR* pFormUniStr, UINT32 lParam);
#endif//DVD_VR_SUPPORT
static MS_OP _PPTextTickOperation(MSO_OBJECT __NEAR* pThis, MS_OP MsOp, UINT32 lParam);
// This function is used to display the bitmap used as the menu background:
static BOOL	_ComponentFillOsdSeg(MSO_OBJECT __NEAR* pThis, MS_AREA __NEAR* pThisAbsArea);
static BOOL _IsDisplayRefreshAllowed(void);
BOOL _DisplayCurrInfo(MSO_OBJECT __NEAR* pThis);

#ifdef D_GUI_SINGLE_LINE_COMPONENT
void  _GetAvailableIndex(MSO_OBJECT __NEAR* pThis);
BOOL _IsAudioEmpty(void);
BOOL _IsSubTitleEmpty(void);
BOOL _IsAngleEmpty(void);
#endif //D_GUI_SINGLE_LINE_COMPONENT
/**************************************************************************
* 	Display functions
***************************************************************************/
/***************************************************************************************
* 	Include customization file.
****************************************************************************************/

// Include custom code file: customer specific code, over-writing common one.
#include "Components\Custom\Display\o_display_custom.c"
// Include configuration file: constants.
#include "Components\Display\o_display_config.c"



/**************************************************************************
* 	Utility functions
***************************************************************************/

static BOOL _IsDisplayRefreshAllowed(void)
{
	if (MEDIA_TYPE_CLIPS == CoreAPI_GetCurrentMediaType())
	{
		// When Mp3 track in play select Jpeg track to play, Display component will call CoreAPI_GetCurrentClipType()
		// it will retrurn Mp3 type first, but CoreAPI_GetListActiveClipType will be jpeg, In single mode, will make display mess,
		// so need to wait two funtion return same value, then make the display component visible.
		if ((PST_STOP != CoreAPI_GetPlayState())
			&& (CoreAPI_GetListActiveClipType() == CoreAPI_GetCurrentClipType())
			&& !CoreAPI_IsFileLoading())
			return TRUE;
		else
			return FALSE;
	}
	else
		return TRUE;
}

/**************************************************************************
* 	Operation functions
***************************************************************************/

/**************************************************************************
*	Function	:
*	In		:
*	Out 	:
*	Desc	:
***************************************************************************/
static MS_OP _ComponentOperation(MSO_OBJECT __NEAR* pThis, MS_OP MsOp, UINT32 lParam)
{
	MSO_OBJECT __NEAR 	*pObject;
	UINT16 				wAttr;
	MS_OP				*pMsOp;
	#ifdef D_GUI_SINGLE_LINE_COMPONENT
	MSO_DISPLAY __NEAR* pDisObject = (MSO_DISPLAY __NEAR*)pThis;
	MSO_OBJECT	__NEAR*	 PPos1Object = MS_FindDescendant(pThis, &VALUE_OBJECT_DESCRIPTOR(1));
	#endif //D_GUI_SINGLE_LINE_COMPONENT
	

	MsOp = MS_ComponentBasicOperation(pThis, MsOp, lParam);

	// Post-processing:
	switch(MsOp)
	{
		case MS_OP_TICK:
			if (!CoreAPI_IsMenuAllowedDisplay())
			{
				MS_SendOperation(pThis, MS_OP_CLOSE_PARENT, 0);
				break;
			}
			if (MEDIA_TYPE_CLIPS == CoreAPI_GetCurrentMediaType())
			{
				if (_IsDisplayRefreshAllowed())
				{
					if (MS_IsInvisible(pThis))
					{
			#ifdef D_GUI_SINGLE_LINE_COMPONENT
						if ( eClipType_JPEG == CoreAPI_GetCurrentClipType())
						{
							PPos1Object ->moArea.mwW = COL_JPEG_WIDTH;
							pDisObject ->mParam.mwCurrItemNum  = DIS_TITLE_CHAPTER;
							
						}
						else
						{
							PPos1Object ->moArea.mwW = COL_2_WIDTH;
							pDisObject ->mParam.mwCurrItemNum = DIS_ELAPSED_TIME;
						}
						_DisplayCurrInfo(pThis);
			#endif //D_GUI_SINGLE_LINE_COMPONENT
						MS_ClearInvisible(pThis);
						MS_DisplayAddObject(pThis);
					}
				}
				else if(!(eListActive == CoreAPI_GetListPlayState() || eListTransitionToActive == CoreAPI_GetListPlayState())) // avoid jpeg blinking
				{
					// Such track type different switch. such as switch Mpeg to Jpeg.
					if (!MS_IsInvisible(pThis)) 
					{
						MS_SetInvisible(pThis);
						MS_DisplayAddObject(pThis);
					}
				}
			}
			break;

		case MS_OP_ON_DEFROST:
			if (MEDIA_TYPE_CLIPS == CoreAPI_GetCurrentMediaType())
			{
				if (!MS_IsInvisible(pThis))
				{
					MS_SetInvisible(pThis);
					MS_DisplayAddObject(pThis);
				}
			}
			break;

	        case MS_OP_INIT:
			{
				wAttr = MS_ATTR_UPDATE_TICK_START_COUNT;
				for(pObject = ((MSO_COMPONENT __NEAR*)pThis)->mpOlist;	pObject != NULL;pObject = pObject->mpNext)
				{
					pObject->mwAttr = ((pObject->mwAttr & ~MS_ATTR_TICK_MASK) | wAttr);
					wAttr = (wAttr & ~MS_ATTR_TICK_MASK) |((wAttr & MS_ATTR_TICK_MASK) << 1);
					if((wAttr & MS_ATTR_TICK_MASK) == NUMBER_OF_TICKS_PER_UPDATE)
					{
						wAttr = MS_ATTR_UPDATE_TICK_START_COUNT;
					}
				}
			#ifdef D_GUI_SINGLE_LINE_COMPONENT
				if ( eClipType_JPEG == CoreAPI_GetCurrentClipType())
 				{
 					
					PPos1Object ->moArea.mwW = COL_JPEG_WIDTH;
 					pDisObject ->mParam.mwCurrItemNum  = DIS_TITLE_CHAPTER;
 				}
 				else
 				{
					PPos1Object ->moArea.mwW = COL_2_WIDTH;
 					pDisObject ->mParam.mwCurrItemNum = DIS_ELAPSED_TIME;
 				}
 				_DisplayCurrInfo(pThis);
             			pDisObject->mParam.mwCurrItemNum++;
 			#endif //D_GUI_SINGLE_LINE_COMPONENT
         		}
 			break;
 
 		case MS_OP_DISPLAY:
 			{	
 	#ifdef D_GUI_SINGLE_LINE_COMPONENT
 				_GetAvailableIndex(pThis);
 	#endif// D_GUI_SINGLE_LINE_COMPONENT
 				//If nothing else to display, then close component
 				if (_DisplayCurrInfo(pThis))
 				{
 	#ifdef D_GUI_SINGLE_LINE_COMPONENT
 					pDisObject->mParam.mwCurrItemNum++;
 	#endif //D_GUI_SINGLE_LINE_COMPONENT
 					MS_DisplayAddObject(pThis);
 					return MS_OP_NONE;
 				}
 				MS_SendOperation(pThis, MS_OP_CLOSE_PARENT, 0);
 			}
 			return MsOp;
 
 		case MS_OP_IS_MSG_DISPLAYED:
 			// Which message is being asked about?
 			pMsOp = (MS_OP*)lParam;
 
 			// The ones in this switch statement are the only
 			// ones the might be handled by this component.
 			switch(*pMsOp)
 			{
 				case MS_OP_MSG_SYS_AUDIO:
 					// This is displayed for DVD and AVI
 					switch(CoreAPI_GetCurrentMediaType())
 					{
 						case MEDIA_TYPE_DVD_VIDEO:	// FALL THRU
 #ifdef DVD_AUDIO_SUPPORT
 						case MEDIA_TYPE_DVD_AUDIO:						
 #endif
 #ifdef DVD_VR_SUPPORT
 						case MEDIA_TYPE_DVDVR:	
 #endif
 							{
 								*pMsOp = MS_OP_NONE;
 							}
 							break;
 							
 						case MEDIA_TYPE_CLIPS:
 							{
 								if ((eClipType_AVI == CoreAPI_GetCurrentClipType())
 #ifdef IS_MP4_CAPABLE
 								 || (eClipType_MP4 ==  CoreAPI_GetCurrentClipType())
 #endif
 								)
 									*pMsOp = MS_OP_NONE;
 							}
 							break;
 					}
 					break;
 
 				case MS_OP_MSG_SYS_SUBTITLE:
 					// This is displayed for DVD and AVI
 					switch(CoreAPI_GetCurrentMediaType())
 					{
 						case MEDIA_TYPE_DVD_VIDEO:	// FALL THRU
 #ifdef DVD_VR_SUPPORT
 						case MEDIA_TYPE_DVDVR:				
 #endif
 							{
 								*pMsOp = MS_OP_NONE;
 							}
 							break;
 							
 						case MEDIA_TYPE_CLIPS:
 							{
 								if ((eClipType_AVI == CoreAPI_GetCurrentClipType())
 #ifdef IS_MP4_CAPABLE
 								 || (eClipType_MP4 ==  CoreAPI_GetCurrentClipType())
 #endif
 								)
 									*pMsOp = MS_OP_NONE;
 							}
 							break;
 					}
 					break;
 
 				case MS_OP_MSG_SYS_ANGLE:
 					// This is displayed for DVD and AVI
 					switch(CoreAPI_GetCurrentMediaType())
 					{
 						case MEDIA_TYPE_DVD_VIDEO:	// FALL THRU
 							{
 								*pMsOp = MS_OP_NONE;
 							}	
 							break;
 							
 						case MEDIA_TYPE_CLIPS:
 							{
 								if ((eClipType_AVI == CoreAPI_GetCurrentClipType())
 #ifdef IS_MP4_CAPABLE
 								 || (eClipType_MP4 ==  CoreAPI_GetCurrentClipType())
 #endif
 								)
 									*pMsOp = MS_OP_NONE;
 							}
 							break;
 					}
 					break;
 
 #ifdef DVD_AUDIO_SUPPORT
 				case MS_OP_MSG_SYS_DVDA_PAGE:
 					// This is displayed for DVDA
 					switch(CoreAPI_GetCurrentMediaType())
 					{
 						case MEDIA_TYPE_DVD_AUDIO:
 							*pMsOp = MS_OP_NONE;
 							break;
 					}
 					break;
 #endif
 			}
 			break;
 	}
 	return(MsOp);
 }
 /**************************************************************************
 *	Function	: 			_DisplayCurrInfo
 *	In		:
 *	Out 	:
 *	Desc	:
 ***************************************************************************/
 #ifdef D_GUI_SINGLE_LINE_COMPONENT
 void  _GetAvailableIndex(MSO_OBJECT __NEAR* pThis)
 {
 	MSO_DISPLAY __NEAR* pObject = (MSO_DISPLAY __NEAR*)pThis;
 
 	if (pObject->mParam.mwCurrItemNum == DIS_AUDIO_DISPLAY)
 	{
 		//If Audio no information no need to display.
 		if (_IsAudioEmpty())
 			pObject->mParam.mwCurrItemNum++;
 	}
 				
 	if(pObject->mParam.mwCurrItemNum == DIS_SUBTITLE_DISPLAY)
 	{
 		//If subtitle and Angle empty no need to display.
 		if (_IsSubTitleEmpty())
 			pObject->mParam.mwCurrItemNum++;
 	}
	 if(pObject->mParam.mwCurrItemNum == DIS_ANGLE_DISPLAY)
 	{
 		//If subtitle and Angle empty no need to display.
 		if (_IsAngleEmpty())
 			pObject->mParam.mwCurrItemNum++;
 	}
 }
 #endif //D_GUI_SINGLE_LINE_COMPONENT
 /**************************************************************************
 *	Function	: 			_DisplayCurrInfo
 *	In		:
 *	Out 	:
 *	Desc	:
 ***************************************************************************/
 #pragma argsused
 BOOL _DisplayCurrInfo(MSO_OBJECT __NEAR* pThis)
 			{
 			
 #ifdef D_GUI_SINGLE_LINE_COMPONENT
 
 	MSO_DISPLAY __NEAR* pObject = (MSO_DISPLAY __NEAR*)pThis;
 	//TODO if current information is empty will check next, do (pObject->mParam.mwCurrItemNum++).
 	switch(pObject->mParam.mwCurrItemNum)
 	 {
 	 	case DIS_ELAPSED_TIME:
 			{
 		  		MS_ClearInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&oCurrentTimeTxtDescriptor));
 				MS_ClearInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&oElapseTimeTitleDescriptor));
 			 	MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&TEXT_OBJECT_DESCRIPTOR(1)));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&VALUE_OBJECT_DESCRIPTOR(1)));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&TEXT_OBJECT_DESCRIPTOR(2)));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&VALUE_OBJECT_DESCRIPTOR(2)));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&TEXT_OBJECT_DESCRIPTOR(3)));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&VALUE_OBJECT_DESCRIPTOR(3)));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&TEXT_OBJECT_DESCRIPTOR(4)));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&VALUE_OBJECT_DESCRIPTOR(4)));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&TEXT_OBJECT_DESCRIPTOR(5)));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&VALUE_OBJECT_DESCRIPTOR(5)));
 				
 				break;
 			}
 		case DIS_TITLE_CHAPTER:
 			{
 				
 			 	MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&oCurrentTimeTxtDescriptor));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&oElapseTimeTitleDescriptor));
 			 	MS_ClearInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&TEXT_OBJECT_DESCRIPTOR(1)));
 				MS_ClearInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&VALUE_OBJECT_DESCRIPTOR(1)));
 				MS_ClearInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&TEXT_OBJECT_DESCRIPTOR(2)));
 				MS_ClearInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&VALUE_OBJECT_DESCRIPTOR(2)));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&TEXT_OBJECT_DESCRIPTOR(3)));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&VALUE_OBJECT_DESCRIPTOR(3)));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&TEXT_OBJECT_DESCRIPTOR(4)));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&VALUE_OBJECT_DESCRIPTOR(4)));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&TEXT_OBJECT_DESCRIPTOR(5)));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&VALUE_OBJECT_DESCRIPTOR(5)));
 				
 				break;
 			}
 		case DIS_AUDIO_DISPLAY:
 			{
 				
 			 	MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&oCurrentTimeTxtDescriptor));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&oElapseTimeTitleDescriptor));
 			 	MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&TEXT_OBJECT_DESCRIPTOR(1)));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&VALUE_OBJECT_DESCRIPTOR(1)));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&TEXT_OBJECT_DESCRIPTOR(2)));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&VALUE_OBJECT_DESCRIPTOR(2)));
 				MS_ClearInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&TEXT_OBJECT_DESCRIPTOR(3)));
 				MS_ClearInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&VALUE_OBJECT_DESCRIPTOR(3)));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&TEXT_OBJECT_DESCRIPTOR(4)));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&VALUE_OBJECT_DESCRIPTOR(4)));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&TEXT_OBJECT_DESCRIPTOR(5)));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&VALUE_OBJECT_DESCRIPTOR(5)));
 				
 				break;
 			}
 			
 		case DIS_SUBTITLE_DISPLAY:
 			{
 				
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&oCurrentTimeTxtDescriptor));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&oElapseTimeTitleDescriptor));
 			 	MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&TEXT_OBJECT_DESCRIPTOR(1)));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&VALUE_OBJECT_DESCRIPTOR(1)));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&TEXT_OBJECT_DESCRIPTOR(2)));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&VALUE_OBJECT_DESCRIPTOR(2)));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&TEXT_OBJECT_DESCRIPTOR(3)));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&VALUE_OBJECT_DESCRIPTOR(3)));
 				MS_ClearInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&TEXT_OBJECT_DESCRIPTOR(4)));
 				MS_ClearInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&VALUE_OBJECT_DESCRIPTOR(4)));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&TEXT_OBJECT_DESCRIPTOR(5)));
 				MS_SetInvisible(MS_FindObjectFromDescriptor( (MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&VALUE_OBJECT_DESCRIPTOR(5)));
 			
 				break;
 			}
		 case DIS_ANGLE_DISPLAY:
 			{
 				

⌨️ 快捷键说明

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