<À©µµ¿ì Á¢±â>

  ´ÙÀ̾ó·Î±× º£À̽º¿¡¼­ º¸¿©Áà¾ß ÇÒ Ç׸ñÀÌ ¸¹À» ¶§, ¾à°£ ÁöÀúºÐÇØ º¸ÀÌ´Â °æÇâÀÌ Àִµ¥, ´ÜÃ߸¦ Çϳª ´Þ¾Æ¼­, ¾È¾²´Â Ç׸ñÀº Á¢¾î ³õ°í º¸¸é, »ó´çÈ÷ ÇÁ·Î±×·¥À» ±ò²ûÇÏ°Ô ÇÒ ¼ö ÀÖ´õ±º¿ä....

 ±×Àü¿¡ ÇÏ¼Å¾ß ÇÒ ÀÛ¾÷Àº ´ÙÀ½°ú °°½À´Ï´Ù.

1) Àß ¾È¾²ÀÌ´Â Ç׸ñµéÀº Static Box¸¦ Çϳª »ý¼ºÇؼ­ ¸ð¾Æ ³õ´Â´Ù.

2) StaticBoxÀÇ À̸§À» ID_STATICÀÌ ¾Æ´Ñ ´Ù¸¥ À̸§À» ºÙÀδÙ.(¿©±â¼­´Â ID_STATIC_SEP¶ó´Â À̸§À» ºÙ¿´½À´Ï´Ù. )

3) ±× Ç׸ñÀ» º¸¿©Áְųª, ¾Èº¸¿©ÁÖ´Â ±â´ÉÀ» Ãß°¡Çϱâ À§Çؼ­ ÄÚ¸Çµå ¹öÆ°À̳ª ¸Þ´ºÇ׸ñÀ» Ãß°¡ÇÑ´Ù.( ¿©±â¼­´Â IDC_BUTTON_TEST¶ó´Â À̸§ÀÔ´Ï´Ù. )

 °£´ÜÇÏÁÒ..?? ÀÌ·¸°Ô ÇÏ½Ã°í ³­ ÈÄ¿¡ À©µµ¿ì¿¡ ´ÙÀ½°ú °°Àº ÇÔ¼ö¸¦ Ãß°¡ÇÏ½Ã¸é µË´Ï´Ù.

 ÄÚµåÀÇ ³»¿ëÀº ¾Æ±î ¸¸µç Â÷Àϵå À©µµ¿ìÀÇ ¿µ¿ªÀ» ±â¾ïÇؼ­, ¹öÆ°À» ÇÑ ¹ø ´©¸£¸é ¿ø·¡ÀÇ À©µµ¿ìÀÇ ¸ð½ÀÀ», µÎ¹ø ´©¸£¸é Â÷ÀÏÀÇ À©µµ¿ì ¿µ¿ªÀ» Á¦¿ÜÇÑ ºÎºÐ¸¸ º¸¿©ÁÖ´Â ±×·± ÀÏÀ» ÇÕ´Ï´Ù.

( ¾Æ±î ¸¸µç ¹öÆ°ÀÇ À̺¥Æ® Çڵ鷯 ÀÔ´Ï´Ù. Âø¿À ¾øÀ¸½Ã±æ... )

void CXXXXDlg::OnExpand()
{
    // TODO: Add your control notification handler code here
    static BOOL bExpand = TRUE;
    Expanding(IDC_STATIC_SEP, bExpand);
    bExpand = !bExpand;
}

void CXXXXDlg::Expanding(int nResourceID, BOOL bExpand)
{
    static CRect rcLarge;
    static CRect rcSmall;
    CString strExpand;
    if (rcLarge.IsRectNull()) {
        CRect rcLandMark;
        CWnd *pWndLandMark = GetDlgItem(nResourceID);
        ASSERT(pWndLandMark);
        GetWindowRect(rcLarge);
        pWndLandMark -> GetWindowRect(rcLandMark);
        rcSmall = rcLarge;
        rcSmall.bottom = rcLandMark.top;
    }
 
    if (bExpand) {
        SetWindowPos(NULL, 0 , 0, rcLarge.Width(), rcLarge.Height(),
                SWP_NOMOVE | SWP_NOZORDER);
        strExpand = " << Test ";
    } else {
        SetWindowPos(NULL, 0, 0, rcSmall.Width(), rcSmall.Height(),
                SWP_NOMOVE | SWP_NOZORDER);
        strExpand = " Test >>";
    }

    SetDlgItemText(IDC_BUTTON_TEST, strExpand);
}

 

<»óŹٿ¡ ±×¸² Ãâ·Â>

»óŹٿ¡ ±×¸² Ãâ·ÂÇϽ÷Á¸éCreateÇÔ¼ö¿¡

CStatusbarCtrl& m_Status = m_wndStatusBar.GetStatusBarCtrl();

m_Status.SetIcon(ÆäÀÎÀ妽º,
     (HICON)LoadImage(AfxGetResourceHandle(),
     MAKEINTRESOURCE(±×¸²¾Æµð),
     32,32,10));

ÇØÁÖ½Ã¸é µË´Ï´Ù.

´õ ÀÚ¼¼ÇÑ Á¤º¸´Â  MSDNã¾Æ º¸¼¼¿ä..

 

<½Ã½ºÅÛ °­Á¦·Î ´Ù¿î½ÃÅ°±â>

1.¿ä¾à

 À©µµ¿ìÁî NT ³ª À©µµ¿ìÁî 98 ¿¡¼­ ½Ã½ºÅÛÀ» °­Á¦·Î ´Ù¿î½ÃÅ°´Â ¹æ¹ý¿¡ ´ëÇؼ­ ¾Ë¾Æº¾´Ï´Ù.

2.º»¹®

 ÇÊ¿äÇÑ °æ¿ì°¡ °ÅÀÇ ¾ø°ÚÁö¸¸(¹ÙÀÌ·¯½º°¡ ¾Æ´Ï°í¼­¾ß. ^^;;), ½Ã½ºÅÛÀ» °­Á¦·Î ´Ù¿î½ÃÅ°°íÀÚ ÇÏ´Â °æ¿ì°¡ ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù. ÀÌ·± °æ¿ì ¾Æ·¡ÀÇ ¿¹Á¦¿¡¼­ ó·³ ¾î¼Àºí¸® Äڵ带 »ç¿ëÇÏ´Â ¹æ¹ý°ú Thread ¸¦ ¿ÍÀåâ ¸¸µé¾î¼­ thread ·¯½¬(?)¸¦ ÅëÇؼ­ ´Ù¿î½ÃÅ°´Â ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù. ¾Æ·¡ÀÇ ¿¹Á¦¸¦ Âü°í Çϼ¼¿ä.

3.¿¹Á¦

if(g_bIsWinNT) {
     SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS);
     while(1) {
          DWORD dwTid;
          HANDLE hThread=CreateThread(NULL,0,LockThread,NULL,0,&dwTid);
          SetThreadPriority(hThread,THREAD_PRIORITY_TIME_CRITICAL);
     }
} else {
     lockpoint:
     __asm {
          cli
          jmp lockpoint
     }
}

4.Âü°í

BO2K

 * cli : Clear Interrupt Flag
     --> ÀÌ ¾î¼Àºí¸® ÄÚµå´Â ÇöÀç ½Ã½ºÅÛÀÌ ´Ù¿îµÇ´Â °ÍÀ» ¹æÁöÇϱâ À§Çؼ­ ¸¸µé¾îÁø
            Interrupt Flag ¸¦ Á¦°ÅÇعö¸²À¸·Î½á, ¾Æ¹«µµ ÀÚ½ÅÀ» °Çµå¸± ¼ö ¾ø°Ô ÇÕ´Ï´Ù.

           (The Intel Architecture Software Developer's Manual)  

 

<Win9x VS Win2000,WinNT ½Ã½ºÅÛ Á¾·áÇϱâ>

½Ã½ºÅÛÀ» °ü¸®ÇÏ´Â ÇÁ·Î±×·¥¿¡¼­ ÀÚÁÖ ¾²ÀÌ´Â ±â´ÉÀ©...

Á» º¸±â ½±°Ô Á¤¸®µÈ ÀÚ·á°¡ ¾ø´Â°Å °°¾Æ¼­ ¿Ã·Áº¾´Ï´Ù.....

¸ÕÀú Win9x Series... 

°£´ÜÇϴϱî...±×³É ÇÔ¼ö·Î ±¸ÇöÇÑ °Í¸¸ Àû¾î ³õÀ¸²²¿©...

 

void CUpsManagerApp::Win9XSystemReboot()
{
     ExitWindowsEx(EWX_REBOOT,0);
}

void CUpsManagerApp::Win9XSystemPowerOff()
{
     ExitWindowsEx(EWX_POWEROFF,0);
}

void CUpsManagerApp::Win9XSystemLogOff()
{
     ExitWindowsEx(EWX_LOGOFF, 0);
}

 

¸ÕÀú WinNT ¹× Win2000 Series...

 ¿ä°Ç ¹®Á¦°¡ ÂÀ ÀÖ½À´Ï´Ù...

ÇÁ¸®ºô¸®Áö¶ó´Â ³ÑÀ» ¼³Á¤Çؼ­ ÅäÅ«(¹ö½º ÅäÅ« ¾Æ´Ô --;;;)À̶ó´Â ³ÑÀ» ¼³Á¤Áà¾ß ÇÕ´Ï´Ù.

¹¹ÇÏ´Â ³ÑÀÎÁö´Â MSDN ã¾Æº¸¸é Àß ³ª¿À±¸¿©... ±×³É ½Ã½ºÅÛ ¼öÁØÀÇ ÇÁ·Î¼¼½º ¾×¼¼½º¸¦ ÇÒ·Á¸é... ÀÌ°Å ¼³Á¤Çϱ¸ ÇؾßÇÑ´Ù±¸ ¾Ë°í °è½Ã¸é µÉ°Ì´Ï´Ù.

±Û°í ÀÌ ¼³Á¤¿¡ °üÇÑ ¹æ¹ýÀº ÀÚ·á½Ç¿¡ ÀÌ¹Ì °èÁ¦°¡ µÇ¾î ÀÖ½À´Ï´Ù.

±Ùµ¥.. ¶Ç ±ÛÀ» Àû¾î³í ÀÌÀ¯´Â ¾à°£ÀÇ ºÎ¿¬ ¼³¸íÀ» ´Þ¶ó±¸¿©...

Áö±ÝÀÇ ¼³Á¤´ë·Î Çϸé

 

ExitWindowsEx(EWX_SHUTDOWN | EWX_REBOOT,0);
ExitWindowsEx(EWX_SHUTDOWN | EWX_POWEROFF,0); 

À§ÀÇ µÎ°³ÀÇ ±â´ÉÀº ´ç¿¬È÷ ´Þ¶ó¾ß ÇÕ´Ï´Ù....

±Ùµ¥... µÑ´Ù ¸®ºÎÆÃÀÌ µË´Ï´Ù. ¿ø·¡ Çϳª´Â ÆÄ¿ö ¿ÀÇÁµÇ¾î¾ß Çϴµ¥...

¾Æ¹«¸® ÃßÀûÇØ ºÁµµ ¿Ö ±×·±Áö Àß ¸ð¸£°Ú¾î¿©...

 

Àü À¯ÇÇ¿¡½º °ü¸® ÇÁ·Î±×·¥ Áö±Ý Â¥°í Àִµ¥...

¹Ù¶¼¸® ¶³¾îÁö¸é... ½Ã½ºÅÛÀ» Á׿©¾ß Çϴµ¥... À̳ÑÀÌ ´Ù½Ã ÄÑÁö¸é °ï¶õÇÏÁö¿©..

 

±×·Á¼­... ExitWindowsEx() ÇÔ¼ö ´ë½Å¿¡ ....

InitiateSystemShutdown() ÇÔ¼ö¸¦ ½á¼­ ±¸ÇöÇغýɴõ...

¿£Æ¼4.0Çϱ¸ À©ÀÌõ(Professional ¹öÁ¯)Àº Àß µ¿ÀÛ Çϵçµð...

´Ù¸¥°Ç ¾ÆÁ÷ Å×½ºÆ® ¸øÇغýÀ´Ï´Ù.

 

void CUpsManagerApp::WinNTSystemReboot()
{
     HANDLE hToken;
     TOKEN_PRIVILEGES tp;
     LUID luid;

     OpenProcessToken(GetCurrentProcess(),
          TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,  
          &hToken);
     LookupPrivilegeValue(NULL,"SeShutdownPrivilege",&luid);

     tp.PrivilegeCount = 1;
     tp.Privileges[0].Luid = luid;
     tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
  
     AdjustTokenPrivileges(hToken, FALSE, &tp, 0, NULL, NULL);

     InitiateSystemShutdown(NULL, NULL, 30, FALSE, TRUE);
     // ExitWindowsEx(EWX_SHUTDOWN | EWX_REBOOT,0);
}

void CUpsManagerApp::WinNTSystemPowerOff()
{
     HANDLE hToken;
     TOKEN_PRIVILEGES tp;
     LUID luid;

     OpenProcessToken(GetCurrentProcess(),
          TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
          &hToken);
     LookupPrivilegeValue(NULL,"SeShutdownPrivilege",&luid);

     tp.PrivilegeCount = 1;
     tp.Privileges[0].Luid = luid;
     tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

     AdjustTokenPrivileges(hToken, FALSE, &tp, 0, NULL, NULL);

     InitiateSystemShutdown(NULL, NULL, 30, FALSE, FALSE);
     // ExitWindowsEx(EWX_SHUTDOWN | EWX_POWEROFF,0);
}

void CUpsManagerApp::WinNTSystemLogOff()
{
     ExitWindowsEx(EWX_LOGOFF, 0);
}

 

<½Ç¼ö ³ª´°¼À ¿¬»êÀ» Á¤¼ö ¿¬»êÀ¸·Î Çϱâ>

1.¿ä¾à

 ¼Ò¼öÁ¡ÀÌ ÀÖ´Â ³ª´°¼À ¿¬»êÀ» Á¤¼ö·Î °è»êÇÏ¿© °è»ê ¼Óµµ°¡ ºü¸£°í Á¤È®ÇÑ ¼ýÀÚ¸¦ ¾òÀ» ¼ö ÀÖ´Â ¹æ¹ý¿¡ ´ëÇؼ­ ¾Ë¾Æº¸°Ú½À´Ï´Ù.

2.º»¹®

 Á¤¼ö·Î °è»êÀº ¼Ò¼öÁ¡ °è»êº¸´Ù ¿¬»ê ¼Óµµ°¡ ºü¸¨´Ï´Ù. ±×¸®°í Á¤È®ÇÑ ¼ýÀÚ°ªÀ» ¾ò±â À§Çؼ­´Â ³ª´©±â Àü¿¡ ¿ÞÂÊÀ¸·Î 16-bit shiftÇÏ°í, µ¿µîÇÑ 16-bitÀÇ 2Áø ¼ýÀÚ¸¦ ÁÖ¾î¾ß ÇÕ´Ï´Ù. ÀÌ°ÍÀº ³ª´©±â Àü¿¡ 100,000À¸·Î °ö¼ÀÀ» ÇÑ È¿°ú°¡ ÀÖ½À´Ï´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á ¼Ò¼öÁ¡À» °è»êÇÏÁö ¾Ê¾Æµµ µË´Ï´Ù.

3.¿¹Á¦

1) 10 / 85 = x;

  10À» 100,000À¸·Î °öÇϸé, 1,000,000ÀÌ ³ª¿Â´Ù.

  1,000,000 / 85 = 11764¸¦ ¸ÕÀú °è»êÇÏ°í,

  °á°ú°ª 11764¸¦ 100,000À¸·Î ³ª´©¸é 0.11764°¡ ³ª¿Â´Ù.

 

2)

int ratio = ((( dege - px2) < <  16) / (px1 - px2));
px1 = edge;
py1 = py2 + (((py1 - py2) * ratio) >> 16));  

3)

float ratio = (float)((edge - px2) / (px1 - px2));
px1 = edge;
py = py2 + (int)(((float)(py1 - py2) * ratio));  

[°á°ú]

2)¿¬»ê¼Óµµ°¡ 3)¿¬»ê¼Óµµº¸´Ù ¾à 2¹èÁ¤µµ ºü¸¥°á°ú°¡ ³ª¿É´Ï´Ù.

 

4.Âü°í

Real-Time Strategy Game Programming using Ms DirectX  p.318  

 

<¿¬°á ÇÁ·Î±×·¥ ã±â ´ÙÀ̾ó·Î±× ¶ç¿ì±â>

[¿ä¾à]

Explorer ¿¡¼­ ÆÄÀÏ ¾ÆÀÌÄÜÀ» ´õºíŬ¸¯ÇÒ °æ¿ì ÆÄÀÏÀÇ È®Àå¸í¿¡ µû¶ó ¿¬°áµÇ¾î ÀÖ´Â ÇÁ·Î±×·¥ÀÌ µ¿ÀÛÇÏ°Ô µÇ¾î ÀÖ´Ù. ÇÏÁö¸¸ ¿¬°áµÇ¾î ÀÖ´Â ÇÁ·Î±×·¥ÀÌ ¾øÀ» °æ¿ì "¿¬°á ÇÁ·Î±×·¥ ã±â" ´ÙÀ̾ó·Î±×°¡ È­¸é¿¡ ³ªÅ¸³­´Ù.

[Ãß°¡ Á¤º¸]

 ÆÄÀÏ ¾ÆÀÌÄÜ¿¡ ¿¬°áµÈ ÇÁ·Î±×·¥ÀÌ ¾øÀ» °æ¿ì ¿¬°á ÇÁ·Î±×·¥À» ÁöÁ¤Çϵµ·Ï "¿¬°á ÇÁ·Î±×·¥ ã±â" ´ÙÀ̾ó·Î±×¸¦ ÇÁ·Î±×·¥ÀûÀ¸·Î ¶ç¿ì´Â ¹æ¹ýÀº ShellExecuteEx API ¸¦ Call ÇÒ ¶§ "Openas" ¸¦ ÆĶó¹ÌÅÍ·Î »ç¿ëÇÏ¸é µÈ´Ù.

¿ì¼± ShellExecuteEx¸¦ CallÇϱâ Àü¿¡ FindExecutable API¸¦ »ç¿ëÇÏ¿© ÆÄÀÏÀÇ ÇÁ·Î±×·¥ ¿¬°á¿©ºÎ¸¦ ¿ì¼± ¾Ë¾Æº¸µµ·Ï ÇÑ´Ù. ¸¸¾à ¿¬°áµÈ ÀÀ¿ëÇÁ·Î±×·¥ÀÌ ÀÖÀ» °æ¿ì SHELLEXECUTEINFO structure¿¡ "Open" ÆĶó¹ÌÅ͸¦ »ç¿ëÇÏ°í, ±×·¸Áö ¾ÊÀ» °æ¿ì "Openas"¸¦ »ç¿ëÇÏ¸é µÈ´Ù. ÀÌ ÆĶó¹ÌÅÍ¿¡ ÀÇÇØ ShellExecuteEx °¡ "¿¬°á ÇÁ·Î±×·¥ ã±â" ´ÙÀ̾ó·Î±×¸¦ È­¸é¿¡ ³ªÅ¸³»°Ô µÈ´Ù.

 ´ÙÀ½Àº À§ ³»¿ë¿¡ ´ëÇÑ Sample codeÀÌ´Ù.

// Get the name of the file to be openend.
CFileDialog dlg(TRUE);
if (dlg.DoModal() == IDOK ) {
     CString strFile = dlg.GetPathName();

     // See if there is an association for this file.
     char strExecutable[FILENAME_MAX];
     int result = (int)FindExecutable((LPCTSTR)strFile, NULL,
          (LPTSTR)&strExecutable);
     if (result == 31) {        // No Associated .EXE file
          AfxMessageBox("There is no association for the specified file type.
               The 'Open With...' dialog box will now be displayed.");
          SHELLEXECUTEINFO sei = {sizeof(sei), 0, m_hWnd, "Openas",
               (LPCSTR)strFile, NULL, NULL, SW_SHOWNORMAL,
               AfxGetApp()->m_hInstance};

          // Invoke the "Open With..." dialog box before opening the selected file.
               ShellExecuteEx(&sei);
     
     } else if (result >= 32 ) {               // Found an Associated .EXE file
          AfxMessageBox("The file will now be opened with the associated program...");
          SHELLEXECUTEINFO sei = {sizeof(sei), 0, m_hWnd, "Open",
               (LPCSTR)strFile, NULL, NULL, SW_SHOWNORMAL,
               AfxGetApp()->m_hInstance};

          // Open the selected file.
         ShellExecuteEx(&sei);

     } else {          // Error condition.
         AfxMessageBox("Some other problem has caused 'FindExecutable' to fail.");
     }
}

 

<Window¿¡¼­ ÄÜ¼Ö ¾ò±â(API)>

º¸Åë À©µµ¿ì ApplicationÀº È­·ÁÇÑ GUI¸¦ ÀÚ¶ûÇϸç ApplicationÀÌ ¸¸µé¾î Áý´Ï´Ù.

±×·¯³ª ¼­¹ö¿¡¼­ ½ÇÇàµÇ´Â ÇÁ·Î±×·¥ÀÎ °æ¿ìÇϳªÀÇ ÄÜ¼Ö È­¸é¿¡¼­ ¿©·¯ GUI¸¦ ¶ç¾î ÀÛ¾÷À» ÇÏ°Ô µÇÁö¿ä.

º¸ÅëÀº ÇϳªÀÇ Application¿¡ ÇϳªÀÇ Äֿܼ¡ ¿©·¯°³ÀÇ À©µµ¿ì¸¦ »ý¼ºÇØ ÇÁ·Î±×·¥ µË´Ï´Ù. ¹°·Ð Äֵܼµ ÇϳªÀÇ À©µµ¿ìÁö¸¸¿ä.

±×·³ ¿©±â¼­ °£´ÜÈ÷ À©µµ¿ì Application¿¡¼­ ÄܼÖÀ» ¶ç¾î Text Edit¿¡ ÀÖ´Â ¹®ÀÚ¸¦ Äֿܼ¡ Âï´Â API ÇÔ¼ö¸¦ ¼Ò°³ÇÕ´Ï´Ù.

ºñ±³Àû °£´ÜÇÏ°í ¿©·¯±ºµ¥¼­ »ç¿ë°¡´ÉÇÏ´Ï ¸¹Àº ÂüÁ¶ ¹Ù¶ø´Ï´Ù.

1. À©µµ¿ì¿¡¼­ ÄÜ¼Ö ¶ç¿ì±â

    BOOL AllocConsole() 

2. »ý¼ºµÈ Äֿܼ¡ ¹®ÀÚ¿­ º¸³»±â

    CString str;
    str = "¹®ÀÚ¿­"

    DWORD dwWrite;
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    WriteFile(hOut, str, str.GetLength(), &dwWrite, NULL);

3. »ý¼ºµÈ Äܼ־ø¾Ö±â

    BOOL FreeConsole()

 

ÇÔ¼öÀÇ ÀÚ¼¼ÇÑ »ç¿ëÀº MSDN¿¡¼­ Âü°íÇϼ¼¿ä.

 

<Á¦¾îÆÇ¿¡¼­ Å«±Û²Ã·Î ¼³Á¤ÇßÀ»°æ¿ì¿¡µµ ÀÏÁ¤ÇÑ Å©±âÀÇ ±Û²Ã ÁöÁ¤>

 

CDC* pDC = GetDC();
int nSize1 = 100;         // ÀÛÀº ±Û²Ã¿¡¼­ º¸¿©Áö´Â ±Û²Ã Å©±â
int nSize2 = MulDiv(nSize1, 96, pDC->GetDeviceCaps(LOGPIXELSY));
                                // nSize1ÀÇ Å©±â¸¦ ÇöÀç µð½ºÇ÷¹ÀÌÀÇ ÀÎÄ¡´ç Çȼ¿¼ö·Î Àç°è»êÇÑ´Ù.

m_Font.CreatePointFont(nSize2, "±¼¸²Ã¼", pDC);
                                // ´Ü¼øÈ÷ ÆùÆ®¸í°ú ÆùƮũ±â·Î »ý¼ºÇÒ¶§

m_Button.SetFont(&m_Font);

ÀÌ·¸°Ô Çؼ­ ¾Õ¿¡ ¿Ã¸° Äڵ带 ´ë½ÅÇϸé Á¦¾îÆÇ¿¡¼­ ¼³Á¤ÇÑ Å«±Û²Ã, ÀÛÀº±Û²ÃÀÇ °ª¿¡ »ó°ü¾øÀÌ ÀÏ°üµÈ Å©±âÀÇ ÆùÆ®¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. Å«±Û²Ã·Î ¼³Á¤ÇÏ¸é ±ÛÀÚ°¡ À߸®´Â Çö»óÀ» ¸·À» ¼ö ÀÖÁÒ.

 

<Åõ¸í 256 ºñÆ®¸Ê>

256 Ä®¶óÀÇ ºñÆ®¸ÊÀ» È­¸é¿¡ »Ñ·ÁÁÝ´Ï´Ù. ¹°·Ð Åõ¸í»öÀ» ÁöÁ¤ÇÏ´Â ¹æ½ÄÀ̱¸¿ä.

±×·³ ¼Ò½º ³ª°©´Ï´Ù.

 

int CCISBitmap::Width()
{
    BITMAP bm;
    GetBitmap(&bm);
    return bm.bmWidth;
}

int CCISBitmap::Height()
{
    BITMAP bm;
    GetBitmap(&bm);

    return bm.bmHeight;
}

void CCISBitmap::DrawTransparent(HDC hDC, int x, int y, COLORREF crColour)
{
    COLORREF crOldBack = SetBkColor(hDC,m_crWhite);
    COLORREF crOldText = SetTextColor(hDC,m_crBlack);
    CDC dcImage, dcTrans;
 
    // Create two memory dcs for the image and the mask
    
    dcImage.m_hDC = CreateCompatibleDC(hDC);
    dcTrans.m_hDC = CreateCompatibleDC(hDC);
    
    // Select the image into the appropriate dc
    CBitmap* pOldBitmapImage = dcImage.SelectObject(this);
 
    // Create the mask bitmap
    CBitmap bitmapTrans;
    int nWidth = Width();
    int nHeight = Height();
    bitmapTrans.CreateBitmap(nWidth, nHeight, 1, 1, NULL);

    // Select the mask bitmap into the appropriate dc
    CBitmap* pOldBitmapTrans = dcTrans.SelectObject(&bitmapTrans);
 
    // Build mask based on transparent colour
    dcImage.SetBkColor(crColour);
    dcTrans.BitBlt(0, 0, nWidth, nHeight, &dcImage, 0, 0, SRCCOPY);
 
    // Do the work - True Mask method - cool if not actual display
    BitBlt(hDC, x, y, nWidth, nHeight, dcImage.m_hDC , 0, 0, SRCINVERT);
    BitBlt(hDC, x, y, nWidth, nHeight, dcTrans.m_hDC , 0, 0, SRCAND);
    BitBlt(hDC, x, y, nWidth, nHeight, dcImage.m_hDC , 0, 0, SRCINVERT);
 
    // Restore settings
    dcImage.SelectObject(pOldBitmapImage);
    dcTrans.SelectObject(pOldBitmapTrans);
    pOldBitmapImage->DeleteObject();
    pOldBitmapTrans->DeleteObject();
    SetBkColor(hDC,crOldBack);
    SetTextColor(hDC,crOldText);
}

ÀÔ´Ï´Ù.

À½.. ±×·±µ¥ ÀÌ°Ô Á» ´À·Á¿ä. --;.

Åõ¸í»ö ¾øÀÌ Ãâ·ÂÇÏ´Â ·çƾÀº ¾Æ·¡²®´Ï´Ù.

 

void CCISBitmap::DrawBitmap(HDC hDC, int x, int y)
{
    CDC MemDC;
    MemDC.m_hDC = CreateCompatibleDC (hDC);
 
    int nWidth = Width();
    int nHeight = Height();
 
    CBitmap *pBitmap = (CBitmap *)MemDC.SelectObject (this);
    BitBlt (hDC,x,y,nWidth,nHeight,MemDC.m_hDC,0,0,SRCCOPY);
    MemDC.SelectObject (pBitmap);
    pBitmap->DeleteObject();
    pBitmap = NULL;
}

±×¸®°í Çì´õ´Â ÀÌ·¸°Ô ÇØÁÖ¼¼¿ä.

public:
    void DrawBitmap(HDC hDC, int x, int y);
    CCISBitmap();
    virtual ~CCISBitmap();
 
    // Functions
    int Height();
    int Width();    
    virtual void DrawTransparent(HDC hDC, int x, int y, COLORREF crColour);    
    
private:
    COLORREF    m_crBlack;
    COLORREF    m_crWhite;

±×¸®°í¿ä.. ¶Ç.. »ý¼ºÀÚ¿¡ COLORREF ¸¦ ÃʱâÈ­ ÇØÁÖ½É µÇ±¸¿ä

ÀÌ°Ç CBitmap À» »ó¼Ó¹Þ¾Ò½À´Ï´Ù.

 

<Æ®·¹ÀÌÀÇ ¾ÆÀÌÄÜÀÌ »ç¶óÁöÁö ¾Ê°Ô>

IE°¡ Á×À» ¶§ Æ®·¹ÀÌÀÇ ¾ÆÀÌÄÜÀÌ ¸ðµÎ »ç¶óÁö´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù.

ƯÈ÷ Æ®·¹ÀÌ¿¡ ¼û¾î¹ö¸®´Â ÇÁ·Î±×·¥ÀÌ ±×·¸°Ô µÇ¸é ÂüÀ¸·Î ³­°¨ÇØÁöÁÒ.

IE 4À̻󿡼­´Â ±×·± ÀÏÀ» ¸·±â À§Çؼ­ Á×Àº ÈÄ Å½ºÅ©¹Ù°¡ ¸¸µé¾îÁú ¶§ ¸ðµç top-level À©µµ¿ì¿¡ ¸Þ½ÃÁö¸¦ º¸³»ÁÝ´Ï´Ù. ±× ¸Þ½ÃÁö¸¦ ¹ÞÀ¸¸é Æ®·¹ÀÌ¿¡ »õ·Î ¾ÆÀÌÄÜÀ» ³Ö¾îÁÖ¸é µË´Ï´Ù.

MSDN¿¡ ÀÖ´Â ³»¿ëÀÌÁö¸¸ ¸ð¸£½Ã´Â ºÐµéÀÌ ¸¹´õ±º¿ä.

¼Ò½º¸¦ º¸¸é ´ÙÀ½°ú °°½À´Ï´Ù.

 

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam)
{
     static UINT s_uTaskbarRestart;

     switch(uMessage) {
     case WM_CREATE:
          s_uTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated"));
          break;

     default:
          if(uMessage == s_uTaskbarRestart)
               AddTaskbarIcons();
          break;
    }
    
    return DefWindowProc(hWnd, uMessage, wParam, lParam);
}

 

RegisterWindowMessage(TEXT("TaskbarCreated")); ´Â TaskbarCreated¶ó´Â À̸§ÀÇ ¸Þ½ÃÁö¸¦ ½Ã½ºÅÛ¿¡ ´ëÇؼ­ À¯ÀÏÇÏ°Ô ¸¸µé¾îÁÖ´Â ÇÔ¼öÀÔ´Ï´Ù. ÀÌ¹Ì ÀÌ À̸§À¸·Î ¸Þ½ÃÁö°¡ µî·ÏµÇ¾î ÀÖÀ» °æ¿ì¿¡´Â ±× °ªÀ» µ¹·ÁÁÝ´Ï´Ù.

µû¶ó¼­ ÇÁ·Î±×·¥ÀÌ ½ÃÀÛÇÒ ¶§ Çѹø ½ÇÇàÇؼ­ ±× °ªÀ» ÀúÀåÇØÁà¾ß ÇÕ´Ï´Ù.

±×¸®°í ÇØ´ç ¸Þ½ÃÁö°¡ ¿À¸é ±× ¶§ Æ®·¹ÀÌ¿¡ ¾ÆÀÌÄÜÀ» »õ·Î ³ÖÀ¸¸é µÇ°ÚÁÒ.

 

MFCÀÇ °æ¿ì´Â ¸Þ½ÃÁöÀÇ °ªÀÌ »ó¼ö·Î Á¤ÇØÁ® ÀÖÁö ¾Ê±â ¶§¹®¿¡ ¸Þ½ÃÁö ¸Ê¿¡ ºÙÀÌ´Â °Ç ¾ÈµÉ °Í °°½À´Ï´Ù. CWnd::WindowProcÀ̳ª PretranslateMessage¿¡¼­ ¸Þ½ÃÁö °ªÀ» È®ÀÎÇؼ­ ó¸®ÇØÁÖ¸é µÇ°ÚÁÒ.

 

- MFCÀÇ °æ¿ì

  À©µµ¿ì´Â tray icon¿¡ ÀÖ´Â ¾ÆÀÌÄܵéÀ» º¸¿©ÁÙ¶§. "TaskbarCreated" ¶ó´Â À©µµ¿ì ¸Þ¼¼Áö¸¦ º¸¿©ÁÝ´Ï´Ù...

 µû¶ó¼­ ¿ì¸®´Â ÀÌ À©µµ¿ì ¸Þ¼¼Áö¸¦ µî·ÏÇؼ­ »ç¿ëÇÏ¸é µË´Ï´Ù.

UINT g_uShellRestart;
g_uShellRestart = RegisterWindowMessage(__Text("TaskbarCreated"));

ÀÌ·¸°Ô Çؼ­.. 

Message Map ¿¡¼­..

 

ON_REGISTERED_MESSAGE(g_uShellRestart, OnTrayShow)

 

ÀÌ·±½ÄÀ¸·Î ¸Þ¼¼Áö Çڵ鷯¸¦ ¼³Ä¡ÇϽðí..

 

LRESULT CMyDlg::OnTrayShow(WPARAM wParam, LPARAM lParam)
{
    m_Tray.ShowTray();        // TrayIconÀ» ´Ù½Ã º¸¿©ÁÝ´Ï´Ù. ShowTray ´Â ÀÓ½Ã.

 

ÀÌ·±½ÄÀ¸·Î ÇØÁÖ½Ã¸é µË´Ï´Ù..

 Å×½ºÆ®¸¦ Çغ¸½Ã°í ½ÍÀ¸½Ã´Ù¸é..Ctrl+Alt+Del À» ´­·¯¼­..Explorer ¸¦ Á×À̼¼¿ä.. 

±×·¯¸é tray iconµéÀÌ »ç¶óÁúÅÙµ¥..

ÀÌ ¸Þ¼¼Áö¸¦ µî·ÏÇÑ ÇÁ·Î±×·¥µéÀº ..¿©ÀüÈ÷ ³²¾ÆÀÖ´Â ¸ð½ÀÀ» º¼ ¼ö ÀÖ½À´Ï´Ù.

 

<ƯÁ¤ÇÑ ´ÙÀÌ¾Ë·Î±× ¹Ú½º¿¡ ¹öÆ°À» ´©¸¥ È¿°ú¸¦ ³»±â>

ÀÏ´Ü ´ÙÀÌ¾Ë·Î±× ¹Ú½ºÀÇ ÇÚµéÀ» ¾ò¾î¾ß°ÚÁö¿ä?

HWND hWnd;

hWnd = ::FindWindow("Ŭ·¡½º ¸í", "ŸÀÌƲ ¸í");

  º¸Åë ´ÙÀ̾˷α׹ڽº´Â Ŭ·¡½º¸íÀÌ "#32770" ÀÌÁÒ,

  µû¶ó¼­  ::FindWindow("#32770", NULL); ÀÌ·¸°ÔÇϸé ŸÀÌƲ¿¡ °ü°è¾øÀÌ Ã¹¹ø° ´ÙÀÌ¾Ë·Î±× ¹Ú½º¸¦ ã¾Æ ÇÚµéÀ» ³Ñ°ÜÁÖÁÒ ±×´ã¿£ ¾Æ·¡¿Í °°ÀÌ Çغ¸±æ...

 

  ::PostMessage(hWnd, WM_COMMAND, IDOK, 0L);   //"OK" ¹öÆ° ´©¸§
  ::PostMessage(hWnd, WM_COMMAND, IDNO, 0L);   //"NO" ¹öÆ° ´©¸§
  ::PostMessage(hWnd, WM_COMMAND, IDCANCEL, 0L);   //"CANCEL" ¹öÆ° ´©¸§

 

<ÇÁ·Î±×·¥³»¿¡¼­ ÇÑ¿µÀüȯÀ» ÇÏ´Â ¹æ¹ý>

ÇØ´ç Çì´õÆÄÀÏ : imm.h  ÇØ´ç ¶óÀ̺귯¸® ÆÄÀÏ : imm32.lib

Çѱ۸ðµå¿Í ¿µ¹®¸ðµå¸¦ ÀüȯÇÏ´Â ÇÔ¼ö´Â ´ÙÀ½ µÎ°¡ÁöÀÔ´Ï´Ù.

 

1. Çѱ۸ðµå·Î ÀüȯÇÏ´Â ¹æ¹ý

void CHanengClass::SetHanMode(HWND hWnd)
{
    HIMC hIMC = ImmGetContext(hWnd);
    DWORD dwConv, dwSent;
    DWORD dwTemp;

    ImmGetConversionStatus(hIMC,&dwConv,&dwSent);
 
    dwTemp = dwConv & ~IME_CMODE_LANGUAGE;
    dwTemp |= IME_CMODE_NATIVE;
    dwConv = dwTemp;
    ImmSetConversionStatus(hIMC,dwConv,dwSent);
    ImmReleaseContext(hWnd,hIMC);
}

 

2. ¿µ¹®¸ðµå·Î ÀüȯÇÏ´Â ¹æ¹ý

void CHanengClass::SetEngMode(HWND hWnd)
{
    HIMC hIMC = ImmGetContext(hWnd);
    DWORD dwConv, dwSent;
    DWORD dwTemp;
 
    ImmGetConversionStatus(hIMC,&dwConv,&dwSent);
 
    dwTemp = dwConv & ~IME_CMODE_LANGUAGE;
    dwTemp |= IME_CMODE_ALPHANUMERIC;
    dwConv = dwTemp;
    ImmSetConversionStatus(hIMC,dwConv,dwSent);

    ImmReleaseContext(hWnd,hIMC);
}

 

<DialogÀÇ Min/Max/Close Box¸¦ Run Time Show/Hide>

// ¾Æ·¡ÀÇ ¼¼ ¸Þ¼¼Áö Çڵ鷯´Â
// Dialog Client Area¿¡ ¸¸µç °¢ ButtonÀ» À§ÇÑ°ÍÀÔ´Ï´Ù.
// ÀÌ °¢ ButtonµéÀ» Ŭ¸¯Çϸé Title Bar»óÀÇ ÇØ´ç Box°¡ Show/HideµÇÁÒ.

void CTestDlg::OnBtnMin()
{
     // TODO: Add your control notification handler code here
     static BOOL bEnable = TRUE;
     bEnable = bEnable ? FALSE : TRUE;    
     if(bEnable)
           ModifyStyle(0,WS_MINIMIZEBOX);
     else
           ModifyStyle(WS_MINIMIZEBOX,0);

     PostMessage(WM_NCACTIVATE,TRUE);
}

void CTestDlg::OnBtnMax()
{
     // TODO: Add your control notification handler code here
     static BOOL bEnable = TRUE;
     bEnable = bEnable ? FALSE : TRUE;    
     if(bEnable)
         ModifyStyle(0,WS_MAXIMIZEBOX   );
     else
         ModifyStyle(WS_MAXIMIZEBOX   ,0);
  
     PostMessage(WM_NCACTIVATE,TRUE);
}

void CTestDlg::OnBtnClose()
{
      // TODO: Add your control notification handler code here
      static BOOL bEnable = TRUE;
      CMenu* pSysMenu = GetSystemMenu(FALSE);
      if (pSysMenu != NULL) {
           bEnable = bEnable ? FALSE : TRUE;
           if(bEnable)
                pSysMenu->EnableMenuItem(SC_CLOSE,  MF_ENABLED | MF_BYCOMMAND);
           else
                pSysMenu->EnableMenuItem(SC_CLOSE, MF_DISABLED | MF_BYCOMMAND);
      }
}

 

<error LNK2001: unresolved external symbol _main>

error LNK2001: unresolved external symbol _main

ÀÌ ¿¡·¯°¡ ¹ß»ýÇÏ´Â °æ¿ì´Â Å©°Ô µÎ°¡Áö°¡ ÀÖ½À´Ï´Ù. 

 

1. API·Î ÇÁ·Î±×·¡¹ÖÀ» óÀ½ ÇϽô ºÐµéÀÌ ÈçÈ÷ ÇÏ´Â ½Ç¼ö °°½À´Ï´Ù.

 À©µµ¿ì¿¡¼­ ÇÁ·Î±×·¥Àº Å©°Ô µÎ°¡Áö·Î ºÐ·ùÇÒ ¼ö ÀÖ½À´Ï´Ù.

µµ½ºÃ³·³ console â¿¡ ÅؽºÆ®¸¸À» Ãâ·ÂÇÏ´Â console ÇÁ·Î±×·¥°ú ÈçÈ÷ ¾²´Â GUI¸¦ °¡Áø ÇÁ·Î±×·¥ÀÌ ÀÖÁÒ.  

Visual C++¿¡¼­ ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé ¶§

Win32 Application : WinMain ÇÔ¼ö¿¡¼­ ½ÃÀÛÇÏ°Ô µÇ´Â GUI ÇÁ·Î±×·¥

Win32 Console Application : main ÇÔ¼ö¿¡¼­ ½ÃÀÛÇÏ´Â console ÇÁ·Î±×·¥

ÀÌ µÎ°¡Áö°¡ ÀÖ½À´Ï´Ù.

 Á¦¸ñ¿¡ ÀûÀº °Í °°Àº ¿¡·¯°¡ ³ª´Â ºÐµéÀº ´ëºÎºÐ GUI ÇÁ·Î±×·¥À» ¸¸µå½Ã·Á°í ÇÏ°í WinMainÀº ¸¸µå¼Ì´Âµ¥, ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé ¶§ console applicationÀ» ¼±ÅÃÇϽŰ̴ϴÙ. ¹Ý´ë·Î WinMainÀÌ ¾ø´Ù°í ¿¡·¯°¡ ³ª¿À¸é GUI ÇÁ·ÎÁ§Æ®¸¦ ¼±ÅÃÇÏ°í¼­ main ÇÔ¼ö¸¦ ÀÛ¼ºÇϽŠ°ÍÀÌ°ÚÁÒ. 

ÀÚ, ±×·³ ¾î¶»°Ô ÇØ°áÇÏ´À³Ä. ¼³Á¤À» ¹Ù²ãÁÖ¸é µË´Ï´Ù. ÇÁ·ÎÁ§Æ® ¼¼ÆÃ(Alt + F7)¿¡¼­ LinkÅÇÀ» ´©¸£¸é Á¦ÀÏ ¾Æ·¡¿¡ ¿¡µðÆ® ¹Ú½º°¡ º¸ÀÌÁÒ? Àß º¸¸é /subsystem:console À̶ó°í ½áÀÖÀ» °Ì´Ï´Ù. ÀÌ°É /subsystem:windows·Î ¹Ù²ãÁÖ¼¼¿ä. (¶Ç´Â »óȲ¿¡ µû¶ó¼­ ±× ¹Ý´ë·Î ÇØÁÙ ¼öµµ ÀÖ°ÚÁÒ) ÀÌ ¿É¼ÇÀÇ ¿ªÇÒÀº ¸µÄ¿¿¡°Ô À־ ÀÌ ÇÁ·Î±×·¥ÀÌ ¾î¶² ÇÔ¼ö·ÎºÎÅÍ ½ÃÀÛÇØ¾ß ÇÏ´ÂÁö¸¦ ¾Ë·ÁÁÖ´Â °Ì´Ï´Ù. ÀÌ ¿É¼ÇÀÌ consoleÀ̶ó¸é mainÀ», windows¶ó¸é WinMainÀ» ã¾Æ¼­ ±× ÇÔ¼ö¿¡¼­ºÎÅÍ ÇÁ·Î±×·¥ÀÌ ½ÃÀÛÇÏ°Ô Çϴ°ÅÁÒ.

 

2. ATL¿¡¼­ ÄÁÆ®·ÑÀ» ¸¸µé ¶§ ÀÌ ¿¡·¯°¡ ³¯ ¼ö ÀÖ½À´Ï´Ù. 

µð¹ö±×¿¡¼­´Â Àß ÄÄÆÄÀÏÀÌ µÇ´ø°Ô ¸±¸®Áî·Î ºôµåÇϸé Àú ¿¡·¯°¡ ³¯ ¼ö ÀÖ½À´Ï´Ù. ATL¿¡¼­´Â »ý¼ºµÇ´Â ÄÚµåÀÇ Å©±â¸¦ ÃÖ¼ÒÈ­ Çϱâ À§Çؼ­ CRT (C RunTime) ÇÔ¼öÀÇ ÀϺθ¦ Á¦ÇÑÇÏ°í Àֱ⠶§¹®ÀÌÁÒ(Á¤È®È÷ ¸»ÇÏÀÚ¸é start up Äڵ带 ³ÖÁö ¾Ê½À´Ï´Ù). ±×·±µ¥ ÇÁ·ÎÁ§Æ®¿¡¼­ ƯÁ¤ C ÇÔ¼ö¸¦ »ç¿ëÇϸé ATL¿¡¼­ Á¦ÇÑÇÑ CRTÀÇ ±â´ÉÀÌ ÇÊ¿äÇØÁö°í µû¶ó¼­ ¿¡·¯°¡ ³ª´Â°Ì´Ï´Ù.

 

ÀÌ ÇØ°áÃ¥µµ °£´ÜÇÕ´Ï´Ù.

a. ÇÁ·ÎÁ§Æ® ¼¼Æÿ¡¼­ predefined keyword¸¦ ã¾Æ¼­ _ATL_MIN_CRT¸¦ Áö¿öÁÖ¼¼¿ä.

b. ÃʱâÈ­°¡ ÇÊ¿äÇÑ CRT ÇÔ¼ö¸¦ »ç¿ëÇÏÁö ¸¶¼¼¿ä. -_-; MSDN¿¡ µû¸£¸é strcmp´ë½Å lstrcmp¸¦ »ç¿ëÇÏ´Â ½ÄÀ¸·Î ÇÇÇØ°¥ ¼ö ÀÖ´Ù°í ÇÕ´Ï´Ù.

 

ÀÚ¼¼ÇÑ°Ç MSDN¿¡¼­ _ATL_MIN_CRT¸¦ ã¾Æº¸¼¼¿ä. (»öÀο¡¼­ ÀÔ·ÂÇÏ¸é ³ª¿É´Ï´Ù.)

 

<Ä£ÀýÇÑ ¸Þ½ÃÁö WM_NULL>

1.¿ä¾à

ƯÁ¤ Thread ³ª Window ¿¡ ¾Æ¹«·± ¿µÇâÀ» ³¢Ä¡Áö ¾ÊÀ¸¸é¼­ ´Ü¼øÈ÷ ±× Thread ³ª Window °¡ »ì¾ÆÀÖ´ÂÁö¸¦ È®ÀÎÇÏ°í ½ÍÀ»¶§ 'Ä£ÀýÇÑ ¸Þ¼¼Áö' ¸¦ »ç¿ëÇÏ½Ã¸é µË´Ï´Ù.  

2.º»¹®

 MSDN ÀÇ '»öÀÎ' ¿¡´Â ³ª¿ÍÀÖÁö ¾ÊÁö¸¸(MSDN ¿¡¼­ ƯÀÌÇÏ´Ù ½ÍÀº°ÍµéÀº ÀϹÝÀûÀ¸·Î '»öÀÎ'¿¡ ¾øÁÒ. ^^), À©µµ¿ì ¸Þ¼¼Áö Á¾·ù¿¡ WM_NULL À̶ó´Â ¸Þ¼¼Áö°¡ Á¸ÀçÇÕ´Ï´Ù. MSDN À̳ª ´Ù¸¥ Ã¥¿¡¼­ WM_NULL ¸Þ¼¼Áö¸¦ benign message ¶ó°í ¼Ò°³ÇÏ°í ÀÖ½À´Ï´Ù.

WinUser.H ÆÄÀÏ¿¡ ¾Æ·¡¿Í °°ÀÌ Á¤ÀǵǾî ÀÖ½À´Ï´Ù.

 #define WM_NULL                         0x0000

 ÀÌ ¸Þ¼¼Áö´Â ¸Þ¼¼Áö Å¥¿¡ ³¯¶ó°¡±ä ÇÏÁö¸¸, ¾î´À À©µµ¿ì¿¡¼­µµ ÀÌ ¸Þ¼¼Áö¸¦ ó¸®ÇÏÁö ¾Ê±â ¶§¹®¿¡ ±×³É ¸Þ¼¼Áö Å¥¿¡ µé¾î°¡±â¸¸ ÇÏ´Â ¸Þ¼¼ÁöÀÔ´Ï´Ù. ±×·³ À©µµ¿ì´Â ¿Ö ÀÌ·± ¸Þ¼¼Áö¸¦ ¸¸µé¾î ³õÀº °É±î¿ä? Debugging Application ¿¡¼­ º¸¸é ÀÌ ¸Þ¼¼Áö¸¦ Á¤ÁöÇØÀִ ȤÀº ¸Þ¼¼ÁöÅ¥°¡ idle »óÅ¿¡ ÀÖ´Â thread ¸¦ ±ú¿ì±â À§Çؼ­ ( ¸¶Ä¡ ¼ú ¸Ô±â Àü¿¡ ¹ä¸Ô´Â °Íó·³..) »ç¿ëÇÏ°í ÀÖ½À´Ï´Ù. ¶ÇÇÑ ÇØ´ç À©µµ¿ì°¡ Á¤»óÀûÀ¸·Î ¸Þ¼¼Áö¸¦ ¹ÞÀ» ¼ö ÀÖ´Â »óÅÂÀÎÁö ´Ü¼øÈ÷ È®Àθ¸ ÇÏ°í ½ÍÀ»¶§ ( ÀÌ·± °æ¿ì°¡ Á¾Á¾Àִµ¥, ¾î¶² ¸Þ¼¼Áö¸¦ º¸³»¾ß ÇÒÁö ³­°¨ÇÒ¶§°¡ ÀÖ½À´Ï´Ù.

3.¿¹Á¦

 

- the end of this article -