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

📄 asl_utils.cpp

📁 泡泡堂单机版(含ASL游戏引擎源码 泡泡堂单机版(含ASL游戏引擎源码
💻 CPP
字号:
//-----------------------------------------------------------------------------
//
//    ____ Azure Star Game Engine 蓝星游戏引擎 ____
//
//    Copyright (c) 2006, 蓝星工作室
//    All rights reserved.
//
//    文件名称: asl_utils.cpp
//    摘    要: ASL库实用组件实现
//
//    当前版本: 1.0
//    作    者: 汤  祺
//    创建日期: 2006-7-15
//
//-----------------------------------------------------------------------------

#include "asl_utils.h"

namespace ASL
{

//-----------------------------------------------------------------------------
// 函数名: EnableMemoryLeakCheck()
// 功  能: 打开内存泄漏检测(仅Debug版起作用)
// 参  数: [void] - 无
// 返回值: [void] - 无
//-----------------------------------------------------------------------------
void EnableMemoryLeakCheck()
{
#if defined(DEBUG) | defined(_DEBUG)
    _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
#endif
}

//-----------------------------------------------------------------------------
// 函数名: CheckDXVersion8()
// 功  能: 检测DirectX版本是否超过8
// 参  数: [void] - 无
// 返回值: [bool] - DirectX版本是否超过8
//-----------------------------------------------------------------------------
bool CheckDXVersion8(void)
{
	HINSTANCE hD3D8DLL = LoadLibrary("D3D8.DLL");
    if (hD3D8DLL == NULL)
    {
	    return false;
    }
	else
	{
		FreeLibrary(hD3D8DLL);
		return true;
	}
}

//-----------------------------------------------------------------------------
// 函数名: GetAppPath()
// 功  能: 取应用程序路径
// 参  数: [void] - 无
// 返回值: [LPCSTR] - 应用程序路径
//-----------------------------------------------------------------------------
LPCSTR GetAppPath(void)
{
	static char szAppPath[MAX_PATH] = { '\0' };
	if (szAppPath[0] == '\0')
	{
		int i;
		GetModuleFileName(GetModuleHandle(NULL), szAppPath, MAX_PATH);
		for(i = (int)strlen(szAppPath) - 1; i > 0; --i)
		{
			if(szAppPath[i] == '\\')
			{
				break;
			}
		}
		szAppPath[i + 1] = '\0';
	}
	return szAppPath;
}

//-----------------------------------------------------------------------------
// 函数名: GetAbsPath()
// 功  能: 取应用程序目录下某子目录的绝对路径
// 参  数: [szDir] - 子目录名
// 返回值: [LPCSTR] - 子目录的绝对路径
//-----------------------------------------------------------------------------
LPCSTR GetAbsPath(LPCSTR szDir)
{
	static char szAbsPath[MAX_PATH];
	strcpy(szAbsPath, GetAppPath());
	strcat(szAbsPath, szDir);
	return szAbsPath;
}

//-----------------------------------------------------------------------------
// 函数名: IsMMX()
// 功  能: 检测CPU是否支持MMX指令
// 参  数: [void] - 无
// 返回值: [bool] - CPU是否支持MMX指令
//-----------------------------------------------------------------------------
bool IsMMX()
{
	int ismmx = 0;

	__asm
	{
		mov eax, 1
		cpuid
		test edx, 0x00800000
		jz  _notmmx
		mov  ismmx, 1
_notmmx:
	}

	return ismmx == 1;
}

//-----------------------------------------------------------------------------
// 函数名: CreateFontFast()
// 功  能: 快速创建字体
// 参  数: [face] - 字体名称
//          [height] - 文字高度
//          [bold] - 是否粗体
//          [italic] - 是否斜体
//          [underline] - 是否下划线
// 返回值: [HFONT] - 字体句柄
//-----------------------------------------------------------------------------
HFONT CreateFontFast(LPCSTR face, int height, bool bold, bool italic, bool underline)
{
	LOGFONT lf;

	ZeroMemory(&lf, sizeof(LOGFONT));
	strcpy(lf.lfFaceName, face);
	lf.lfHeight = height;
	if (face[0] < 0)
	{
		lf.lfCharSet = GB2312_CHARSET;
	}
	if (bold)
	{
		lf.lfWeight = FW_BOLD;
	}
	if (italic)
	{
		lf.lfItalic = TRUE;
	}
	if (underline)
	{
		lf.lfUnderline = TRUE;
	}	

	return CreateFontIndirect(&lf);
}

//-----------------------------------------------------------------------------
// 函数名: Bit16To64()
// 功  能: 将16位数扩展为64位(拷贝4份)
// 参  数: [val] - 待扩展的16位数
// 返回值: [__int64] - 扩展后的64位数
//-----------------------------------------------------------------------------
__int64 Bit16To64(WORD val)
{
	__int64 bit64 = val;
	return bit64 | (bit64 << 16) | (bit64 << 32) | (bit64 << 48);
}

LPCSTR ASLFileException::GetErrorMessage(void) const
{
	static char szMessage[128];

	switch(m_Cause)
	{
	case Generic:
		sprintf(szMessage, "使用文件 %s 时发生错误", m_szFileName);
		break;
	case OpenFailed:
		sprintf(szMessage, "打开文件 %s 失败", m_szFileName);
		break;
	case WriteFailed:
		sprintf(szMessage, "写文件 %s 失败", m_szFileName);
		break;
	case BadFormat:
		sprintf(szMessage, "文件 %s 格式无效", m_szFileName);
		break;
	}

	return szMessage;
}

LPCSTR ASLDirectXException::GetErrorMessage(void) const
{
	static char szMessage[228];

	switch (m_DirectType)
	{
	case DirectX:
		sprintf(szMessage, "DirectX错误: %s\n错误代号: %d", m_szDesc, m_hr);
		break;
	case DirectDraw:
		sprintf(szMessage, "DirectDraw错误: %s\n错误代号: %d", m_szDesc, m_hr);
		break;
	case DirectMusic:		
		sprintf(szMessage, "DirectMusic错误: %s\n错误代号: %d", m_szDesc, m_hr);
		break;
	case DirectSound:
		sprintf(szMessage, "DirectSound错误: %s\n错误代号: %d", m_szDesc, m_hr);
		break;
	case DirectInput:
		sprintf(szMessage, "DirectInput错误: %s\n错误代号: %d", m_szDesc, m_hr);
		break;
	}

	return szMessage;
}

} // namespace ASL

⌨️ 快捷键说明

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