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

📄 mycmnhdr.h

📁 退火算法的一个演示程序,含有源代码,通过画面演示退火算法的原理!
💻 H
📖 第 1 页 / 共 2 页
字号:
}

// myASSERT 宏
#ifdef _DEBUG
#define myASSERT(X) if ( ! ( X ) ) ASSERTFAIL ( __FILE__ , __LINE__ , #X )
#else 
#define myASSERT(X)
#endif

// myVERIFY 宏
#ifdef _DEBUG
#define myVERIFY(X) myASSERT(X)
#else 
#define myVERIFY(X) (X)
#endif

/////////////////////////// SETDLGICONS 宏 ////////////////////////////////////

// 设置对话框图标 宏
// 注意:此宏只能用在VC.net中,_MSC_VER 编译器版本宏,1300代表VC.net

#if ( _MSC_VER >= 1300 ) 			

#pragma warning ( disable : 4312 )

inline void SETDLGICONS ( HWND hWnd , int iID )
{
	SendMessage ( hWnd , WM_SETICON , TRUE , 
		( LPARAM ) LoadIcon ( ( HINSTANCE ) GetWindowLongPtr ( hWnd , GWLP_HINSTANCE ) ,
		MAKEINTRESOURCE ( iID ) ) ) ;

	SendMessage ( hWnd , WM_SETICON , FALSE , 
		( LPARAM ) LoadIcon ( ( HINSTANCE ) GetWindowLongPtr ( hWnd , GWLP_HINSTANCE ) ,
		MAKEINTRESOURCE ( iID ) ) ) ;
}

#pragma warning ( default : 4312 )

#endif

/////////////////////////// UNICODECHECK 宏 ///////////////////////////////////

// 如果在不支持 UNICODE 的系统中编译 Unicode 编码的程序,则打印错误并退出程序

#ifdef UNICODE

class CUnicodeSupported {
public:
	CUnicodeSupported ()
	{
		if ( GetWindowsDirectoryW ( NULL , 0 ) <= 0 )
		{
			MsgBox ( _TEXT ( "程序不能在不支持 Unicode 的系统中运行" )  ) ;
			ExitProcess ( 0 ) ;
		}
	}
} ;

// 使用静态的全局对象就不用在自己的程序中添加额外的代码,程序启动时会自动调用
// 对象的构造函数
// 如果探测到系统完全支持 Unicode 构造函数返回而程序继续执行
// 对于非 Unicode 的程序建立,也不需要实例化上述 C++ 类,程序只管运行就是
static CUnicodeSupported g_UnicodeSupported ;

#endif

////////////////////// 强制链接程序寻找 WinMain 进入点函数 ////////////////////

// 用法中文介绍参见:VC 6 预处理器参考手册 58 页 Linker 

#pragma comment ( linker , "/subsystem:Windows" )

/////////////////////////////// 常用宏介绍 ////////////////////////////////////

// 得到文件最后修改日期 宏
// _MSC_VER			编译器版本宏 。	e.g. 1300 代表 VC.net ; 1200 代表 VC 6.0
// _MFC_VER			Microsoft Founndation 类库 版本号 类库 0x0700 代表 Version 7
//					类库 4.21 定义为 0x0421,它总是定义的
// __DATE__			当前文件编译日期
// __FILE__			当前文件名
// __LINE__			当前行号
// __TIME__			最后一次编译时间
// __TIMESTAMP__	最后一次修改日期
// _ATL_VER			ATL 版本号
// _DEBUG			Debug 版本
// _DLL				指定 /MD or /MDd (Multithread DLL) 方式编译
// __M_ALPHA		为 DEC ALPHA 平台定义,使用ALPHA编译器时定义为1,否则不定义
// __M_IX86			为 x86 处理器定义
// __M_MPPC			为 Power Macintosh 平台定义,缺省为 601( /QP601 )
// __M_MRX000		为 MIPS 平台定义,缺省为 4000( /QMR4000 )
// __M_PPC			为 PowerPC 平台定义,缺省为 604( /QP604 )
// __MT				当指定 /MD 或 /MDd ( 多线程DLL ) 或 /MT 或 /MTd ( 多线程 ) 选项时定义
// 详情请参:MSDN
// MSDN2003 VS.net 地址:ms-help://MS.MSDNQTR.2003FEB.2052/vclang/html/_PREDIR_Predefined_Macros.htm
// 中文参考:VC 6 预处理器参考手册 44 页

/////////////////////////////// INRANDOM 宏 ///////////////////////////////////

// 产生规定范围内的随机数
// 如果需要真正的随机数,只需要设定随机因子,如下:
// #include <time.h>		// for time ( 0 ) 
// #include <stdlib.h>		// for srand ( )
// srand ( time ( 0 ) ) ;

#define INRANDOM( min , max ) ( ( rand() % ( int ) ( ( ( max ) + 1 ) - ( min ) ) ) + ( min ) )

/*
const int INRANDOM ( int min , int max )
{
	return ( ( rand () % ( ( max + 1 ) - min ) ) + min ) ;
}
*/

/////////////////////////////// CTimer 类 /////////////////////////////////////

// 计算时间间隔
// 使用举例:( 计算 Sleep 延时 1000 ms 的精确时间 )
// CTimer time ;
// Sleep ( 1000 ) ;
// double timer = time.End () ;

#ifdef _MY_TIME

class CTimer
{
public:
	inline CTimer( void )
	{
		QueryPerformanceFrequency(&m_Frequency);
		QueryPerformanceCounter(&m_StartCount);
	}
	inline double End( void ) const
	{
		LARGE_INTEGER CurrentCount;
		QueryPerformanceCounter(&CurrentCount);
		return double(CurrentCount.LowPart - m_StartCount.LowPart) / (double)m_Frequency.LowPart;
	}
	inline void Reset( void )
	{
		QueryPerformanceCounter(&m_StartCount);
	}
private:
	LARGE_INTEGER m_Frequency;
	LARGE_INTEGER m_StartCount;
};

#endif

/////////////////////////// FormatErrMsg //////////////////////////////////////

// 格式化错误消息,消息号为 GetLastError () 返回的消息号

inline PTSTR FormatErrMsg ( DWORD dwErrorCode )
{
	// 错误消息句柄缓存
	HLOCAL hlocal = NULL ; 

	// 得到消息号的原文描述
	BOOL fOK = FormatMessage ( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER ,
		NULL , dwErrorCode , MAKELANGID ( LANG_ENGLISH , SUBLANG_ENGLISH_US ) ,
		( PTSTR ) & hlocal , 0 , NULL ) ;

	if( !fOK )
	{
		// 如果得到消息号的原文描述出错,则分析是否与网络有关 ( network )
		HMODULE hDll = LoadLibraryEx ( TEXT ( "netmsg.dll" ) , NULL ,
			DONT_RESOLVE_DLL_REFERENCES ) ;

		if( hDll != NULL )
		{
			FormatMessage ( FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_FROM_SYSTEM ,
				hDll , dwErrorCode , MAKELANGID ( LANG_ENGLISH , SUBLANG_ENGLISH_US ) ,
				( PTSTR ) & hlocal , 0 , NULL ) ;

			FreeLibrary ( hDll ) ;
		}
		else 
		{
			return ( TEXT ( "netmsg.dll found not" ) ) ;
		}
	}

	if( hlocal != NULL )
	{
		return ( LPTSTR ) LocalLock ( hlocal ) ;
	}
	else
	{
		return ( TEXT ( "Error number not found" ) ) ;
	}

	return ( PTSTR ) LocalLock ( hlocal ) ;
}

#define FORMATERRMSG FormatErrMsg ( GetLastError () )

/////////////////////////// 改变程序权限 //////////////////////////////////////

// 获得调试权限
/*
*	函数名称:bool EnablePrivilege(LPCTSTR lpszPrivilegeName,bool bEnable)
*	函数类型:bool
*	参数说明:lpszPrivilegeName,特权级别
*			  bEnable,是否获得特权。TRUE---获得、FALSE---取消
*	功    能:获得进程的权限(特权)
*	说    明:系统默认有下列特权:
*				SE_ASSIGNPRIMARYTOKEN_NAME 
*				SE_AUDIT_NAME 
*				SE_BACKUP_NAME 
*				SE_CHANGE_NOTIFY_NAME 
*				SE_CREATE_PAGEFILE_NAME 
*				SE_CREATE_PERMANENT_NAME 
*				SE_CREATE_TOKEN_NAME 
*				SE_DEBUG_NAME 
*				SE_INC_BASE_PRIORITY_NAME 
*				SE_INCREASE_QUOTA_NAME 
*				SE_LOAD_DRIVER_NAME 
*				SE_LOCK_MEMORY_NAME 
*				SE_PROF_SINGLE_PROCESS_NAME 
*				SE_RESTORE_NAME 
*				SE_SECURITY_NAME 
*				SE_SHUTDOWN_NAME 
*				SE_SYSTEM_ENVIRONMENT_NAME 
*				SE_SYSTEM_PROFILE_NAME 
*				SE_SYSTEMTIME_NAME 
*				SE_TAKE_OWNERSHIP_NAME 
*				SE_TCB_NAME 
*				SE_UNDOCK_NAME 
*			  MSDN关键字:SE_DEBUG_NAME
*/
inline bool EnablePrivilege( LPCTSTR lpszPrivilegeName , bool bEnable)
{
	HANDLE									hToken				;
    TOKEN_PRIVILEGES						tp					;
    LUID									luid				;
	
    if( ! OpenProcessToken( GetCurrentProcess() , TOKEN_ADJUST_PRIVILEGES |
        TOKEN_QUERY | TOKEN_READ,&hToken ) )
	{
        return FALSE ;
	}

    if( ! LookupPrivilegeValue( NULL , lpszPrivilegeName , &luid ) )
	{
        return TRUE ;
	}
	
    tp.PrivilegeCount			= 1		;
    tp.Privileges[0].Luid		= luid	;
    tp.Privileges[0].Attributes = ( bEnable ) ? SE_PRIVILEGE_ENABLED : 0 ;
	
    AdjustTokenPrivileges( hToken , FALSE , &tp , NULL , NULL , NULL ) ;
	
    CloseHandle( hToken ) ;
	
    return ( GetLastError() == ERROR_SUCCESS ) ;
}

//////////////////////////////// MAX3 /////////////////////////////////////////
// 求三个数中的最大数

// #define MAX3 ( a , b , c ) ( ( a > b ? a : b ) > c ? ( a > b ? a : b ) : c )

inline float MAX3 ( float a , float b , float c )
{
	return ( ( a > b ? a : b ) > c ? ( a > b ? a : b ) : c ) ;
}

inline int MAX3 ( int a , int b , int c )
{
	return ( ( a > b ? a : b ) > c ? ( a > b ? a : b ) : c ) ;
}

inline double MAX3 ( double a , double b , double c )
{
	return ( ( a > b ? a : b ) > c ? ( a > b ? a : b ) : c ) ;
}

//////////////////////////////// MIN3 /////////////////////////////////////////
// 求三个数中的最小数

// #define MIN3 ( a , b , c ) ( ( a < b ? a : b ) < c ? ( a < b ? a : b ) : c )

inline float MIN3 ( float a , float b , float c )
{
	return ( ( a < b ? a : b ) < c ? ( a < b ? a : b ) : c ) ;
}

inline int MIN3 ( int a , int b , int c )
{
	return ( ( a < b ? a : b ) < c ? ( a < b ? a : b ) : c ) ;
}

inline double MIN3 ( double a , double b , double c )
{
	return ( ( a < b ? a : b ) < c ? ( a < b ? a : b ) : c ) ;
}



/////////////////////////// 文件到此结束 //////////////////////////////////////

⌨️ 快捷键说明

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