/** * @file Nave.h * @brief Nave Library Core Header * @remarks NaveGDK ¶óÀ̺귯¸®ÀÇ ¼±¾ðºÎ Header * @author °­µ¿¸í(edith2580@gmail.com) * @date 2009-04-02 */ #pragma once /// °ÅÀÇ »ç¿ëµÇÁö ¾Ê´Â ³»¿ëÀº Windows Çì´õ¿¡¼­ Á¦¿ÜÇÕ´Ï´Ù. #define WIN32_LEAN_AND_MEAN #pragma comment(lib,"winmm.lib") #pragma comment(lib,"imm32.lib") #include #include #include #include #include #include #include #include #include #include "NFTypes.h" #include "NFSingleton.h" /// ¹®ÀÚ¿­ ¾Õ¿¡ LÀ» ¿¬°áÇÏ¿© WCHAR ŸÀÔÀ¸·Î º¯È¯ÇÔ #define WIDEN2(x) L ## x /// CHARÀÇ °ªÀ» WCHAR·Î º¯È¯Çϱâ À§ÇÑ Á¤ÀÇ #define WIDEN(x) WIDEN2(x) /// __FILE__ ÀÇ WCHARÇü Á¤ÀÇ #define __WFILE__ WIDEN(__FILE__) /// __FUNCSIG__ ÀÇ WCHARÇü Á¤ÀÇ #define __WFUNCSIG__ WIDEN(__FUNCSIG__) /// ´ÜÀÏ °´Ã¼ DELETE µðÆÄÀÎ #ifndef _DELETE #define _DELETE(p) { if(p) { delete (p); (p)=NULL; } } #endif /// ¹è¿­Çü °´Ã¼ DELETE µðÆÄÀÎ #ifndef _DELETE_ARRAY #define _DELETE_ARRAY(p) { if(p) { delete[] (p); (p)=NULL; } } #endif /// RELEASE µðÆÄÀÎ #ifndef _RELEASE #define _RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } } #endif /// MAKEINTRESOURCE ÀçÁ¤ÀÇ #define MIS(a) MAKEINTRESOURCEW(a) /// InvalidateRect ÀçÁ¤ÀÇ #define Redraw(hWnd, bErase) InvalidateRect(hWnd, NULL, bErase) /// DWORD ¿¡¼­ Alpha ±¸Çϱâ #define GetAColor(Color) ((BYTE)((Color)>>24)&0xff) /// DWORD ¿¡¼­ Red ±¸Çϱâ #define GetRColor(Color) ((BYTE)((Color)>>16)&0xff) /// DWORD ¿¡¼­ Green ±¸Çϱâ #define GetGColor(Color) ((BYTE)(((WORD)(Color)) >> 8)&0xff) /// DWORD ¿¡¼­ Blue ±¸Çϱâ #define GetBColor(Color) ((BYTE)(Color)&0xff) namespace Nave { /// ¸ÞÀÎ À©µµ¿ì ÇÚµé extern HWND hMainWnd; /// À©µµÀ¸ÀÇ ÀνºÅϽº extern HINSTANCE hInstance; /** * @brief LFH ¸Þ¸ð¸®Ç®À» »ç¿ëÇÑ´Ù * @remarks * Low-Fragmentation HeapÀÇ »ç¿ë \r\n * ÇÁ·Î±×·¥ÀÌ ½ÃÀÛÇÒ¶§ ÇѹøÈ£ÃâÇØÁØ´Ù. \r\n * µð¹ö°Å°¡ ¿¬°áµÇ¸é(F5) µð¹ö±× ÈüÀ» »ç¿ëÇϹǷΠCTRL+F5¸¦ ´­·¯¾ß \r\n * Low-Fragmentation HeapÀÌ »ç¿ëµÇ°í, TRUE°¡ ¸®ÅϵǴ°ÍÀ» ¾Ë¼öÀÖ´Ù. \r\n * \r\n * Low-Fragmentation HeapÀÇ ÀåÁ¡ \r\n * Ưº°È÷ ÇÁ·Î±×·¡¸Ó´Â ½Å°æ¾²Áö ¾Ê¾Æµµ, ¸Þ¸ð¸®Ç®À» »ç¿ë, \r\n * ÇÁ·Î±×·¥ÀÇ ÁúÀ» ³ôÀϼöÀÖ´Ù. \r\n * ¸Þ¸ð¸® ´ÜÆíÈ­¸¦ ¿¹¹æÇÒ¼öÀÖ°í, Èü¸Þ¸ð¸®»ý¼º, »èÁ¦½Ã È¿À²ÀÌ ³ô¾ÆÁø´Ù. \r\n * ƯÈ÷, ¸ÖƼÄÚ¾î ½Ã½ºÅÛ¿¡¼­ ³ôÀº ¼º´ÉÇâ»óÀÌ ÀÖ´Ù. \r\n * \r\n * Low-Fragmentation Heap»ç¿ë½Ã Âü°í \r\n * ÀÌ ÇÔ¼ö°¡ È£ÃâµÇÁö ¾Ê¾Æµµ, ÀÌÄڵ尡 ÀÖÀ¸¸é Win2000Pro Sp4ÀÌ»óÀÇ \r\n * OS¿¡¼­¸¸ µ¿ÀÛÇϹǷÎ, Win98À» Áö¿øÇÏ·Á°í ÇÑ´Ù¸é, ÁÖ¼®È­½ÃÄÑ¾ß ÇÑ´Ù. \r\n * \r\n * ºñ½ºÅ¸´Â ÀÌÇÔ¼ö¸¦ È£ÃâÇÏÁö ¾Ê¾Æµµ ±âº»µ¿ÀÛÇÑ´Ù. \r\n * 16Kº¸´Ù ÀÛÀº ¸Þ¸ð¸®¸¦ ÇÒ´çÇϸé, LFH¿¡ ¸Þ¸ð¸®°¡ ÇÒ´ç, \r\n * ±×ÀÌ»óÀº ±âÁ¸Èü¿¡¼­ ÇÒ´çµÈ´Ù. \r\n */ void EnableLFH(); /** * @brief ÇÁ·Î±×·¥ÀÇ ±¹°¡¾ð¾î Á¤º¸¸¦ ¼³Á¤ÇÕ´Ï´Ù. * @param pLocale ¾ð¾î¸í * @remarks wprintf µî À¯´ÏÄÚµå ¹®ÀÚ¿­À» Äֿܼ¡ Ãâ·ÂÇϱâ À§Çؼ­´Â ·ÎÄÉÀÏ ¼³Á¤À» ÇØ¾ßÇÔ. \r\n * Çѱ¹¾î : Korean \r\n * ¿µ¾î : English \r\n */ void SetLocale(CHAR* pLocale); /** * @brief °ÔÀÓ¿¡¼­ »ç¿ëÇÒ ObjectÀÇ GUID¸¦ ¾ò¾î¿Â´Ù * @return »ý¼ºµÈ GUID°ª 0x00000001 ~ 0xFFFFFFFF ±îÁö */ DWORD GetGUID(); /** * @brief StringÀÇ Å©±âPixelÀ» ±¸ÇÑ´Ù. * @param string »çÀÌÁ ±¸ÇÒ ½ºÆ®¸µ * @param font »ç¿ëÇÒ ÆùÆ® * @return ¾ò¾îÁø StringÀÇ Å©±â */ SIZE GetStringSize( const WCHAR* string, HFONT font ); /** * @brief À©µµ¿ì Ä¿¼­¸¦ °¡Á®¿Â´Ù. * @return MainÀ©µµ¿ì¿¡¼­ÀÇ ¸¶¿ì½º Æ÷Áö¼Ç * @warning Nave::hMainWnd °¡ ¼³Á¤µÇ¾îÀÖ¾î¾ßÇÑ´Ù. */ POINT GetMousePos(); /** * @brief À©µµ¿ì Ä¿¼­¸¦ °¡Á®¿Â´Ù. * @param wnd À©µµ¿ì ÇÚµé * @return À©µµ¿ì¿¡¼­ÀÇ ¸¶¿ì½º Æ÷Áö¼Ç */ POINT GetMousePos( HWND wnd ); /** * @brief ÇöÀç ¸¶¿ì½º°¡ ¾î´À À©µµ¿ì¿¡ ¿Ã¶ó°¡ ÀÖ´ÂÁö * @return ¸¶¿ì½º°¡ Á¸ÀçÇÏ´Â À©µµ¿ìÀÇ ÇÚµé */ HWND IsWindowFromPoint(); /** * @brief ÇöÀç ÇÁ·Î±×·¥ÀÇ À̸§À» ±¸ÇÑ´Ù * @param buf ¾îÇø®ÄÉÀ̼ÇÀÇ À̸§À» ÀúÀåÇÒ ¹öÆÛ * @param len ¹öÆÛÀÇ Å©±â * @return ¾îÇø®ÄÉÀÌ¼Ç À̸§ÀÇ ±æÀÌ */ INT GetProgramName( LPWSTR buf, INT len ); /** * @brief ÇöÀç ÇÁ·Î±×·¥ÀÇ °æ·Î¸¦ ±¸ÇÑ´Ù. * @param buf ¾îÇø®ÄÉÀ̼ÇÀÇ µð·ºÅ丮¸¦ ÀúÀåÇÒ ¹öÆÛ * @param len ¹öÆÛÀÇ Å©±â * @return ¾îÇø®ÄÉÀÌ¼Ç µð·ºÅ丮ÀÇ ±æÀÌ */ INT GetProgramDir( LPWSTR buf, INT len ); /** * @brief Path¿¡¼­ °æ·Î¸¦ ±¸ÇÑ´Ù * @param path °æ·Î Á¤º¸ * @param buf °æ·Î¿¡¼­ ±¸ÇÑ µð·ºÅ丮 * @return µð·ºÅ丮ÀÇ ±æÀÌ */ INT GetDir( LPCWSTR path, LPWSTR buf ); /** * @brief ¹®ÀÚ¿­¿¡¼­ 1LineÀ» ÀоîµéÀδ٠ÇѶóÀÎÀº \nÀ¸·Î ±¸ºÐµÈ´Ù. * @param sBuf ¼Ò½º ¹öÆÛ * @param maxsBuf ¼Ò½º ¹öÆÛ Å©±â * @param tBuf ÀúÀå ¹öÆÛ * @param maxtBuf ÀúÀå ¹öÆÛ Å©±â * @param index ¼Ò½º ¹öÆÛ¿¡¼­ ÀоîµéÀÏ ½ÃÀÛÀ§Ä¡ * @return ¼º°ø¿©ºÎ */ BOOL GetLine( const CHAR* sBuf, INT maxsBuf, CHAR* tBuf, INT maxtBuf, LONG& index ); /** * @brief ¹®ÀÚ¿­À» ÀоîµéÀδÙ. * @param sBuf ¼Ò½º ¹öÆÛ * @param tBuf ÀúÀå ¹öÆÛ * @param len ÀúÀå ¹öÆÛ Å©±â * @param index ¼Ò½º ¹öÆÛ¿¡¼­ ÀоîµéÀÏ ½ÃÀÛÀ§Ä¡ */ VOID GetString( const CHAR* sBuf, CHAR* tBuf, INT len, LONG& index ); /** * @brief 1¹ÙÀÌÆ®¸¦ ÀоîµéÀδÙ. * @param sBuf ¼Ò½º ¹öÆÛ * @param index ¼Ò½º ¹öÆÛ¿¡¼­ ÀоîµéÀÏ ½ÃÀÛÀ§Ä¡ * @return BYTE °á°ú°ª */ BYTE GetByte( const CHAR* sBuf, LONG& index ); /** * @brief 2¹ÙÀÌÆ®¸¦ ÀоîµéÀδÙ. * @param sBuf ¼Ò½º ¹öÆÛ * @param index ¼Ò½º ¹öÆÛ¿¡¼­ ÀоîµéÀÏ ½ÃÀÛÀ§Ä¡ * @return SHORT °á°ú°ª */ SHORT GetShort( const CHAR* sBuf, LONG& index ); /** * @brief 4¹ÙÀÌÆ®¸¦ ÀоîµéÀδÙ. * @param sBuf ¼Ò½º ¹öÆÛ * @param index ¼Ò½º ¹öÆÛ¿¡¼­ ÀоîµéÀÏ ½ÃÀÛÀ§Ä¡ * @return INT °á°ú°ª */ INT GetInt( const CHAR* sBuf, LONG& index ); /** * @brief 4¹ÙÀÌÆ® ÀоîµéÀδÙ. * @param sBuf ¼Ò½º ¹öÆÛ * @param index ¼Ò½º ¹öÆÛ¿¡¼­ ÀоîµéÀÏ ½ÃÀÛÀ§Ä¡ * @return DWORD °á°ú°ª */ DWORD GetDWORD( const CHAR* sBuf, LONG& index ); /** * @brief 4¹ÙÀÌÆ®¸¦ ÀоîµéÀδÙ. * @param sBuf ¼Ò½º ¹öÆÛ * @param index ¼Ò½º ¹öÆÛ¿¡¼­ ÀоîµéÀÏ ½ÃÀÛÀ§Ä¡ * @return FLOAT °á°ú°ª */ FLOAT GetFloat( const CHAR* sBuf, LONG& index ); /** * @brief 8¹ÙÀÌÆ®¸¦ ÀоîµéÀδÙ. * @param sBuf ¼Ò½º ¹öÆÛ * @param index ¼Ò½º ¹öÆÛ¿¡¼­ ÀоîµéÀÏ ½ÃÀÛÀ§Ä¡ * @return DOUBLE °á°ú°ª */ DOUBLE GetDouble( const CHAR* sBuf, LONG& index ); /** * @brief ¹®ÀÚ¿­À» ¼ÂÆÃÇÑ´Ù * @param tBuf ÀúÀå ¹öÆÛ * @param sBuf ÀúÀåÇÒ °ª * @param len ÀúÀåÇÒ ±æÀÌ * @param index ÀúÀå ¹öÆÛ¿¡¼­ ÀúÀåµÉ ½ÃÀÛÀ§Ä¡ */ VOID SetString( CHAR* tBuf, const CHAR* sBuf, INT len, LONG& index ); /** * @brief 1¹ÙÀÌÆ® BYTE¸¦ ¼ÂÆÃÇÑ´Ù. * @param tBuf ÀúÀå ¹öÆÛ * @param sByte ÀúÀåÇÒ °ª * @param index ÀúÀå ¹öÆÛ¿¡¼­ ÀúÀåµÉ ½ÃÀÛÀ§Ä¡ */ VOID SetByte( CHAR* tBuf, BYTE sByte, LONG& index ); /** * @brief 2¹ÙÀÌÆ® SHORT¸¦ ¼ÂÆÃÇÑ´Ù. * @param tBuf ÀúÀå ¹öÆÛ * @param sShort ÀúÀåÇÒ °ª * @param index ÀúÀå ¹öÆÛ¿¡¼­ ÀúÀåµÉ ½ÃÀÛÀ§Ä¡ */ VOID SetShort( CHAR* tBuf, SHORT sShort, LONG& index ); /** * @brief 4¹ÙÀÌÆ® INT¸¦ ¼ÂÆÃÇÑ´Ù. * @param tBuf ÀúÀå ¹öÆÛ * @param sInt ÀúÀåÇÒ °ª * @param index ÀúÀå ¹öÆÛ¿¡¼­ ÀúÀåµÉ ½ÃÀÛÀ§Ä¡ */ VOID SetInt( CHAR* tBuf, INT sInt, LONG& index); /** * @brief 4¹ÙÀÌÆ® DWORD¸¦ ¼ÂÆÃÇÑ´Ù. * @param tBuf ÀúÀå ¹öÆÛ * @param sDword ÀúÀåÇÒ °ª * @param index ÀúÀå ¹öÆÛ¿¡¼­ ÀúÀåµÉ ½ÃÀÛÀ§Ä¡ */ VOID SetDWORD( CHAR* tBuf, DWORD sDword, LONG& index ); /** * @brief 4¹ÙÀÌÆ® FLOAT¸¦ ¼ÂÆÃÇÑ´Ù. * @param tBuf ÀúÀå ¹öÆÛ * @param sFloat ÀúÀåÇÒ °ª * @param index ÀúÀå ¹öÆÛ¿¡¼­ ÀúÀåµÉ ½ÃÀÛÀ§Ä¡ */ VOID SetFloat( CHAR* tBuf, FLOAT sFloat, LONG& index ); /** * @brief 8¹ÙÀÌÆ® double¸¦ ¼ÂÆÃÇÑ´Ù. * @param tBuf ÀúÀå ¹öÆÛ * @param sDouble ÀúÀåÇÒ °ª * @param index ÀúÀå ¹öÆÛ¿¡¼­ ÀúÀåµÉ ½ÃÀÛÀ§Ä¡ */ VOID SetDouble( CHAR* tBuf, DOUBLE sDouble, LONG& index ); /** * @brief ¹®ÀÚ¿­¿¡¼­ 1LineÀ» ÀоîµéÀδ٠ÇѶóÀÎÀº \nÀ¸·Î ±¸ºÐµÈ´Ù. * @param sBuf ¼Ò½º ¹öÆÛ * @param maxsBuf ¼Ò½º ¹öÆÛ Å©±â * @param tBuf ÀúÀå ¹öÆÛ * @param maxtBuf ÀúÀå ¹öÆÛ Å©±â * @param index ¼Ò½º ¹öÆÛ¿¡¼­ ÀоîµéÀÏ ½ÃÀÛÀ§Ä¡ * @return ¼º°ø¿©ºÎ */ BOOL GetLine( const WCHAR* sBuf, INT maxsBuf, WCHAR* tBuf, INT maxtBuf, LONG& index ); /** * @brief ¹®ÀÚ¿­À» ÀоîµéÀδÙ. * @param sBuf ¼Ò½º ¹öÆÛ * @param tBuf ÀúÀå ¹öÆÛ * @param len ÀúÀå ¹öÆÛ Å©±â * @param index ¼Ò½º ¹öÆÛ¿¡¼­ ÀоîµéÀÏ ½ÃÀÛÀ§Ä¡ */ VOID GetString( const WCHAR* sBuf, WCHAR* tBuf, INT len, LONG& index ); /** * @brief 1¹ÙÀÌÆ®¸¦ ÀоîµéÀδÙ. * @param sBuf ¼Ò½º ¹öÆÛ * @param index ¼Ò½º ¹öÆÛ¿¡¼­ ÀоîµéÀÏ ½ÃÀÛÀ§Ä¡ * @return BYTE °á°ú°ª */ BYTE GetByte( const WCHAR* sBuf, LONG& index ); /** * @brief 2¹ÙÀÌÆ®¸¦ ÀоîµéÀδÙ. * @param sBuf ¼Ò½º ¹öÆÛ * @param index ¼Ò½º ¹öÆÛ¿¡¼­ ÀоîµéÀÏ ½ÃÀÛÀ§Ä¡ * @return SHORT °á°ú°ª */ SHORT GetShort( const WCHAR* sBuf, LONG& index ); /** * @brief 4¹ÙÀÌÆ®¸¦ ÀоîµéÀδÙ. * @param sBuf ¼Ò½º ¹öÆÛ * @param index ¼Ò½º ¹öÆÛ¿¡¼­ ÀоîµéÀÏ ½ÃÀÛÀ§Ä¡ * @return INT °á°ú°ª */ INT GetInt( const WCHAR* sBuf, LONG& index ); /** * @brief 4¹ÙÀÌÆ® ÀоîµéÀδÙ. * @param sBuf ¼Ò½º ¹öÆÛ * @param index ¼Ò½º ¹öÆÛ¿¡¼­ ÀоîµéÀÏ ½ÃÀÛÀ§Ä¡ * @return DWORD °á°ú°ª */ DWORD GetDWORD( const WCHAR* sBuf, LONG& index ); /** * @brief 4¹ÙÀÌÆ®¸¦ ÀоîµéÀδÙ. * @param sBuf ¼Ò½º ¹öÆÛ * @param index ¼Ò½º ¹öÆÛ¿¡¼­ ÀоîµéÀÏ ½ÃÀÛÀ§Ä¡ * @return FLOAT °á°ú°ª */ FLOAT GetFloat( const WCHAR* sBuf, LONG& index ); /** * @brief 8¹ÙÀÌÆ®¸¦ ÀоîµéÀδÙ. * @param sBuf ¼Ò½º ¹öÆÛ * @param index ¼Ò½º ¹öÆÛ¿¡¼­ ÀоîµéÀÏ ½ÃÀÛÀ§Ä¡ * @return DOUBLE °á°ú°ª */ DOUBLE GetDouble( const WCHAR* sBuf, LONG& index ); /** * @brief ¹®ÀÚ¿­À» ¼ÂÆÃÇÑ´Ù * @param tBuf ÀúÀå ¹öÆÛ * @param sBuf ÀúÀåÇÒ °ª * @param len ÀúÀåÇÒ ±æÀÌ * @param index ÀúÀå ¹öÆÛ¿¡¼­ ÀúÀåµÉ ½ÃÀÛÀ§Ä¡ */ VOID SetString( WCHAR* tBuf, const WCHAR* sBuf, INT len, LONG& index ); /** * @brief 1¹ÙÀÌÆ® BYTE¸¦ ¼ÂÆÃÇÑ´Ù. * @param tBuf ÀúÀå ¹öÆÛ * @param sByte ÀúÀåÇÒ °ª * @param index ÀúÀå ¹öÆÛ¿¡¼­ ÀúÀåµÉ ½ÃÀÛÀ§Ä¡ */ VOID SetByte( WCHAR* tBuf, BYTE sByte, LONG& index ); /** * @brief 2¹ÙÀÌÆ® SHORT¸¦ ¼ÂÆÃÇÑ´Ù. * @param tBuf ÀúÀå ¹öÆÛ * @param sShort ÀúÀåÇÒ °ª * @param index ÀúÀå ¹öÆÛ¿¡¼­ ÀúÀåµÉ ½ÃÀÛÀ§Ä¡ */ VOID SetShort( WCHAR* tBuf, SHORT sShort, LONG& index ); /** * @brief 4¹ÙÀÌÆ® INT¸¦ ¼ÂÆÃÇÑ´Ù. * @param tBuf ÀúÀå ¹öÆÛ * @param sInt ÀúÀåÇÒ °ª * @param index ÀúÀå ¹öÆÛ¿¡¼­ ÀúÀåµÉ ½ÃÀÛÀ§Ä¡ */ VOID SetInt( WCHAR* tBuf, INT sInt, LONG& index); /** * @brief 4¹ÙÀÌÆ® DWORD¸¦ ¼ÂÆÃÇÑ´Ù. * @param tBuf ÀúÀå ¹öÆÛ * @param sDword ÀúÀåÇÒ °ª * @param index ÀúÀå ¹öÆÛ¿¡¼­ ÀúÀåµÉ ½ÃÀÛÀ§Ä¡ */ VOID SetDWORD( WCHAR* tBuf, DWORD sDword, LONG& index ); /** * @brief 4¹ÙÀÌÆ® FLOAT¸¦ ¼ÂÆÃÇÑ´Ù. * @param tBuf ÀúÀå ¹öÆÛ * @param sFloat ÀúÀåÇÒ °ª * @param index ÀúÀå ¹öÆÛ¿¡¼­ ÀúÀåµÉ ½ÃÀÛÀ§Ä¡ */ VOID SetFloat( WCHAR* tBuf, FLOAT sFloat, LONG& index ); /** * @brief 8¹ÙÀÌÆ® double¸¦ ¼ÂÆÃÇÑ´Ù. * @param tBuf ÀúÀå ¹öÆÛ * @param sDouble ÀúÀåÇÒ °ª * @param index ÀúÀå ¹öÆÛ¿¡¼­ ÀúÀåµÉ ½ÃÀÛÀ§Ä¡ */ VOID SetDouble( WCHAR* tBuf, DOUBLE sDouble, LONG& index ); /** * @brief ¹ÙÀ̳ʸ® Á¤º¸¸¦ Read µéÀÔ´Ï´Ù. * @param sBuf ¼Ò½º ¹öÆÛ * @param tBuf ÀúÀå ¹öÆÛ * @param len ÀÐÀ» ±æÀÌ * @param seek ¼Ò½º ¹öÆÛ¿¡¼­ ÀÐÀ» ½ÃÀÛÀ§Ä¡ */ VOID Read( const char* sBuf, void* tBuf, INT len, LONG& seek ); /** * @brief ¹ÙÀ̳ʸ® Á¤º¸¸¦ Write ÇÕ´Ï´Ù. * @param sBuf ÀúÀå ¹öÆÛ * @param tBuf ÀúÀåÇÒ °ª * @param len ÀúÀåÇÒ ±æÀÌ * @param seek ÀúÀå ¹öÆÛ¿¡¼­ ÀúÀåµÉ ½ÃÀÛÀ§Ä¡ */ VOID Write( const void* sBuf, char* tBuf, INT len, LONG& seek ); }