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

📄 mycmnhdr.h

📁 退火算法的一个演示程序,含有源代码,通过画面演示退火算法的原理!
💻 H
📖 第 1 页 / 共 2 页
字号:
/*
模块名称:MyCmnHdr.h
版    本:0.1 Alpha
版    权:Copyright (C) 2005 wlzqi
模块功能:自定义的常用宏和函数集
作    者:wlzqi
作者邮箱:mailto:wlzqi@3stonesoft.com
建立时间:2005年1月19日 甲申猴年十二月初十
最后修改:wlzqi
修改历程:2005年1月21日  甲申猴年十二月初十一	去掉了 UNICODE 宏定义
		  2005年1月21日  甲申猴年十二月初十二	修改代码为 UNICODE 和 ANSI 通用版 
												改进了 ToWChar 函数
		  2005年2月4日  甲申猴年十二月廿六		增加 求三个数的最大、最小值
注意事项:1.SETDLGICONS 宏 ( 改变对话框图标 ) 要在 VC.net 下编译才有效
		  2.要使用 CTimer 类,请定义 _MY_TIME 宏
备  注:( 参:《核心编程》附A )
		:支持 UNICODE 和 ANSI 编码 
		:测试平台 Windows 2000、IE6、Direcx9、 AMD Xp 2000 + CPU
*/


#pragma once
#include "stdafx.h"

////////////////////////////// Windows的建立 //////////////////////////////////

// 因为可能要使用 Windows 2000 中的新函数、同时也要在 Windows 98 、NT 等多个
// 版本中能够编译,所以使用如下定义

// Windows 2000 中的新函数定义在 Windows 头文件中被定义成如下原形:
// #if ( _WIN32_WINNT_	>= 0x0500 )
// .
// .
// .
// .
// #endif // _WIN32_WINNT_	>= 0x0500

#define _WIN32_WINNT_	0x0500
//#ifdef WINVER
//#undef WINVER
//#define WINVER	0x0500
//#endif

////////////////////////////// 对 UniCode 的建立 //////////////////////////////

//// 如果不是 X86 CPU 则总是使用 UniCode 方式编译
//#ifndef _M_IX86_
//#define UNICODE
//#endif
//
//// 如果需要在 X86 CPU 上编译,请使用这行
////#define UNICODE
//
//// 定义使用 UNICODE 
//#ifdef UNICODE
//#define _UNICODE
//#endif

// 编码
#ifdef UNICODE
#pragma message ( "************** 使用 UNICODE 字符集 ****************" )
#else
#pragma message ( "************** 使用 ANSI 字符集    ****************" )
#endif
// 编译方式
#ifdef _DEBUG
#pragma message ( "************** Debug 版本          ****************" )
#else
#pragma message ( "************** Release 版本        ****************" )
#endif
// 编译器版本
#ifdef _MSC_VER
#if (_MSC_VER >= 1300)
#pragma message ( "************** 编译器版:VC.NET    ****************" )
#else 
#if (_MSC_VER >= 1200 && _MSC_VER < 1300)
#pragma message ( "************** 编译器版:VC 6.0    ****************" )
#else
#pragma message ( "************** 编译器版:VC 5.0 或更低版本 ********" )
#endif
#endif
#endif
// 类库版本
#ifdef _MFC_VER
#if (_MFC_VER >= 0x0700)
#pragma message ( "************** 类库 版本号:7.0    ****************" )
#else 
#if (_MFC_VER >= 0x0421 && _MFC_VER < 0x0700)
#pragma message ( "************** 类库 版本号:4.21   ****************" )
#else
#pragma message ( "************** 类库 版本号:未知   ****************")
#endif
#endif
#endif

#ifdef _WIN64
#pragma message ( "************** 64位程序            ****************" )
#endif

#pragma message ( "************** 最后一次编译日期:"__TIME__" "__DATE__)
#pragma message ( "************** 最后一次修改日期:"__TIMESTAMP__)

//////////////////////////// Include Windows 定义 /////////////////////////////

// 屏蔽第 4 级警告
#pragma warning ( push , 3 )
#include <Windows.h>
#pragma warning ( pop )
#pragma warning ( push , 4 )

////////////////////////////// 校验头文件是否被用 /////////////////////////////

#ifdef WT_EXECUTEINPERSISTENTTHREAD
#pragma message ( "你没有使用最新的 SDK 或 Lib" ) 
#pragma message ( "这可能影响工程正确的编译" )
#endif

/////////////////////////// 屏蔽掉一些无关紧要的警告 //////////////////////////

// 不标准的注释
#pragma warning ( disable : 4001 )
// 未优化的参数
#pragma warning ( disable : 4100 )
// 注意:建立预编译头文件
#pragma warning ( disable : 4699 )
// 函数不能内联
#pragma warning ( disable : 4710 )
// 无关紧要的内联被移除
#pragma warning ( disable : 4514 )
// assignment operator could not be generated
#pragma warning ( disable : 4512 )

////////////////////////////////// MSG帮助宏 //////////////////////////////////

// 当使用如下使用时
// #pragma MSG ( error_info )
// 将提示类似 c:\windows\system32\MyCmnHdr.h(68):error_info
// 可以用来提示注意某一行代码
// 注意使用本宏时,提示的字符串不需要加""

#define STR2(X) #X
#define STR(X) STR2(X) 
#define MSG(desc) message(__FILE__ "(" STR(__LINE__) "):" #desc)

////////////////////////////////// INRANGE 宏 /////////////////////////////////

// 如果返回 TRUE ,表示这个数字在两个数之间

#define INRANGE( Low , Num , High ) ( ( ( Low ) <= ( Num ) ) && ( ( Num ) <= ( High ) ) )

//inline int INRANGE( int Low , int Num ,int High ) { return ( ( Low <= Num ) && ( Num <= High ) ) ; }

////////////////////////////////// DIMOF 宏 ///////////////////////////////////

// 返回数组中元素的数目
#define DIMOF(Array) ( sizeof ( Array ) / sizeof ( Array[0] ) )

////////////////////////////////// DebugBreak 宏 //////////////////////////////

// X86 平台的断点调试改进
#ifdef _X86_
#define DebugBreak() _asm { int 3 }
#endif

/////////////////////////// MAKESOFTWAREEXCEPTION 宏 //////////////////////////

// 建立自己的软件异常

// 异常代码要符合 WinError.h 文件中定义的有关错误代码的规则,每个 DWORD 被划分
// 为如下所示:
//							 错误代码的构成(表 - 1)
// ----------------------------------------------------------------------------
//	位		  31-30			 29			 28			 27-16			 15-0
// ----------------------------------------------------------------------------
//  内		严重系数	 微软/客户		保留		设备代码		异常代码
//	容		0 = 成功	0 - 微软定义	必须		微软定义		微软/客户
//  意		1 = 信息		的代码		为 0		详见下表		 定义
//	义		2 = 警告	1 - 客户定义				  -	2
//			3 = 错误		的代码			
// ----------------------------------------------------------------------------
//							 设备代码及其值(表 - 2)
// ----------------------------------------------------------------------------
//		设备代码 				值		|		设备代码 				值
// ----------------------------------------------------------------------------
//		FACILITY_FULL			0		|	FACILITY_CONTROL			10
//		FACILITY_RPC			1		|	FACILITY_CERT				11
//		FACILITY_DISPATCH		2		|	FACILITY_INTERNET			12
//		FACILITY_STORAGE		3		|	FACILITY_MEDIASERVER		13
//		FACILITY_ITF			4		|	FACILITY_MSMQ				14
//		FACILITY_WIN32			7		|	FACILITY_SETUPAPI			15
//		FACILITY_WINDOWS		8		|	FACILITY_SCARD				16
//		FACILITY_SECURITY		9		|	FACILITY_COMPLUS			17
// ----------------------------------------------------------------------------

// 例如:EXCEPTION_ACCESS_VIOLATION 代码的值为 0xC0000005
//  C		 0		 0		 0		 0		 0		 0		 5
// 1100		0000	0000	0000	0000	0000	0000	0101
// 表示一个存取异常错误(不可恢复)设备代码FACILITY_FULL(存取异常可能发生在
// 系统任何地方,不是特定设备发生的),微软定义该异常代码为 5

#define MAKESOFTWAREEXCEPTION(Severity,Facility,Exception) \
	( ( DWORD ) ( \
	/*严重系数		*/( Severity			) |		\
	/*微软(0)客户(1)*/( 1			<<	29	) |		\
	/*保留必须为0	*/( 0			<<	28	) |		\
	/*设备代码		*/( Facility	<<	16	) |		\
	/*异常代码		*/( Exception	<<	0	) ) )


/////////////////////////////// ToWChar 函数 //////////////////////////////////

// 单字节字符串转换为宽字节

inline WCHAR * ToWChar( PSTR pMultiByteStr )
{
	//该函数是将传统字符串进行转换。

	static WCHAR wszBuffer [MAX_PATH] ;

	wcsset( wszBuffer , 0 ) ;

	int iLenOfWideCharStr = MultiByteToWideChar ( CP_ACP , 0 , 
		pMultiByteStr , -1 , NULL , 0 ) ;


	if ( ! MultiByteToWideChar ( CP_ACP , 0 , pMultiByteStr , -1 , wszBuffer , iLenOfWideCharStr ) )
	{
		return NULL ;
	}

	return wszBuffer ;

}

////////////////////////// 快速对话框显示提示消息 宏 //////////////////////////

// 代替 MessageBox 可以显示出文件的路径

inline void MsgBox ( PCTSTR s )
{
	TCHAR chTemp [MAX_PATH] ;
	GetModuleFileName ( NULL , chTemp , DIMOF ( chTemp ) ) ;
	MessageBox ( GetActiveWindow () , s , chTemp , MB_OK ) ;

}
inline void MsgBox ( bool bfOk, PCTSTR s )
{
	if (!bfOk) {

		TCHAR chTemp [MAX_PATH] ;
		GetModuleFileName ( NULL , chTemp , DIMOF ( chTemp ) ) ;
		MessageBox ( GetActiveWindow () , s , chTemp , MB_OK ) ;
	}

}

inline void DebugMsgBox ( PCTSTR s )
{
#ifdef _DEBUG
	TCHAR chTemp [MAX_PATH] ;
	GetModuleFileName ( NULL , chTemp , DIMOF ( chTemp ) ) ;
	MessageBox ( GetActiveWindow () , s , chTemp , MB_OK ) ;
#endif

}
inline void DebugMsgBox ( bool bfOk, PCTSTR s )
{
#ifdef _DEBUG
	if (!bfOk) {

		TCHAR chTemp [MAX_PATH] ;
		GetModuleFileName ( NULL , chTemp , DIMOF ( chTemp ) ) ;
		MessageBox ( GetActiveWindow () , s , chTemp , MB_OK ) ;
	}
#endif

}

/////////////////////////// myASSERT / myVERIFY 宏 ////////////////////////////

// 自定义代替 ASSERT 和 VERIRY的宏,可以显示错误的文件(包括路径)和行号
// myASSERT 在调试版本中有效,发行版中什么也不做。myVERIFY 在调试版本中作用和
// myASSERT一样,在发行版本中只是对条件进行判断,可用在if条件中

inline void FAIL ( PTSTR pszMsg )
{
	MsgBox ( pszMsg ) ;
	DebugBreak () ;
}

// 定义断言错误消息框
inline void ASSERTFAIL ( LPCSTR lpszfile , int iLine , PCSTR pszException )
{
	TCHAR chTemp [MAX_PATH] ;

#ifdef UNICODE
	_stprintf ( chTemp , _TEXT ( "文件: %S \n行号: %d \n错误原因: %S\n" ) , lpszfile , iLine , pszException ) ;
#else
	_stprintf ( chTemp , _TEXT ( "文件: %s \n行号: %d \n错误原因: %s\n" ) , lpszfile , iLine , pszException ) ;
#endif

	FAIL ( chTemp ) ;

⌨️ 快捷键说明

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