<°´Ã¼¿¡ ÅøÆÁ´Þ±â>

¿ì¼± ÅøÆÁÀ» ´Þ±â À§ÇØ, ÅøÆÁÀ» ¾Ë¾Æ¼­ ó¸®ÇØ ÁÖ´Â CToolTipCtrlÀ̶ó´Â Ŭ·¡½º·Î °´Ã¼¸¦ Çϳª ¸¸µì´Ï´Ù.

Áï, ´ÙÀ̾ó·Î±×ÀÇ Çì´õ ÆÄÀÏ¿¡¼­, ´ÙÀ̾ó·Î±× Ŭ·¡½º ¾È¿¡ ´ÙÀ½°ú °°Àº º¯¼ö¸¦ ¸¸µé¸é  µÇ°ÚÁÒ.

CToolTipCtrl m_ToolTip;

±×¸®°í ´ÙÀ̾ó·Î±×ÀÇ OnInitDialog()¿¡¼­ ¿øÇϽô ¹öÆ°À̳ª, ÄÁÆ®·ÑµéÀ» ÀÌ ÅøÆÁ º¯¼ö¿¡ ÀÔ·ÂÇÏ½Ã¸é µË´Ï´Ù.

À̶§, CToolTipCtrlÀÇ AddTool()À̶ó´Â ÇÔ¼ö¸¦ »ç¿ëÇϰԵ˴ϴÙ.

ÀÌ ÇÔ¼ö¸¦ µµ¿ò¸»¿¡¼­ ã¾Æº¸¸é ´ÙÀ½°ú °°ÀÌ ³ª¿É´Ï´Ù.

BOOL AddTool( CWnd* pWnd, LPCTSTR lpszText = LPSTR_TEXTCALLBACK,
              LPCRECT lpRectTool = NULL, UINT nIDTool = 0 );

¿©±â¼­ ´Ù¸¥ °Ç º¼ °Å ¾ø±¸, ù¹ø° °Í°ú µÎ¹ø° °Í¸¸ º¸½Ã¸é µË´Ï´Ù.
ù¹ø° ÀÎÀÚ´Â, ÅøÆÁÀ» ´Þ°í ½ÍÀº ÄÁÆ®·ÑÀÇ À©µµ¿ì Æ÷ÀÎÅÍÀÔ´Ï´Ù.
µÎ¹ø° ÀÎÀÚ´Â, ÅøÆÁÀ¸·Î Ãâ·ÂÇÏ°í ½ÍÀº ÅؽºÆ®¿¹¿ä.

¸¸¾à ´ÙÀ̾ó·Î±×¿¡ IDC_TIPBUTTONÀ̶ó´Â ¹öÆ°ÀÌ ÀÖ°í, ÀÌ ¹öÆ°¿¡ "ÅøÆÁ"À̶ó´Â ÅøÆÁÀ» ³Ö°í ½Í´Ù¸é ¾Æ·¡¿Í °°ÀÌ ÇÏ½Ã¸é µÇ°ÚÁÒ.

m_ToolTip.AddTool(GetDlgItem(IDC_TIPBUTTON), "ÅøÆÁ");
....

ÀÌ·¸°Ô ÇÑ ´ÙÀ½ ÇÑ°¡Áö ´õ ÇØÁà¾ß ÇÒ°Ô ÀÖ½À´Ï´Ù.
¸¶¿ì½ºÀÇ ¿òÁ÷ÀÓÀ» ÅøÆÁ º¯¼ö¿¡°Ô ¾Ë·ÁÁà¾ß Çϰŵç¿ä.
±×·¡¾ß ÅøÆÁÀ» Ãâ·ÂÇØ¾ß ÇÏ´Â Áö ÆÇ´ÜÇÒ°Å ¾Æ´Õ´Ï±î?

±×·¡¼­ ´ÙÀ½°ú °°ÀÌ PreTranslateMessage()¶ó´Â ÇÔ¼ö¿¡ Äڵ带 ³ÖÀ¸½Ã¸é µË´Ï´Ù.
 
PreTranslateMessage(MSG* pMsg)
{
   // TODO: Add your specialized code here and/or call the base class
   switch(pMsg->message)
   {
      case WM_LBUTTONDOWN:
      case WM_LBUTTONUP:
      case WM_MOUSEMOVE:
             m_ToolTip.RelayEvent(pMsg);
             break;
      default:
             break;
   }

   return CDialog::PreTranslateMessage(pMsg);
}

 

<Çϵ忡¼­ ƯÁ¤ÆÄÀÏã±â>

//[*]-----------------------------------------------------[*]
#include "direct.h"
//[*]-----------------------------------------------------[*]

void ViewFileInfo(struct _finddata_t &info)
{
    char   CurrentDir[200];
    GetCurrentDirectory(200,CurrentDir);
    printf("%s\\%s ---- Size : %9ld Attrib : ",CurrentDir, info.name, info.size);
    printf((info.attrib & _A_RDONLY ) ? "R":"-");
    printf((info.attrib & _A_SYSTEM ) ? "S":"-");
    printf((info.attrib & _A_HIDDEN ) ? "H":"-");
    printf((info.attrib & _A_ARCH   ) ? "A":"-");
    printf("\n");
}

//[*]-----------------------------------------------------[*]
void SearchFile(char *Ext, bool SubDirSearch = false)
{
    struct _finddata_t c_file;    
    long    hFile;
        
    //  È­ÀÏ °Ë»ç
    if((hFile = _findfirst( Ext, &c_file )) != -1L )   {
        ViewFileInfo(c_file);
        while(!_findnext( hFile, &c_file ))   ViewFileInfo(c_file);
       _findclose( hFile );
    }
        
    if(!SubDirSearch)   return;
    //  ¼­ºê µð·ºÅ丮 °Ë»ç
    if((hFile = _findfirst("*.*", &c_file )) != -1L )  {
        if(c_file.attrib & _A_SUBDIR)   {
            if(strcmp(c_file.name,".")!=0 && strcmp(c_file.name, "..")!=0)  {
               _chdir(c_file.name);
                SearchFile(Ext);        // Á¦±ÍÀû È£Ãâ ...
               _chdir("..");
            }
        }
        while(!_findnext( hFile, &c_file ))  {
            if(c_file.attrib & _A_SUBDIR)        {
                if(strcmp(c_file.name,".")!=0 && strcmp(c_file.name, "..")!=0)   {
                   _chdir(c_file.name);
                    SearchFile(Ext);    // Á¦±ÍÀû È£Ãâ ...
                   _chdir("..");
                }
            }
        }
       _findclose( hFile );
    }
}

//[*]-----------------------------------------------------[*]
void test()
{
    _chdir("F:\\");
    SearchFile("*.cpp", true);
}
//[*]-----------------------------------------------------[*]

 

<´Ü ÇÑ°³ÀÇ ÇÁ·Î±×·¥¸¸ ½ÇÇàÇϱâ>

    ´ëºÎºÐÀÇ À©µµ ÇÁ·Î±×·¥Àº µ¿½Ã¿¡ ¿©·¯ °³ÀÇ ÀνºÅϽº°¡ ¼öÇàµÉ ¼ö ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ ´ÜÁö ÇÑ °³ÀÇ ÇÁ·Î±×·¥¸¸ ½ÇÇàÇØ¾ß ÇÏ´Â °æ¿ìµµ ÀÖ½À´Ï´Ù. ÀÌ¹Ì ÀÚ½ÅÀÌ ½ÇÇàµÇ°í ÀÖ´ÂÁöÀÇ ¿©ºÎ´Â InitInstance()ÇÔ¼ö¿¡¼­ üũÇÏ°í ±× °á°ú¿¡ ´ëÇÑ Ã³¸®¸¦ ÇÒ ¼ö ÀÖ½À´Ï´Ù.

    BOOL CMyApp::InitInstance()
    {
        HANDLE hMutex = NULL;
        hMutex = CreateMutex(NULL,TRUE,"PreventSecondInstanceRunning");
        if (GetLastError() == ERROR_ALREADY_EXISTS)
        {
            AfxMessageBox("ÀÌ¹Ì ½ÇÇàµÇ°í ÀÖ½À´Ï´Ù.");
        }
    }

    À©µµ¿¡¼­´Â CreateMutex() ¶ó´Â °£´ÜÇÑ ÇÔ¼ö°¡ ÀÖ½À´Ï´Ù.
    ¿©±â¼­ 3¹ø° ÀÎÀÚÀÎ ¹®ÀÚ¿­ÀÌ Áß¿äÇÕ´Ï´Ù.
    "PreventSecondInstanceRunning"À» ºñ±³ÇÏ¿© °°Àº ÇÁ·Î±×·¥ÀÎÁö È®ÀÎÇÏ°Ô µË´Ï´Ù. ÁÖÀÇÇÒ »çÇ×Àº "Running"°ú °°Àº ´Ü¼øÇÑ ¹®ÀÚ¿­À»  ÀÌ¿ëÇÑ´Ù¸é...  ´Ù¸¥ ÇÁ·Î±×·¥µµ ÀÚ±â ÀÚ½ÅÀÎ °Íó¾ö ¿ÀÀÎÇÒ¼ö ÀÖ½À´Ï´Ù.

 

<ÆÄÀÏ Ã£¾Æº¸±â ±â´É ±¸Çö>

´Ù¸§ÀÌ ¾Æ´Ï¶ó Á¦°¡ ¸¸µç ´ÙÀ̾ó·Î±×¿¡ ÆÄÀÏÀ» ã¾Æº¸±â¶ó´Â ÀÖ´Â ¹öÆ°À» ¸¸µé°í ½ÍÀºµ¥ ¾îµð¼­ºÎÅÍ Á¢±ÙÀ» ÇÏÁÒ? À©µµ¿¡¼­ µðÆúÆ®·Î Á¦°øÇØÁִ ã¾Æº¸±â±â´ÉÀÌ¿ä!  

void CDirectorisFiles::FindFiles(TCHAR* pszPath)
{
     WIN32_FIND_DATA fData;
     TCHAR szDestTempPath[MAX_PATH];

     memset(szDestTempPath, 0x00, MAX_PATH);
     // ¼±ÅÃµÈ Æú´õ°¡ ·çÆ®À̸é
     SetMakePath(pszPath, szDestTempPath);
     HANDLE hFindFile = FindFirstFile(szDestTempPath, &fData);

     if(hFindFile == INVALID_HANDLE_VALUE) {
          SPB_SystemMessage(GetLastError());
     }

     while(1) {
          if(FindNextFile(hFindFile, &fData)) {
               if(!lstrcmp(fData.cFileName, "..")) continue;
               else if( fData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
                    TCHAR szPath[MAX_PATH];
                    memset(szPath, 0x00, MAX_PATH);
                    int nLen = lstrlen(pszPath);
                    if(nLen <= 3)
                         wsprintf(szPath, "%s%s", pszPath, fData.cFileName);
                    else
                         wsprintf(szPath, "%s\\%s", pszPath, fData.cFileName);
                         FindFiles(szPath);
               } else {
                     // TRACE("File Find Func : %s\\%s\n", pszPath, fData.cFileName);
                     // µð·ºÅ丮 ¹× ¶ó
                     int nLen1 = strlen(pszPath);
                     int nLen2 = strlen(fData.cFileName);

                     m_pFileName[m_nFileCount].szDirName = (TCHAR*)malloc(nLen1+1);
                     m_pFileName[m_nFileCount].szFile = (TCHAR*)malloc(nLen2+1);

                     memset(m_pFileName[m_nFileCount].szDirName, 0x00, nLen1+1);
                     memset(m_pFileName[m_nFileCount].szFile, 0x00, nLen2+1);

                     lstrcpy(m_pFileName[m_nFileCount].szDirName, pszPath);
                     lstrcpy(m_pFileName[m_nFileCount].szFile, fData.cFileName);

                     m_nFileCount++;
               }
          }
          else break;
     }

     FindClose(hFindFile);
}

À§ Äڵ带 Á¶±Ý¸¸ ¼öÁ¤ÇÏ¸é µË´Ï´Ù..
 

<¹ÙÅÁÈ­¸éÀÇ ¿ùÆäÀÌÆÛ º¯°æÇϱâ>

  ¹ÙÅÁÈ­¸éÀÇ ¿ùÆäÀÌÆÛ¸¦ ÇÁ·Î±×·¥ »ó¿¡¼­ º¯°æÇÏ°íÀÚÇÕ´Ï´Ù. ·¹Áö½ºÆ®¸®°ªÀ» º¯°æ½ÃÄѼ­ ¿ùÆäÀÌÆÛ¸¦ ¹Ù²åÁö¸¸ ½ÇÁ¦ ¸®ºÎÆÃÀü¿¡´Â Àû¿ëÀÌ µÇÁö ¾Ê½À´Ï´Ù.. ¾î¶»°Ô ÇØ°áÇÒ ¹æ¹ýÀÌ ¾øÀ»±î¿ä..?
±×³É À̹ÌÁö ÆÄÀÏÀ» ƯÁ¤ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é µÇÁö¸¸ ¿ùÆäÀÌÆÛ·Î ÇÏ¸é ±×°Ô ¾ÈµÇ´õ¶ó±¸¿ä...

 ´ÙÀ½ ÇÔ¼ö¸¦ ¾²½Ã¸é µË´Ï´Ù.

BOOL SystemParametersInfo(
UINT uiAction, // system parameter to query or set
UINT uiParam, // depends on action to be taken
PVOID pvParam, // depends on action to be taken
UINT fWinIni // user profile update flag
);

»ç¿ë¹ýÀº ´ÙÀ½°ú °°½À´Ï´Ù.

CString szFileName = _T("c:\\windows\\test.bmp");
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0&, szFileName, SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);

 

<CString ÇüÀ» char* ÇüÀ¸·Î ¹Ù²Ù±â>

1.CString Ŭ·¡½ºÀÇ GetBuffer()´Â CStringÀ» char *·Î ¹Ù²ãÁÝ´Ï´Ù.

ex) CString strTemp = _T("test");
      char *getTemp=NULL;

      getTemp = malloc(strTemp.GetLength()+1);
      strcpy(getTemp, strTemp.GetBuffer(strTemp.GetLength());
      printf("°á°ú:%s\n", getTemp);

      free(getTemp);

2. operator LPCTSTR ()µµ ¸¶Âù°¡ÁöÀÔ´Ï´Ù.

ex) CString strTemp = _T("test");
      char *getTemp = (LPSTR)(LPCSTR)strData;

 

<CFileDialog ÀÎÀÚ »ç¿ë¹ý>

¾Æ·¡ÀÇ ÄÚµå´Â CFileDialog ÇÔ¼öÀÇ full option ¿¹Á¦ÀÔ´Ï´Ù. OnFileOpen() ÇÔ¼öÀÇ ÀϺκÐÀÌÁÒ. È®ÀåÀÚ°¡ 3ds ÀÎ ÆÄÀϸ¸ Ç¥½ÃµÇµµ·Ï ÇÏ´Â ¿¹Á¦ÀÔ´Ï´Ù.

static char BASED_CODE szFilter[] = "3ds ÆÄÀÏ (*.3ds)|*.3ds|";

CFileDialog FileDlg( TRUE, "3ds", NULL, OFN_HIDEREADONLY |
                            OFN_OVERWRITEPROMPT | OFN_NOCHANGEDIR,
                            szFilter, NULL );

FileDlg.DoModal();  

 

<´ë¿ë·® ÆÄÀÏ Àбâ (ºü¸£°Ô...)>

ÆÄÀÏ Àбâ´Â ÀÚÁÖ »ç¿ëÇÏ½Ç °ÍÀε¥..
CFile::Read¸¦ »ç¿ëÇϸé.. 10MBÁ¤µµ µÇ´Â ÆÄÀÏÀ» ÀÐÀ¸¸é ¹«ÁøÀå ¿À·¡ °É·Á¼­..
¸Þ¸ð¸® ¸Ê ÆÄÀÏÀ» ÀÌ¿ëÇÑ ÆÄÀÏ Àб⠹æ¹ýÀ» ¿Ã·Á µé¸³´Ï´Ù..
¸¹Àº ¿¹Á¦°¡ ³ª¿Â°ÍÀ¸·Î ¾ËÁö¸¸.. Ȥ½Ã... µµ ¸ô¶ó¼­..

BOOL OpenFiles(LPCSTR lpszPathName)
{
     DWORD dwFileSize;
     HANDLE hFile, hFileMap;
     LPVOID lpvFile;

     hFile = ::CreateFile(lpszPathName, GENERIC_READ , 0, NULL
                OPEN_EXISTING, FILE_ATTRIBUTTE_NORMAL, NULL);
     if(hFile == INVALID_HANDLE_VALUE) {
           //¿©±â¿¡¼­ ¿¡·¯ ¸Þ¼¼Áö ó¸®..
     }
     dwFileSize = ::GetFileSize(hFile, NULL);

     hFileMap = CreateFileMapping(hFile, NULL, PAGE_WRITECOPY, 0,
                                                  dwFileSize, NULL);

     if(hFileMap == NULL) {
          CloseHandle(hFile);
          //¿©±â¿¡¼­ ¿¡·¯ ¸Þ¼¼Áö ó¸®..
     }

     lpFile = MapViewOfFile(hFileMap, FILE_MAP_COPY, 0,0,0);

     if(lpFile == NULL) {
          CloseHandle(hFile);
          CloseHandle(hFileMap);
          //¿©±â¿¡¼­ ¿¡·¯ ó¸®
     }
}

ÀÌ·¸°Ô Çϸé.. ´ë¿ë·®ÀÇ ÆÄÀÏÀ» ºü¸£°Ô ÀÐÀ» ¼ö ÀÖ½À´Ï´Ù..

Á¦°¡ ½Ã°£À» Çѹø Á¦¾î ºÃ´Âµ¥.. 4ÃÊ ¾È¿¡ ²÷³ª´õ±º¿ä..

Èì.. ±×¸®°í ¿©±â¿¡ ³ª¿Â ÇÔ¼ö´Â Help¿¡¼­ Á¤È®ÇÑ ³»¿ëÀ» º¸¼¼¿ä..

 

<´ë¿ë·® ÆÄÀÏ ºü¸£°Ô Àбâ 2>

¸Þ¸ð¸® ¸ÊÆÄÀÏÀ» ÀÌ¿ëÇÑ ¹æ¹ý¿Ü¿¡ °£´ÜÇÑ ¹æ¹ýÀÌ À־ ¸»¾¸µå·Áº¼±î ÇÕ´Ï´Ù.

¾î·Á¿î ·çƾÀº ¾Æ´Ï°í¿ä, ±×³É µµ½º¿ë ½ÃÀý¿¡ »ç¿ëÇß´ø freadÇÔ¼ö¸¦ »ç¿ëÇÑ °ÍÀÔ´Ï´Ù.
¹°·Ð fread´ë½Å ´Ù¸¥ ÆÄÀÏ Àбâ ÇÔ¼ö¸¦ »ç¿ëÇصµ µË´Ï´Ù.
´Ù¸¸ »ç¿ëÀÚ ÆíÀǸ¦ À§Çؼ­ Ãß°¡·Î ¸¸µé¾îÁø ÆÄÀÏÇÔ¼öµéÀº(ÆÄÀÏÇÔ¼ö»Ó¸¸ ¾Æ´Ï¶ó ´Ù¸¥ °Íµéµµ ¸¶Âù°¡Áö...) »ç¿ëÇϱä ÆíÇÏ°ÚÁö¸¸, ¼Óµµ°¡ ¹«Ã´ ´À¸° ¹®Á¦°¡ ÀÖ½À´Ï´Ù.

char *ReadFile( char *FileName )
{
     FILE *fp;
     int FileSize;
     char *buffer;

     try {
          fp = fopen( FileName, "rb" );
          if( !fp ) throw "File Not Found!";

          FileSize = filelength( fileno(fp) );
          buffer = new char [FileSize+1];
          fread( buffer, FileSize, 1, fp );
          *(buffer + FileSize) = 0;
          fclose( fp );
          return buffer;
     }
     catch( char *msg ) {
          printf( msg );
          return NULL;
     }
}

À§ÀÇ try ~ catch±¸ºÐÀº Áß¿äÇÑ°ÍÀº ¾Æ´Ï°í¿ä, ´ëºÎºÐÀÇ ÇÁ·Î±×·¡¸ÓºÐµéÀÌ ¿¹¿Ü󸮸¦ ÇÔ¿¡ À־ ÀϹÝÀûÀÎ C½ºÅ¸ÀÏ·Î ÀÏÀÏÈ÷ ¿¡·¯¸Þ½ÃÁö¸¦ ÄÚµùÇÏ´õ±º¿ä.
±×·¡¼­ Ȥ½Ã³ª µµ¿òÀÌ µÉ±î Çؼ­ try ~ catch±¸ºÐÀ» »ç¿ëÇغ¸¾Ò½À´Ï´Ù.
¾î·Á¿î°Ç ¾Æ´Ï´Ï±ñ try ~ catch¸¦ »ç¿ëÇϸé ÄÚµùÀÌ ÈξÀ °£´ÜÇØÁú²¨¿¹¿ä. ^^

±×¸®°í À§ÀÇ ÆÄÀÏÀбâ ÇÔ¼ö¸¦ fopen/freadµîÀ» »ç¿ëÇߴµ¥, ÀÌ°Ç C¸¦ ½ÃÀÛÇÏ´Â ºÐµé²² Á¶±ÝÀ̳ª¸¶ ÀÌÇØ°¡ ½±µµ·Ï µµ½º¿¡¼­ »ç¿ëÇÏ´ø ÇÔ¼ö¸¦ »ç¿ëÇß½À´Ï´Ù.
¹°·Ð ÀÌ ÇÔ¼öµéÀº À©µµ¿ìÁî¿¡¼­µµ ±×´ë·Î »ç¿ëÇÒ¼ö ÀÖ½À´Ï´Ù.

¿ø·¡ µµ½º¿¡¼­ fread´Â ÇÑºí·°ÃÖ´ëÅ©±â°¡ 64k·Î Á¦Çѵ˴ϴÙ.
µû¶ó¼­ 64k¾¿ ³ª´©¾î¼­ ÆÄÀÏÀ» Àоîµé¿©¾ß Çϴµ¥, À©µµ¿ìÁî¿¡¼­´Â ±×³É Çѹø¿¡ ÀÐÀ»¼ö ÀÖ´õ±º¿ä. ^^

10¸Þ°¡ Á¤µµ ÀоîµéÀ̴µ¥ À־, Ææ133ÀÇ ÄÄ¿¡¼­ ¾à 3Ãʹ̸¸À¸·Î °É¸®´Â °Í °°½À´Ï´Ù.