<´ÙÀ̾ó·Î±× ¹Ú½º µ¿ÀûÀ¸·Î Å°¿ì±â>

GetWindowRect( &test );

int x,y,cx,cy;

x = test.left;
y = test.top;
cx = (test.right-test.left) + 30;
cy = (test.bottom-test.top) + 30;

MoveWindow(x,y,cx,cy, TRUE );

À§Ã³·³ ÇÏ¸é ´ÙÀ̾ó·Î±× ¹Ú½º°¡ 30 Ä¿Áý´Ï´Ù.

 

<µµ½º&ÄÜ¼Ö ÇÁ·Î±×·¥ °ü·Ã(â¾È¶ç¿ì±â,StdOut, Wait)>

ÀÌ ÄÚµå´Â DOS ÇÁ·Î±×·¥ ¶Ç´Â Win32 Console ¸ðµå ÇÁ·Î±×·¥À» ¿ÜºÎ½ÇÇàÈ­ÀÏ·Î »ç¿ëÇÏ°íÀÚ ÇÒ¶§ ¹®Á¦°¡ µÇ´Â ´ÙÀ½ ¼¼°¡Áö Ç׸ñÀ» ÇØ°áÇÏ´Â ¹æ¹ýÀ» ´ã°í ÀÖ½À´Ï´Ù.

 

1. ÄܼÖâ(DOSâ) ⠾ȶç¿ì±â.

2. ³¡³¯¶§±îÁö ±â´Ù¸®±â(½ÇÇàÀÌ ³¡³­°ÍÀ» °¨ÁöÇϱâ)

3. Ãâ·ÂµÇ´Â ³»¿ëÀ» È­ÀÏ·Î ÀúÀåÇϱâ

(¸¸ÀÏ ÀÌ ºÎºÐÀ» »ç¿ëÇϽñ⠿øÄ¡ ¾ÊÀ¸½Ã¸é STARTF_USESTDHANDLES ¸¦ »èÁ¦ÇØ ÁÖ¼¼¿ä)

 

void CTttDlg::OnOK()
{
     // TODO: Add extra validation here
     PROCESS_INFORMATION pInfo;
     STARTUPINFO   sInfo;
     DWORD             exitCode;
  
     HANDLE hOut = CreateFile("stdinout.txt",
          GENERIC_WRITE, NULL, NULL,
          CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

     sInfo.cb                  = sizeof(STARTUPINFO);
     sInfo.lpReserved      = NULL;
     sInfo.lpReserved2    = NULL;
     sInfo.cbReserved2   = 0;
     sInfo.lpDesktop       = NULL;
     sInfo.lpTitle             = NULL;
     sInfo.dwFlags          = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
     sInfo.dwX                = 0;
     sInfo.dwY                = 0;
     sInfo.dwFillAttribute  = 0;
     sInfo.wShowWindow = SW_HIDE;
     sInfo.hStdOutput     = hOut;
  
      if (!CreateProcess(NULL, "command.com /c lha a tt",
           NULL, NULL, TRUE, 0, NULL, "c:\\",
           &sInfo, &pInfo)) {
                printf("ERROR: Cannot launch child process\n");
                exit(1);
      }
  
       // Give the process time to execute and finish
       WaitForSingleObject(pInfo.hProcess, INFINITE);
  
        if (GetExitCodeProcess(pInfo.hProcess, &exitCode)) {
             switch(exitCode) {
             case STILL_ACTIVE:
                  printf("Process is still active\n");
                  break;

             default:
                  printf("Exit code = %d\n", exitCode);
                  break;
             }
        } else {
             printf("GetExitCodeProcess() failed\n");
        }

        CloseHandle(hOut);
}

 À§ÀÇ CreateProcess()¸¦ È£ÃâÇÏ´Â ºÎºÐ¿¡¼­ "Command.com /c"¸¦ È£ÃâÇÏ´Â ºÎºÐÀÌ Àִµ¥ ÀÌ·¸°Ô ÇØÁÖÁö ¾ÊÀ¸¸é, È£ÃâÇÏ´Â ÇÁ·Î±×·¥ÀÌ DOS ÇÁ·Î±×·¥ÀÎ °æ¿ì ÀÚµ¿À¸·Î âÀÌ ´ÝÈ÷Áö ¾Ê´Â ¹®Á¦°¡ ¹ß»ýÇϱ⠶§¹®ÀÔ´Ï´Ù.

 

< Âü°í > 

HOWTO: Access Child Process Exit Code from 32-Bit Parent Proc.

Article ID: Q131775

 

 <Æ®¸®ÄÁÆ®·ÑÀÇ ±ÛÀÚ»öÀ» ¸¶À½´ë·Î ¹Ù²Ù±â>

common controlÀÌ 4.7 ÀÌ»óÀÌ µÇ¸é¼­ NM_CUSTOMDRAW¶ó´Â ¸Þ½ÃÁö°¡ »ý°å½À´Ï´Ù.

°øÅë ÄÁÆ®·ÑµéÀº °¢ ¾ÆÀÌÅÛÀ» ±×¸®±â Àü¿¡ ÀÌ ¸Þ½ÃÁö¸¦ ºÎ¸ð À©µµ¿ì¿¡ º¸³»Á༭ Á÷Á¢ ±×¸± ¼ö ÀÖ´Â ±âȸ¸¦ ÁÝ´Ï´Ù.

°¡Àå ½±°Ô »ç¿ëÇÒ ¼ö ÀÖ´Â ¿¹°¡ Æ®¸® ÄÁÆ®·Ñ¿¡¼­ ±ÛÀÚÀÇ »öÀ» ¹Ù²Ù´Â °ÍÀÔ´Ï´Ù.

(¸®½ºÆ® ÄÁÆ®·ÑÀ̳ª NM_CUSTOMDRAW¸¦ º¸³»´Â ´Ù¸¥ ÄÁÆ®·ÑµéÀÌ ´Ù ºñ½ÁÇÑ ¹æ¹ýÀ» »ç¿ëÇÏ¸é µË´Ï´Ù.) 

ÀÏ´Ü ¼Ò½º¸¦ º¸ÁÒ. Á¦ °æ¿ì¿¡´Â CTreeCtrlÀ» °è½ÂÇؼ­ »õ·Î¿î Æ®¸® ÄÁÆ®·ÑÀ» ¸¸µé°í notify ¸Þ½ÃÁö°¡ reflectµÇ´Â °É ¹Þ¾Æ¼­ ó¸®Çß½À´Ï´Ù.

 

XXXTreeCtrl.h

class CXXXTreeCtrl
{
    ...
    //}}AFX_MSG
    afx_msg void OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult);
    ....
};

XXXTreeCtrl.cpp

...

BEGIN_MESSAGE_MAP(CXXXTreeCtrl, CBaseTree)
    //{{AFX_MSG_MAP(CNewsTree)
    ...
    //}}AFX_MSG_MAP
    ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
    ...
END_MESSAGE_MAP()
 
...
 
void CNewsTree::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult) {
    NMTVCUSTOMDRAW* pcd = (NMTVCUSTOMDRAW*)pNMHDR;
    HTREEITEM hItem;
 
    switch ( pcd->nmcd.dwDrawStage ) {
    case CDDS_PREPAINT:
        *pResult = CDRF_NOTIFYITEMDRAW;     
        break;
    case CDDS_ITEMPREPAINT :
        hItem = (HTREEITEM)pcd->nmcd.dwItemSpec;
        if (hItem¿¡ µû¸¥ Àû´çÇÑ Á¶°Ç) {
            pcd->clrText = RGB(0, 0, 204);
            pcd->clrTextBk = RGB(255, 255, 255);
        } else {
            ...
        }
        *pResult = CDRF_DODEFAULT;// do not set *pResult = CDRF_SKIPDEFAULT
        break;
    }    

1. CDDS_PREPAINT°¡ ¿À¸é ÁøÂ¥·Î ¾ÆÀÌÅÛ ±×¸®±â Àü¿¡ ¾ËÄÑÁà¶ó´Â Ç÷¢À» ¼³Á¤ÇÕ´Ï´Ù.

2. CDDS_ITEMPREPAINT°¡ ¿À¸é ÇØ´ç ¾ÆÀÌÅÛÀÇ HTREEITEM ÇÚµéÀ» ¾ò¾î¼­ ¿øÇÏ´Â »öÀ¸·Î ¼³Á¤ÇØÁÝ´Ï´Ù.

 

Âü°í·Î ¸»¾¸µå¸®ÀÚ¸é...

1. À§ÀÇ ¿¹Ã³·³ ÇÏ¸é ¹è°æ»öÀ» ¹Ù²Ü ¼ö ÀÖÁö¸¸ fullrow selectÀÏ °æ¿ì°¡ ¾Æ´Ï¸é ±×´ÙÁöÀÔ´Ï´Ù... -_-;

2. ±×¸®°í pcd->iLevel °ªÀº °¢ Æ®¸®ÀÇ Â÷¼ö¸¦ Ç¥½ÃÇÕ´Ï´Ù. 0ÀÌ¸é ·çÆ® ³ëµå¿Í ±× ÇüÁ¦³ëµå, 1À̸é 0ÀÎ ³ëµåµéÀÇ ÀÚ½Ä ³ëµåµé... µîµî.

3. ÆùÆ®¸¦ ¹Ù²Ù´Â °Íµµ °¡´ÉÇÕ´Ï´Ù. ¾ÆÀÌÄÜÀ» ¾È±×¸®°Ô ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. CDDS_ITEMPREPAINTÀÇ °á°ú¸¦ ¹Ù²Ù¸é µË´Ï´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº MSDNÀ» º¸¼¼¿ä...

4. Âü°í·Î ±Û¾¾¸¦ ±½°Ô ÇÏ´Â Á¤µµ¸¸ ÇÊ¿äÇÏ´Ù¸é

CTreeCtrl::SetItemState(hItem, TVIS_BOLD, TVIS_BOLD); À¸·Îµµ °¡´ÉÇÕ´Ï´Ù.

5. ±×·¯³ª OE5ó·³ ÀϺθ¸ ±½°ÔÇÏ°í »öµµ µÎ°¡ÁöÀÌ»óÀ¸·Î ÇÏ·Á¸é NM_CUSTOMDRAW¿¡¼­ ´Ù ±×·ÁÁà¾ß ÇÒ°Ì´Ï´Ù. ¾Æ¸¶µµ...

 

<new·Î »ý¼ºµÈ Æ÷ÀÎÅ͸¦ ¾ÈÀüÇÏ°Ô Áö¿ìÀÚ. SafeDelete>

 Àü¿¡ ¾î´ÀºÐÀÌ Áú¹®´äº¯¶õ¿¡ new·Î »ý¼ºÇÑ Æ÷ÀÎÅ͸¦ ´Ù¸¥ ÇÔ¼ö¿¡¼­ Áö¿ì´Âµ¥ Áö¿ì°í³ª¼­ NULL·Î ¸¸µé¾îÁÖÁö ¾Ê¾Æ¼­, ±×°ÍÀ» delete·Î Áö¿öµµ µÇ´ÂÁö ÆÇ´ÜÇÒ ¼ö°¡ ¾ø´Âµ¥ ÀÌ¹Ì Áö¿öÁø °ÍÀÎÁö ÆǺ°ÇØ ³»´Â ¹æ¹ýÀ» ¹°À¸½ÅÀûÀÌ ÀÖ½À´Ï´Ù.

 ±×¶§´Â Àß ¸ô¶ú´Âµ¥, Win32¿¡¼­ Á¦°øÇÏ´Â Exception HandlingÀ» È°¿ëÇÏ¸é µÈ´Ù´Â°ÍÀ» ¾Ë¾Ò½À´Ï´Ù.  ±×·¡¼­ ¸¸µé¾î º» °ÍÀÌ, SafeDelete templateÀÔ´Ï´Ù. SafeDelete´Â ÀÎÀÚ·Î ³Ñ¾î¿Â º¯¼ö¸¦ ¾ÈÀüÇÏ°Ô deleteÇØ ÁÖ´Â ÇÔ¼öÀÔ´Ï´Ù.

¿ì¼± ¼Ò½º¸¦ º¸½ÃÁÒ.

template < class _DataType >
BOOL SafeDelete(_DataType **pDT)
{
    if (*pDT == NULL)
        return FALSE;
 
    __try
    {
        delete *pDT;
    }
    __except(GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION)
    {
        *pDT = NULL;
        return FALSE;
    }
 
    *pDT = NULL;
 
    return TRUE;
}

 

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

 

   char *p;

   SafeDelete< char >(&p);

 

  ÀÌ¿Í °°½À´Ï´Ù.

  À§¿¡¼­ p°¡ ÇÒ´çµÇÁö ¾Ê¾Ò´Âµ¥ SafeDelete·Î Áö¿ü½À´Ï´Ù.

  ±×³É deleteÇϰԵǸé ACCESS_VIOLATION¿¡·¯°¡ ¶ß°ÚÁö¿ä.  

  p°¡ ÀÌ¹Ì NULL·Î µÇ¾îÀÖ´Ù¸é SafeDelete´Â ±×³É ºüÁ® ³ª¿À¸ç,  NULLÀÌ ¾Æ´Ñµ¥ ÀÌ¹Ì delete·Î Áö¿öÁø Æ÷ÀÎÅÍ¸é ±× Æ÷ÀÎÅ͸¦ NULL·Î ¹Ù²Ù¾îÁÖ¾î ´ÙÀ½ºÎÅÍ´Â delete½Ãµµ¸¦ ÇÏÁö ¾Êµµ·Ï ÇØÁÝ´Ï´Ù.

 ÅÛÇø®Æ®·Î ¸¸µé¾úÀ¸¹Ç·Î ÀÓÀÇÀÇ Å¸ÀÔ¿¡µµ Àû¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

 

 ±×¸®°í ±»ÀÌ templateÀ» ¾²Áö ¾Ê¾Æµµ....

 

#define  SAFEDELETE(x)        SafeDelete((void **) &(x))

BOOL SafeDelete(void **ptr)
{
   if(*ptr == NULL)
       return FALSE;

   __try
   {
       delete *ptr;
   }
   __except(GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION)
   {
       *ptr = NULL;
       return FALSE;
   } 

   *ptr = NULL;
   return TRUE;
}

 

»ç¿ë ¹æ¹ýÀº °Á SAFEDELETE(p); ÇØÁÖ½Ã¹È µË´Ï´Ù.

 

<COLORREF ¿¡¼­ r, g, b ¸¦ Á¤¼öÇüÀ¸·Î »Ì¾Æº¸ÀÚ>

 ±×·¡ÇÈÀ» ó¸®ÇÏ´Ù º¸¸é RGB() ÇÔ¼ö¸¦ »ó´çÈ÷ ÀÚÁÖ »ç¿ëÇÏ°Ô µÇ´Âµ¥...

¿©±â¼­ °¡²û »¡°£»ö, ³ì»ö, ÆĶõ»öÀ» °³º°ÀûÀ» »Ì¾Æ¼­ »ç¿ëÇÒ °æ¿ì°¡ ¹ß»ýÇÏ´õ±º¿©..

 Àü¿¡´Â ¿ÞÂÊ ½¬ÇÁÆ®...¿À¸¥ÂÊ ½¬ÇÁÆ®...

¶Ç´Â ½¬ÇÁÆ® Çѹø ÇÒ·Á¸é ºñÆ®¿¬»êÀ» ÇÏ°ï ÇßÁÒ... ÀÏ·Ê....

Àü¿¡ »ç¿ëÇÏ´ø ¹æ¹ýÀ» º¸¿©µå¸³´Ï´Ù...

Áö±Ýµµ ÀÌ°Å ºñ½ÁÇÑ ¹æ¹ýÀ» »ç¿ëÇϽô ºÐµéÀÌ °è½Å´Ù¸é µÚ¿¡ ³ª¿À´Â ¹æ¹ýÀ» »ç¿ëÇØ º¸¼¼¿©.

COLORREF rgb = RGB(255, 100, 30);
long m = (long)rgb;

 

(1) Á© ÷¿¡ »ç¿ëÇÏ´ø ¹æ¹ýÀÔ´Ï´Ù.

int r = m>>16;
int g = m<<8; g = g>>16;
int b = m<<16; b = b>>16; 

(2) ¾ó¸¶Àü ²¨Á¤ »ç¿ëÇÏ´ø ¹æ¹ýÀÔ´Ï´Ù.

int r = m&0xff000; r = r>>16;
int g = m&0x00ff00; g = g>>8;
int b = m&0x0000ff;

#if !defined(GetB)
    #define GetB(rgb) ((BYTE) ((rgb) >> 16))
#endif

#if !defined(GetG)
    #define GetG(rgb) ((BYTE) (((WORD) (rgb)) >> 8))
#endif
#if !defined(GetR)
    #define GetR(rgb) ((BYTE) (rgb))
#endif 

 

±×¸®°í wingdi.h¸¦ º¸½Ã¸é

GetRValue, GetGValue, GetBValue¶ó´Â ¸ÅÅ©·Î°¡ ÀÖ½À´Ï´Ù.

GetR, GetG, GetB¿Í °°Àº ³»¿ëÀÔ´Ï´Ù.

´ç¿¬È÷ MSDN¿¡µµ µµ¿ò¸»ÀÌ ³ª¿É´Ï´Ù.

 

<¹öÆ° ÄÜÆ®·Ñ ĸ¼Ç ¹Ù²Ù±â>

¸ðµç À©µµ¿ìÀÇ ÄÁÆ®·ÑµéÀº ÇϳªÀÇ ÀÛÀº À©µµ¿ì¶ó°í º¸½Ã¸é µË´Ï´Ù. µû¶ó¼­ ÇØ´ç ÄÜÆ®·ÑµéÀÇ À©µµ¿ì °´Ã¼¸¦ È®º¸Çϼż­ SetWindowText() ÇÔ¼ö¸¦ »ç¿ëÇÏ½Ã¸é µË´Ï´Ù. 

¹öÆ° ÄÁÆ®·Ñ ID °¡ IDC_MYBTN ¶ó°í °¡Á¤ÇÑ´Ù¸é, 

ÀÌ·¸°Ô GetDlgItem() ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀÌ ÀÖ°í, ¶Ç ÇÑ°¡Áö´Â Dialog ±â¹ÝÀÌ´Ï Class Wizard ¿¡¼­ ¹öÆ° ÄÁÆ®·Ñ ¸â¹ö¸¦

À̶ó°í ¸¸µé¾úÀ» °æ¿ì

 

 

¿Í °°ÀÌ »ç¿ëÀ» Çϼŵµ µË´Ï´Ù.  

 

 

 

<¸ð´Þ¸®½º ´ÙÀ̾ó·Î±×¿¡¼­ ESCÅ°¿Í ENTERÅ° ¹«½ÃÇϱâ>

 ¸ð´Þ¸®½º ´ÙÀ̾ó·Î±×¸¦ ¸¸µé°í ÀÌ ESC,ENTER Å°¸¦ ÀÔ·ÂÇÏ¸é ´ÙÀ̾ó·Î±×°¡ »ç¶óÁö°Ô µË´Ï´Ù. ±×·¡¼­ ÀÌ µÎÅ°¸¦ ¹«½ÃÇϵµ·Ï ÇØ¾ß ´ÙÀ̾ó·Î±×°¡ »ç¶óÁöÁö ¾Ê½À´Ï´Ù.

±×·¡¼­ ´ÙÀ½°ú °°ÀÌ Ã³¸®ÇØÁÖ¸é µÇÁÒ

À§ÀÚµå·Î PreTranslateMessage()¸¦ µî·ÏÇÏ°í ¹ØÀÇ Äڵ带 ³Ö¾îÁÖ¸é µÊ.

BOOL C~~Dlg::PreTranslateMessage(MSG* pMsg)
{
    ¡¦¡¦.
    if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_ESCAPE)
        return TRUE;
    if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN)
        return TRUE;
    return CDialog::PreTranslateMessage(pMsg);
}

 

¹°·Ð ESC¿Í ENTER¸¦ ¹«½ÃÇÏ´Â °ÍÀº ÁÁ½À´Ï´Ù¸¸...

modeless ´ÙÀ̾ó·Î±×¿¡¼­´Â ¹Ýµå½Ã OnOK¿Í OnCancelÀ» ¿À¹ö¶óÀ̵å ÇØÁà¾ß ÇÕ´Ï´Ù.

¿Ö³ÄÇϸé CDialog¿¡¼­´Â ±âº»ÀûÀ¸·Î µÎ ÇÔ¼ö¿¡¼­ EndDialog¸¦ È£ÃâÇϴµ¥ ÀÌ ÇÔ¼ö´Â modal ´ÙÀ̾ó·Î±×¸¦ À§ÇÑ ÇÔ¼öÀÔ´Ï´Ù.

modeless ´ÙÀ̾ó·Î±×´Â DestroyWindow¸¦ È£ÃâÇØ¾ß Á¦´ë·Î Æı«µË´Ï´Ù. (¹¹... °è¼Ó ±× ´ÙÀ̾ó·Î±×¸¦ ½á¸ÔÀ¸½Ã°Ú´Ù¸é ShowWindow(SW_HIDE)¸¦ »ç¿ëÇÏ¸é µÇ°í¿ä.)

 ±×¸®°í ENTERÅ°´Â ±âº»ÀûÀ¸·Î µðÆúÆ® ¹öÆ°À» ´©¸£°Ô µË´Ï´Ù. ¹«½ÃÇÏ´Â °Íµµ ÁÁÁö¸¸ µðÆúÆ® ¹öÆ°À» ÀûÀýÇÑ °ÍÀ¸·Î ¹Ù²ãÁÖ´Â °Íµµ ÁÁÀº ¹æ¹ýÀÔ´Ï´Ù.  

 

ÀÌ°Ç Á¶±Ý º¸Ãæ¼³¸íÀÔ´Ï´Ù..

  »ý¼ºÇÏ´Â ´ÙÀ̾ó·Î±×°¡ ¸ð´Þ ´ÙÀ̾ó·Î±×¶ó¸é º° ¹®Á¦°¡ ¾ø°ÙÁö¸¸ ¸ð´ú¸®½º¶ó¸é ¹Ýµå½Ã IDOKÀÇ ID¸¦ °¡Áø ¹öÆ°À» ¸¸µé¾îÁà¾ß ÇÕ´Ï´Ù..

±×·¡¾ß OnOk ÇÔ¼ö¿¡¼­ DestroyWindow¸¦ È£ÃâÇØÁÙ¼ö ÀÖ°í PostNcDestroy ÇÔ¼ö¿¡¼­ ÀÚ½ÅÀÇ °´Ã¼¸¦ Á¦°ÅÇØ ÁÙ¼ö ÀÖÀ¸´Ï±î¿ä.. ¾È±×·¯¸é ¸Þ¸ð¸®°¡ ÁÙÁÙ »õ°ÚÁÒ?

 ÇÏÁö¸¸ IDOK¹öÆ°À» ³Ö°í½ÍÁö ¾Ê´Ù.. ÀÌ ´ÙÀ̾ó·Î±×´Â ¹öÆ°ÀÌ Çϳªµµ ¾ø´Â ´ÙÀ̾ó·Î±×¶ó´øÁö ȤÀº IDOK¹öÆ°ÀÌ µé¾î°¥ ÀÚ¸®°¡ ¾ø´Ù.. ÇÏ´Â °æ¿ì°¡ ÀÖÀ»°Ì´Ï´Ù..

 

ÀÌ·²¶© Á¶±Ý Æí¹ýÀ» ½á¾ß ÇÕ´Ï´Ù.. À§¿¡ ¸»¾¸µå·È´Ù½ÃÇÇ IDOK ¹öÆ°Àº ÀÖ¾î¾ß ÇÕ´Ï´Ù..

ÀÌ·²¶© ¸ÕÀú ¹öÆ°À» ¸¸µå½Ã°í IDOK·Î ¹Ù²ãÁֽŴÙÀ½¿¡ ´ëÃæ Àû´çÇÑ À§Ä¡¿¡ ³Ö¾îÁÖ½ÅÈÄ ¹öÆ°ÄÁÆ®·ÑÀÇ Visible ¼Ó¼ºÀ» ¾ø¾Ö¹ö¸®½Ã¸é µË´Ï´Ù.. Tab Stop ¼Ó¼ºµµ ¾ø¾Ö½Ã±¸¿ä.. ÅÇÀ¸·Î ¼±ÅÃÀÌ µÇ¸é ¾ÈµÅ´Ï±î¿ä..

±×¸®°í ³ª¼­ ESCÅ°¸¦ ´­·¶´Ù´øÁö ŸÀÌƲ¹ÙÀÇ X¹öÆ°À» ´­·¶À»¶§ ¸Þ½ÃÁö¸¦ °¡·Îä¼­ OnOk ÇÔ¼ö¸¦ ½ÇÇà½ÃÅ°½Ã¸é µË´Ï´Ù.. ±×¸®°í OnOk¿¡¼­ À©µµ¿ì Æı« -> ÀڽŠÁ¦°Å.. ÀÌ·±½ÄÀ¸·Î ÇÏ½Ã¸é µË´Ï´Ù..

  

<·¹Áö½ºÆ®¸®¸¦ ÀÌ¿ëÇÏ¿© ÆÄÀϸíÀ» ÀÎÀÚ·Î ½ÇÇàÆÄÀÏ ½ÇÇàÇϱâ>
<(ShellExcecut°¡ ¾Æ´Ô)>

À©µµ¿ì¿¡¼­ ÆÄÀϸíÀ» ´õºíŬ¸¯ÇÏ¸é ·¹Áö½ºÆ®¸®¿¡ ±× ÆÄÀÏÀÇ ¸µÅ© ½ÇÇà ÆÄÀÏÀÌ µî·ÏÀÌ µÇ¾î ÀÖÀ¸¸é ±× ÆÄÀϸíÀ» ÀÎÀÚ·Î ½ÇÇàÆÄÀÏÀÌ ½ÇÇàµË´Ï´Ù.

¹°·Ð ShellExecute·Î ½ÇÇàÇصµ µÇÁö¸¸ ¸¸ÀÏ ParentÀÇ ÇÁ·Î±×·¥µµ Áß´ÜÇØ¾ß ÇÒ °æ¿ì ´ÙÀ½ÀÇ ·ÎÁ÷À» ½áº¸¼¼¿ä. ÀÌ´Â ÁÖ·Î DLL ·çƾ¿¡¼­ »ç¿ëÇÕ´Ï´Ù. 

 

__declspec(dllexport) long GetNFileInfo(char* filepath)
{
    //·¹Áö½ºÆ®¸®¸¦ Àо ½ÇÇàÆÄÀÏÀ» Àоî¿Â´Ù.
    char fname[256];
    bool flag = FALSE;
    char kind[10];
    int i;
    int j;
    i = j = 0;
    kind[0] = '\0';
        
    strcpy(fname, filepath);
 
    //ÆÄÀÏÀÇ È®Àå¸í ¾òÀ½
    //¾Æ·¡ ·çƾÀÌ ¾Æ´Ñ ´õ ÁÁÀº ÇÔ¼ö°¡ Tips & Tricks¿¡ ÀÖ½¿.
    for(i=0; i<=(int)strlen(fname); i++) {
        if(fname[i] == '.') {
            flag = TRUE;
            j=0;
        }
        if(flag) {
           kind[j] = fname[i];
           j++;
        }
    }
    if(j=0)
        return NO_EXTENDED_FILE;  //#define¿¡¼­ Àü´ÞÀÎÀÚ·Î Á¤ÀÇ

    //¿©±â¼­ºÎÅÍ ·¹Áö½ºÆ®¸®¿¡¼­ ½ÇÇàÈ­ÀÏÀ» ¾ò¾î¿Â´Ù.
    TCHAR szname[64];
    LONG lRes1, lRes2;
    HKEY hRootKey;
    HKEY hSubKey;
 
    DWORD dwType;
    DWORD dwBytes=64;

 
    //·¹Áö½ºÆ®¸® ¿ÀÇÂ
    lRes1 = RegOpenKeyEx(HKEY_CLASSES_ROOT, kind, 0, KEY_ALL_ACCESS,
                                       &hRootKey);

    if(lRes1 != ERROR_SUCCESS)
        return NO_REGISTRY_FILE;  //#define¿¡¼­ Àü´ÞÀÎÀÚ·Î Á¤ÀÇ
 
    RegQueryValueEx(hRootKey, "", 0, &dwType, (LPBYTE)szname, &dwBytes);
    RegCloseKey(hRootKey);
 
    strcat(szname, "\\shell\\open\\command");

    lRes2 = RegOpenKeyEx(HKEY_CLASSES_ROOT, szname, 0, KEY_ALL_ACCESS,
                                      hSubKey);
    if(lRes2 != ERROR_SUCCESS)
        return NO_EXECUTE_FILE;  //#define¿¡¼­ Àü´ÞÀÎÀÚ·Î Á¤ÀÇ
 
    dwBytes=64;
    RegQueryValueEx(hSubKey, "", 0, &dwType, (LPBYTE)szname, &dwBytes);
    RegCloseKey(hSubKey);
 
    strcpy(fname, szname);
    if(fname[strlen(fname)-2] == '%')
    fname[strlen(fname)-3] = '\0';
 
    strcat(fname, " ");
    strcat(fname, filepath);

    STARTUPINFO si;
    memset(&si, 0, sizeof(si));
    si.cb = sizeof(si);
    
    PROCESS_INFORMATION pi;
    memset(&pi, 0, sizeof(pi));
    
    if(!CreateProcess(NULL, fname, NULL, NULL,
             FALSE, CREATE_NEW_PROCESS_GROUP,NULL, NULL, &si, &pi))
        return NO_EXECUTE;  //#define¿¡¼­ Àü´ÞÀÎÀÚ·Î Á¤ÀÇ

    //È£ÃâÇÑ ¸ÞÀÎ ÇÁ·Î±×·¥ÀÇ ½ÇÇàÀ» ÀϽÃÁßÁö
    if(WAIT_FAILED == WaitForSingleObject(pi.hProcess, INFINITE))
        return NO_END_EXECUTE;  //#define¿¡¼­ Àü´ÞÀÎÀÚ·Î Á¤ÀÇ
    return EXE_SUCESS;  //#define¿¡¼­ Àü´ÞÀÎÀÚ·Î Á¤ÀÇ

<¹ö±× Àâ±â>

 ÇÁ·Î±×·¥ ÇÏ´Ù º¸¸é °¡Àå Â¥Áõ³¯ ¶§°¡ ºÐ¸íÈ÷ ÀϾ ¼ö ¾ø´Â ÀÏÀ̶ó°í »ý°¢ÇÏ°í ÀÖ´Â µ¥ ´«¾Õ¿¡¼­ ¹öÁ£ÀÌ ÀϾ ¶§ ÀÔ´Ï´Ù. ¹ö±×ÁÒ. ÇÁ·Î±×·¡¸ÓÀÇ ½Ç¼öÀ̵ç, ¿î¿µ üÁ¦ÀÇ ½Ç¼öÀ̵ç(±Ùµ¥ ÇÁ·Î±×·¡¸Ó ½Ç¼öÀÏ °¡´É¼ºÀÌ ³ôÁÒ. ¿î¿µ üÁ¨ ºñ½Î°Ô µ·ÁÖ°í ÆÄ´Â °Å´Ï±î ¿ÀÁ×À̳ª Àß ¸¸µé¾î ³õ¾Ò°Ú½À´Ï±î?) ¹ö±× ¶§¹®¿¡ Àá ¼³Ä£ ÀûÀÌ ÇÏ·ç ÀÌƲÀÌ ¾Æ´ÏÁÒ. ±×·¡¼­ Á¦°¡ ¾²´Â µð¹ö±ë ¹æ¹ýÀ» ¸î ÀÚ Àû¾î º¼±î ÇÕ´Ï´Ù. 

 ¿ì¼±, ¸ðµç º¯¼ö¸¦ ¹ÏÁö ¾ÊÁÒ. ºÐ¸í 1,2 µÑÁß¿¡ Çϳª´Ù..¶ó°í ÇÏ´õ¶óµµ ¹ÏÁö ¾Ê½À´Ï´Ù. ±×·¡¼­ switch ¹®À» ¾µ ¶© Ç×»ó default, if ¹®À» ¾µ ¶© else¸¦ ³ÖÁÒ. ÇÔ¼ö¸¦ ¸¸µé °æ¿ì, Àü ¿ì¼± µÉ ¼ö ÀÖÀ¸¸é ¸ðµç ÇÔ¼öÀÇ ¸®ÅÏÇüÀ» ºÒ¸°À¸·Î ÇÕ´Ï´Ù. 

  CRgn ¹¹ ÀÌ·± °É·Î ¸®ÅÏÇØ¾ß ÇÑ´Ù¸é, Æ÷ÀÎÅÍ ÀÖÀ¸´Ï±î Æ÷ÀÎÅÍ·Î ³Ñ°Ü ¹ö¸®ÁÒ. ±×·¸°Ô ÇÑ ´ÙÀ½, ÇÔ¼öÀÇ Ã¹¸Ó¸®¿¡¼­ ÇÏ´Â ÀÏÀº Ç×»ó ±× ÇÔ¼ö ³»¿¡¼­ ¾µ °ªµé(º¸Åë ÆĶó¹ÌÅÍ°¡ µÇ°ÚÁÒ)ÀÇ À¯È¿¼º °Ë»ç ÀÔ´Ï´Ù. ¸»ÀÌ ¸ÚÀÖ´Â µ¥, »ç½Ç º°°Å ¾ø±¸, if¹®À¸·Î Âß °Ë»çÇÏ´Â °ÅÁÒ. ±× ¶©, ÆÄÀÏ Ã¹¸Ó¸®¿¡ #define _ENABLEERRORMESSAGE_ ÀÌ·¸°Ô ÇØÁÖ°í, if¹® ¾È¿¡¼­ 

 

if(¾î¼±¸ Àú¼±¸ Çؼ­ false¸¦ ¸®ÅÏÇØ¾ß ÇÑ´Ù¸é){
#ifdef _ENABLEERRORMESSAGE_
      AfxMessageBox(_T("¿¡·¯¿¡¿ä. ~~~°¡ À߸øµÇ¾ú³×¿ä^^"));
#endif
#ifdef _DEBUG
      TRACE2(_T("%s(%d) : ¿¡·¯ ¹ß°ß!! ³»¿ë - ¾î¼±¸~~~"),__FILE__,__LINE__);
#endif
      return false;
}

 

 ÀÌ·¸°Ô ÇØÁÖÁÒ. TRACE±¸¹®Àº ÄÄÆÄÀÏ ¸ðµå¿¡ µû¶ó ¾Ë¾Æ¼­ ÄÄÆÄÀÏ µÇ°ÚÁö¸¸, ¸íÈ®È÷ ÇÒ·Á±¸ Àú·¸°Ô Çϱ¸¿ä. Àú·¸°Ô ÇÏ°í, Å×½ºÆ® ³¡³ª¸é

#define _ENABLEERRORMESSAGE_  

ºÎºÐÀ» ÁÖ¼®Ã³¸®ÇÏÁÒ. TRACE±¸¹®À» Àú·¸°Ô Çϸé Àú ±¸¹®ÀÌ µð¹ö±× ¾Æ¿ôDz â¿¡ ³ª¿Ã ¶§ ±× ÁÙÀ» ´õºíŬ¸¯Çϰųª F4¸¦ ´©¸£¸é Àú ÁٷΠij·µÀÌ À̵¿ÇÏ´õ±º¿ä. ¶Ç ÄÄÆÄÀÏ ³¡³ª¸é, Control + F5º¸´Ü, Á» ´À¸®Áö¸¸, F5¸¦ ´­¸£ÁÒ. 

 ±×·¸°Ô Çؼ­ ¿¡·¯³ª¸é, ¸Þ¼¼Áö ¹Ú½º ¶ßÀݾƿä. 'Ãë¼Ò' 'Àç½Ãµµ' '¹«½Ã' ¹¹ ÀÌ·±°Å ³ª¿À´Â µ¥, ±× ¶§ 'Àç½Ãµµ' ´©¸£¸é ¾îµð¼­ ¿¡·¯°¡ ³µ´Â Áö ±× ºÎºÐÀ¸·Î À̵¿ÇÏÁÒ. 

  ±× ¶§ ¾î¿ ¶© ¾î¼À Äڵ尰Àº °Ô ³ª¿À´Â µ¥, ±× ¶© µð¹ö±× Åø ¹Ù Áß¿¡ CallStackâ ¶ç¿ö¼­ ÇÔ¼ö°¡ ½ÇÇàµÈ ¼ø¼­¸¦ °Å²Ù·Î ã¾Æ°¡ÁÒ. ¾î¼À Äڵ尡 ¾Æ´Ï¸é º¸Åë  ASSERT±¸¹®¿¡¼­ °É¸®°Ô µÇ´Â µ¥ ±×°É º¸°í ¾îµð°¡ À߸øµÇ¾ú´Â Áö ¾Ë ¼ö ÀÖÁÒ. °¡·É

 ASSERT(::IsWindow(hWnd));

¿¡¼­ °É·È´Ù¸é, ¾ÆÁ÷ À©µµ¿ì°¡ ¸¸µé¾îÁöÁö ¾ÊÀº °æ¿ìÁÒ.

  ÀÌ·± °Ç, PreCreateWindow°°ÀÌ, À©µµ¿ì¸¦ ¸¸µé±â Àü¿¡ ½ÇÇàµÇ´Â ÇÔ¼ö¿¡¼­

 GetClientRect();

°°ÀÌ À©µµ¿ìÀÇ Å©±â¸¦ ¾ò¾î°¥·Á¸é ¹ß»ýÇÏ°ÚÁÒ. Æ÷ÀÎÅ͸¦ À߸ø ¾µ¶© ±×°Ç Á» ¾î·Æ´õ¶ó±¸¿ä... mfcÇÔ¼ö Áß¿¡µµ ºÒ¸°Çü °ªÀ» ¸®ÅÏÇÏ´Â ÇÔ¼ö¸¦ ¾²¸é ±×µÚ ¹Ù·Î ¸®ÅÏ°ªÀ» È®ÀÎÇÑ´ä´Ï´Ù. ÇѹøÀº À©2000¿¡¼­

  CRgn rgn;
  ASSERT(rgn.CreateRectRgn(0,0,0,0)); 

 ÇÑ ÀûÀÌ ÀÖ¾ú´Â µ¥, À©98·Î °¡´Ï±î ¿¡·¯°¡ ³ª´õ¶ó±¸¿ä. ÀÌ ºÎºÐ¿¡¼­ °É¸° °Ì´Ï´Ù.

  À©98Àº ÁÂÇ¥°ªÀ» ¸ðµÎ 0À¸·Î ÁÖ¸é ¿µ¿ªÀÌ ¸¸µé¾îÁöÁö ¾Ê¾Ò´ø °Ì´Ï´Ù. ¾î¿ ¶© ³ª¸¸ÀÇ ASSERT±¸¹®À» ¸¸µé±âµµ ÇÏÁÒ. ÀÌ·± ½ÄÀ¸·Îµµ ¿¡·¯¸¦ ¸øãÀ¸¸é Àû´çÇÑ °÷¿¡ ºê·¹ÀÌÅ©Æ÷ÀÎÆ® °É¾î ³õ±¸, Âß °¡´Ù°¡ ¿¡·¯³ª´Â °÷¿¡¼­ GetLastError();±¸¹®À» ½á¼­ ¹«¾ùÀÌ À߸øµÇ¾ú´Â Áö ¾Ë¾Æ°¡±âµµ ÇÕ´Ï´Ù.  ¿¹¿Ü 󸮸¦ ¸¹ÀÌ ÇØÁÖ¸é óÀ½¿£ È®½ÇÈ÷ ¿À·¡ °É¸®Áö¸¸ È®½ÇÈ÷ µð¹ö±ëÇϱä ÆíÇÏ´õ¶ó±¸¿ä.

 

<¸®¸ðÆ® µð¹ö±ë Çϱâ>

 ÀÏ´Ü µð¹ö±ëÀ» ½ÃÀÛÇÒ PCÀÇ ÇÁ·ÎÁ§Æ® ¸Þ´ºÀÇ Setting À» Ŭ¸¯ÇÕ´Ï´Ù. ±× Áß Debug tab À» ¼±ÅÃÇϸé Excutable for Debug Session ÀÌ Àִµ¥, ÀÌ ¶õÀ» ÀÚ½ÅÀÇ ÇÁ·Î±×·¥ÀÌ ÀÖ´Â µð·ºÅ丮¿Í È­ÀϸíÀ» ¾²µµ·Ï ÇÕ´Ï´Ù.

 µÎ¹ø° ¶õÀÎ Working Directory ´Â ºñ¿ö ³õ½À´Ï´Ù.

 ¼¼¹ø°¶õÀº Remote Executable path ·Î »ó´ë¹æ pc ( ½ÇÇàÀÌ µÉ .. )¿¡¼­ Àâ¾Æ³õÀº ³» °¡»ó µå¶óÀ̺ê¿Í ½ÇÇàÈ­ÀÏ ¸íÀ» ¾²µµ·Ï ÇÕ´Ï´Ù. ( ÀÏ´Ü »ó´ë¹æ¿¡¼­ ³»°¡ µð¹ö±ëÀ» ½ÇÇàÇÒ µð·ºÅ丮¸¦ °¡»óµå¶óÀ̺ê·Î ¿¬°áÇؾ߸¸ ÇÕ´Ï´Ù. ±×·¯±â À§Çؼ± ´ç¿¬È÷ ³×Æ®¿öÅ©»ó¿¡¼­ ±× µð·ºÅ丮´Â °øÀ¯°¡ µÇ¾î¾ß¸¸ ÇÏ°ÚÁö¿ä )

  ±× ´ÙÀ½Àº build ¸Þ´º¾È¿¡ debugger remote connection À» ¼±ÅÃÇÕ´Ï´Ù. ¾Æ¸¶ local, network µîÀÇ ¿©·¯ connection type ÀÌ ÀÖÀ» °Ì´Ï´Ù. ±× Áß ÀÚ½ÅÀÌ ¿øÇÏ´Â ³×Æ®¿öÅ©¸¦ ¼±ÅÃÇÑÈÄ setting À¸·Î ÀÚ½ÅÀÇ ½ÇÇàÈ­ÀÏÀÌ ½ÇÇàÀÌ µÉ »ó´ë¹æÀÇ ³×Æ®¿öÅ© ÁÖ¼Ò¸¦ ±âÀÔÇÕ´Ï´Ù. 

 »ó´ë¹æ pc ¿¡¼­ msvcmon.exe È­ÀÏÀ» ¶ç¾î ³õ½À´Ï´Ù.(ÀÚÁÖ¾²ÀÌ´Ï ¹ÙÅÁÈ­¸é¿¡ ¹Ù·Î°¡´Â ¾ÆÀÌÄÜÀ¸·Î...) ¹°·Ð ±×°÷¿¡¼­µµ ¼ÂÆÃÀº ÇÊ¿äÇÕ´Ï´Ù. ¿¬°áÀÌ µÉ »ó´ë¹æÀÇ ³×Æ®¿öÅ© ÁÖ¼Ò¸¦ ±âÀÔÇØ¾ß ÇÕ´Ï´Ù.

 ±×¸®°í connection À¸·Î ´ë±â»óÅ¿¡¼­ ±â´Ù¸³´Ï´Ù. ±×¸®°í´Â f5 Å°·Î µð¹ö±ëÀ» ½ÃÀÛÇϸé Àá½ÃÈÄ ÀÌ°ÍÀú°Í dll È­ÀÏ¿¡ ´ëÇؼ­ ºÒ¸¸(?)À» Åä·ÎÇÒ ¼ö (?) ÀÖÀ¸³ª ¹«½ÃÇÏ°í ³Ñ¾î°©´Ï´Ù. ( µÎ ÄÄÀÇ ¼ÒÇÁÆ®¿þ¾î »óÅ°¡ °°Àº°Ô Á¦ÀÏ ÆíÇÕ´Ï´Ù. °°Àº ¹öÀüÀÇ À©µµ¿ì, ¼­ºñ½º Æѵµ °°ÀÌ ±ñ ºñÁÖ¾ó ½ºÅõµð¿À.....)

 ¾Æ¸¶ ¸®¸ðÆ®°¡ µÇ°íÀÖ´Â ÀÚ½ÅÀÇ ÇÁ·Î±×·¥À» »ó´ë¹æÀÇ pc ¿¡¼­ º¸½Ç¼ö°¡ ÀÖÀ»°Ì´Ï´Ù.

 

- ¸®¸ðÆ® µð¹ö±ë¿¡ ÇÊ¿äÇÑ È­ÀÏ 

¸®¸ðÆ® µð¹ö±ë¿¡ ÇÊ¿äÇÑ È­ÀÏÀº µð¹ö±ëÇÒ ÄÄÇ»ÅÍ¿¡¼­´Â VC++ ÀÌ ¼³Ä¡µÇ¾îÀֱ⠶§¹®¿¡ Ãß°¡·Î ÇÊ¿äÇÑ È­ÀÏÀÌ ¾ø½À´Ï´Ù. Ÿ°Ù ÄÄÇ»ÅÍ¿¡´Â ´ÙÀ½°ú °°Àº È­ÀϵéÀÌ ÇÊ¿äÇÕ´Ï´Ù.

ÀÌ»ó 4°³ÀÇ È­ÀÏÀº \Program Files\Microsoft Visual Studio\Common\MSDev98\Bin

µð·ºÅ丮¿¡ ÀÖ½À´Ï´Ù.

ÀÌ»ó 2°³ÀÇ È­ÀÏÀº \Windows\System µð·ºÅ丮¿¡ ÀÖ½À´Ï´Ù.

ÀÌ È­ÀϵéÀ» Ÿ°ÙÄÄÇ»ÅÍÀÇ \Windows\System µð·ºÅ丮·Î º¹»çÇÕ´Ï´Ù.

 

- À©µµ¿ìÁî NT¿¡ °üÇÑ Ãß°¡»çÇ×

À©µµ¿ìÁî NT ¿¡¼­´Â À§ÀÇ È­Àϵé ÀÌ¿Ü¿¡ PSAPI.DLLÀ̶õ È­Àϵµ System µð·ºÅ丮·Î º¹»ç ÇؾßÇÕ´Ï´Ù. MSVCRT.DLL È­ÀÏÀ» System32 µð·ºÅ丮·Î ¿Å±é´Ï´Ù.

 ÇÁ·Î±×·¥ÀÌ »ç¿ëÇÏ´Â DLLµéµµ Ÿ°ÙÄÄÇ»ÅÍ·Î º¹»çÇØ¾ß µË´Ï´Ù. ¸±¸®Áî ¹öÀü ·±Å¸ÀÓ DLLÀº ¿î¿µÃ¼Á¦¿Í °°ÀÌ ¼³Ä¡°¡ µÇ¾ú°ÚÁö¸¸ µð¹ö±× ¹öÀü DLLµéÀº ±âº»ÀûÀ¸·Î´Â ¼³Ä¡°¡ ¾ÈµÇ¾ú°ÚÁÒ? 

±âº»ÀûÀ¸·Î MSVCRTD.DLL(Visual C++ Runtime DLL) ÀÌ ÇÊ¿äÇÏ°í iostream°ú °ü·ÃµÈ ÇÔ¼ö¸¦ »ç¿ëÇϼ̴ٸé MSVCIRTD.DLLÀÌ Ãß°¡µË´Ï´Ù. 

MFC¸¦ »ç¿ëÇÏ½Å´Ù¸é ´ÙÀ½ È­Àϵ鵵 Ãß°¡µË´Ï´Ù.

±×¿Ü¿¡ ÇÁ·Î±×·¥ÀÌ Ãß°¡ÀûÀ¸·Î »ç¿ëÇÏ´Â DLLÀÌ ÀÖ´Ù¸é ±×°Íµµ º¹»çÇؾ߰ÚÁö¿ä. ¸¸ÀÏ Å×½ºÆ®ÇÒ ÇÁ·Î±×·¥¿¡¼­ Á¤È®È÷ ¾î¶² DLLµéÀ» »ç¿ëÇÏ´ÂÁö ¸ð¸£½Ã°Ú´Ù¸é ·ÎÄ÷Πµð¹ö±ë ÇÒ¶§ VC++ IDE(ÅëÇÕ°³¹ßȯ°æ)ÀÇ Output Window¿¡ ³ª¿À´Â ¸Þ½ÃÁöµéÀ» Âü°íÇϼ¼¿ä.

¿¹¸¦ µé¾î "Loaded symbols for 'C:\WINDOWS\SYSTEM\MFCO42D.DLL" À̶õ ¸Þ½ÃÁö°¡ ÀÖ´Ù¸é ÇÁ·Î±×·¥ÀÌ MFCCO42D.DLLÀ» »ç¿ëÇÑ´Ù´Â ¶æÀ̴ϱî Ÿ°Ù ÄÄÇ»ÅÍ¿¡µµ ÀÌ È­ÀÏÀÌ ÀÖ¾î¾ß ÇÕ´Ï´Ù.

  ÀÌ ¹æ¹ýÀº ÀϹÝÀûÀ¸·Î ÇÁ·Î±×·¥À» ¹èÆ÷ÇÒ ¶§µµ À¯¿ëÇÑ ÆÁÀ̹ǷΠ±â¾ïÇØ µÎ½Ã¸é À¯¿ëÇÒ °Ì´Ï´Ù

 

- Ÿ°Ù ÄÄÇ»ÅÍÀÇ ¸®¸ðÆ® µð¹ö±ë ȯ°æ¼³Á¤Çϱâ

1. MSVCMON.EXE¸¦ ½ÇÇàÇÕ´Ï´Ù.

"Visual C++ Debug Monitor"¶õ Á¦¸ñÀ» °¡Áø ´ÙÀ̾˷αװ¡ ³ªÅ¸³ª´Âµ¥, ¸®½ºÆ®¹Ú½º¿¡ TCP/IP¶õ Ç׸ñ¸¸ ÀÖÀ»°Ì´Ï´Ù. VC++ 4.2¹öÀü¿¡´Â Serialµµ ÀÖ¾ú´Âµ¥ ¾ðÁ¦ ¾ø¾îÁ³´ÂÁö VC++ 6¿¡¼± ÀÌ Ç׸ñÀÌ ¾ø´õ±º¿ä.

2. Settings ¹öÆ°À» ´©¸£¸é "Win32 Network Settings"¶õ Á¦¸ñÀ» °¡Áø ´ÙÀ̾˷αװ¡ ³ªÅ¸³³´Ï´Ù.

3. "Target machine name or address"¶õ Çʵ忡 µð¹ö±ëÀ» ÇÒ Å¸°Ù ÄÄÇ»ÅÍÀÇ IP¾îµå·¹½º³ª ÄÄÇ»ÅÍ ¸íÀ» Àû¾îÁÖ°í OK ¹öÆ°À» ´©¸¨´Ï´Ù.

4. Connect ¹öÆ°À» ´©¸£¸é "Connecting.."À̶õ Á¦¸ñÀ» °¡Áö´Â ´ÙÀ̾˷αװ¡ ³ª¿À´Âµ¥ ´ë±â »óÅ·Πµé¾î°£ °ÍÀÌÁö¿ä. Ãë¼ÒÇϽ÷Á¸é Disconnect ¹öÆ°À» ´©¸£¸é µÇ°Ú°í¿ä.

¿©±â±îÁö°¡ Ÿ°Ù ÄÄÇ»ÅÍÀÇ ¼ÂÆà ÀüºÎ ÀÔ´Ï´Ù.

 

- µð¹ö±ëÀ» ÇÒ ÄÄÇ»ÅÍÀÇ ¸®¸ðÆ® µð¹ö±ë ȯ°æ¼³Á¤Çϱâ

1. IDEÀÇ Build ¸Þ´º¿¡¼­ Debugger Remote Connection Ç׸ñÀ» ¼±ÅÃÇϸé "Remote Connection" ´ÙÀ̾˷αװ¡ ³ªÅ¸³³´Ï´Ù. 

2. ¿©±â ¸®½ºÆ® ¹Ú½º¿¡´Â Ç׸ñÀÌ µÎ°³°¡ Àִµ¥ "Network(TCP/IP)"Ç׸ñÀ» ¼±ÅÃÇÏ°í Settings ¹öÆ°À» ´©¸¨´Ï´Ù. "Target machine name or address" Çʵ忡´Ù Ÿ°Ù ÄÄÇ»ÅÍÀÇ IP¾îµå·¹½º³ª ÄÄÇ»ÅÍ ¸íÀ» Àû¾îÁÖ°í OK¹öÆ°À» ´©¸¨´Ï´Ù. 

3. "Remote Connection" ´ÙÀ̾˷α׿¡¼­µµ OK¹öÆ°À» ´­·¯ ´ÙÀ̾˷α׸¦ ´Ý½À´Ï´Ù.

4. IDEÀÇ ProjectÀÇ Settings Ç׸ñÀ» ¼±ÅÃÇϸé "Project Settings" ´ÙÀ̾˷αװ¡ ³ªÅ¸´Âµ¥ Debug ÅÇÀ» ´­·¯ÁÝ´Ï´Ù.

5. "Category" ÄÞº¸¹Ú½º Çʵå´Â General·Î ÇϽðí "Executable for Debug Session" Çʵ忡´Â ½ÇÇàÈ­ÀÏÀÇ °æ·Î¸¦ Àû¾îÁֽôµ¥ µð¹ö±ëÇÏ´Â ÄÄÇ»ÅÍ ÀÔÀå¿¡¼­ º» ½ÇÇàÈ­ÀÏÀÇ °æ·Î¸¦ ÀǹÌÇÕ´Ï´Ù.

¿¹¸¦ µé¾î Ÿ°ÙÄÄÇ»ÅÍÀÇ À̸§ÀÌ "TARGET"ÀÌ°í ½ÇÇàÈ­ÀÏÀÌ "Shaerd"¶õ °øÀ¯Æú´õ¿¡ µé¾îÀÖ´Ù¸é "\\TARGET\Shared\Test.exe"¶ó°í Àû¾îÁֽðí Ÿ°ÙÄÄÇ»ÅÍÀÇ "Shared" ¶õ °øÀ¯Æú´õ°¡ "H"¶ó´Â ³×Æ®¿öÅ© µå¶óÀ̺ê·Î ÀâÇô ÀÖ´Ù¸é "H:\Test.exe"¶ó°í Àû¾îÁÖ½Ã¸é µÇÁÒ.

 "Working Directory" Çʵå´Â °ø¶õÀ¸·Î ºñ¿öµÎ½Ã°í "Remote Executable Path" Çʵå´Â Ÿ°ÙÄÄÇ»ÅÍ ÀÔÀå¿¡¼­ º» ½ÇÇàÈ­ÀÏÀÇ °æ·Î¸¦ Àû¾îÁÝ´Ï´Ù. ¿¹¸¦ µé¸é "C:\Shared\Test.exe"¿Í °°ÀÌ Àû¾îÁÖ½Ã¸é µË´Ï´Ù. 

6. ½ÇÇà È­ÀÏÀÌ¿Ü¿¡ Ãß°¡·Î µð¹ö±ëÇÒ DLLÀÌ ÀÖ´Ù¸é "Category" ÄÞº¸¹Ú½º Çʵ忡¼­ "Additional DLLs"¸¦ ¼±ÅÃÇÑ ÈÄ µð¹ö±ëÇÏ´Â ÄÄÇ»ÅÍ ÀÔÀå¿¡¼­ º» DLL È­ÀÏÀÇ °æ·Î¸¦ ÀÔ·ÂÇÏ½Ã¸é µË´Ï´Ù. Ãß°¡·Î µð¹ö±ëÇÒ DLLÀÌ ¾ø´Ù¸é ÀÌ °úÁ¤Àº »ý·«ÇϽñ¸¿ä. 

7. F5Å°¸¦ ´­·¯ µð¹ö±ëÀ» ½ÃÀÛÇÕ´Ï´Ù.

 

- Âü°í »çÇ×

µð¹ö±ëÀ» ½ÃÀÛÇϸé "Find Local Module"À̶ó´Â ´ÙÀ̾˷αװ¡ ³ªÅ¸³ª°í ÇÁ·Î±×·¥ÀÌ »ç¿ëÇÏ´Â DLL À̸§À» Çϳª¾¿ ´ë¸é¼­ ÀÌ DLLÀÇ °æ·Î¸¦ ¹°¾îº¾´Ï´Ù. "Try to locate other DLLs"¶õ üũ¹Ú½ºÀÇ Ç¥½Ã¸¦ Ç®¾î¹ö¸®¸é ±ÍÂú°Ô ¾ÈÇÒ °Ì´Ï´Ù. ±×¸®°í µÎ´ëÀÇ ½Ã½ºÅÛ¿¡ ÀÖ´Â DLL¹öÀüÀ̳ª ¾ð¾îÇü½ÄÀÌ ÀÏÄ¡ÇÏÁö ¾ÊÀ¸¸é °æ°í ¸Þ½ÃÁö ¹Ú½º°¡ ³ªÅ¸³ª´Âµ¥ ¹«½ÃÇϽðųª ÂòÂòÇÏ½Ã¸é ¾î´À ÇÑÂÊÀ¸·Î DLLÀ» º¹»çÇؼ­ ¶È°°ÀÌ ¸¸µé¾î ÁÖ¸é µÇ°ÚÁÒ.

 ¸®¸ðÆ® µð¹ö±ëÀ» ÇÏ´Ùº¸¸é ½ÇÇà¼Óµµ°¡ ¸¹ÀÌ ¶³¾îÁö´Â °ÍÀ» ´À³¥ ¼ö Àִµ¥ ³×Æ®¿öÅ©·Î ¿¬°áÇÏ´Ù º¸´Ï ¾î¿¼ö ¾ø´Â ºÎºÐÀÌÁÒ. ÇÏÁö¸¸ ·çÇÁ¸¦ ¸¹ÀÌ µ·´Ù°Å³ª °è»ê°á°ú¸¦ ±â´Ù¸®´Â °æ¿ì¿¡´Â IDE¸¦ Minimize »óÅ·ΠÇصθé Á¶±ÝÀÇ ¼Óµµ Çâ»óÀ» ¾òÀ» ¼ö ÀÖ½À´Ï´Ù.  

 

< µà¾ó ¸ð´ÏÅÍ µð¹ö±ë Çϱâ>

¾Æ·¡ ¹æ¹ýÀ» ¾²½Ã±â Àü¿¡(ºñµð¿ÀÄ«µå Çϳª ´õ²Å±â Àü) ¹ÙÀÌ¿À½º ¼Â¾÷ Ç׸ñ¿¡¼­ ¹Ýµå½Ã Init VGA sequence Àΰ¡? ÇÏ´Â ¼³Á¤À» ¹Ýµå½Ã ¸ÕÀú ¼³Á¤ÇÏ°í Ä«µå¸¦ ²ÅÀ¸¼¼¿ä. ¾î´À Ä«µå¸¦ ¸ÞÀÎ Ä«µå·Î ¾²°Ú´Ù´Â°É ¶æÇÕ´Ï´Ù. ±×¸®°í ºñµð¿À µå¶óÀ̹ö´Â µÑ´Ù ÃÖ½ÅÀ¸·Î ÇØÁֽñ¸¿ä.(¾ÈµÇ´Ù µÇ´Â°É ºÁ¼­¿ä.) ºñµð¿À Ä«µå³¢¸® ±ÃÇÕµµ ÀÖÀ¸´Ï...

±¦È÷ ÀÌ»óÇÑ Ä«µå·Î Àγ»½É Å×½ºÆ® ÇÏÁö ¸¶½Ã±¸¿ä.

 º¸Åë ÇÁ·Î±×·¥(À©µµ¿ì ±â¹Ý)Àº ¿©±â ±îÁö¸¸ Çصµ µð¹ö±ëÀÌ Àß µÇ´ÂµÇ¿ä... (º¸Åë µà¾ó ¾µ°Íµµ ¾øÁö¸¸...^^) DirectX°°ÀÌ Ç®½ºÅ©¸° Àâ¾Æ¸Ô´Â ³à¼®Àº µð¹ö±ëÀÌ ÈûµéÁÒ...^^ 

 DirectDraw ¿¡¼¾¼È¿¡ º¸¸é ³ª¿ÍÀִµ¥, ¿ì¼±,Á¦¾îÆÇÀÇ DirectX½ÇÇàÇϽŴÙÀ½ DirectDrawÅÇ¿¡¼­ Advanced¿¡¼­ ´ÙÁ߸ð´ÏÅÍ µð¹ö±ë¿É¼ÇÀ» üũÇØÁÝ´Ï´Ù. ±× ´ÙÀ½ Áß¿äÇÑ°ÍÀº °³¹ßȯ°æÀº Primary Device¿¡ ±×¸®°í ¸¸µå½Ã´Â ¾ÖÇø®ÄÉÀ̼ÇÀ» Secondary Device¿¡ ¶ç¿ì¼Å¾ß ÇÕ´Ï´Ù... 

 Secondary¿¡ ¶ç¿ì½Ã´Â ¹æ¹ýÀº(¾ÆÁÖ ¹«½ÄÇÏ°Ô ÇÏÀÚ¸é) (ÀÌ°ÍÀ» Á¦´ë·Î ¾²½Ã°íÀÚ ÇϽøé FSWindow¶ó´Â ¿¹Á¦¿¡ ºñµð¿À Ä«µå¸¦ °í¸£°Ô ÇØÁÖ´Â ·çƾÀÌ µé¾îÀÖÀ¸´Ï Âü°íÇϼ¼¿ä) 

 DDRAW  ¿¹Á¦¿¡¼­ DDENUMÀ̶ó´Â ½ÇÇàÇϼż­ Secondaryµð¹ÙÀ̽º°¡ ¸î¹ø°·Î ÀâÈ÷´ÂÁö È®ÀÎÇϽŴÙÀ½ DirectDrawEnumerateEXÇÔ¼ö¿¡¼­ ³»ºÎÀûÀÎ Ä«¿îÆ®¸¦ ¼³Á¤Çϼż­ ¼¼¹ø° ½ÇÇàµÆÀ»¶§ ±×¶§ÀÇ GUID¸¦ º¹»çÇϽŴÙÀ½(¹Ýµå½Ã º¹»ç¸¦ ÇϼžßÇÕ´Ï´Ù.±×³É ¾î»çÀÎÀº ¾ÈµË´Ï´Ù. ³ªÁß¿¡ ÇØÁ¦µÇ´Â°Í °°½À´Ï´Ù) ±× GUID¸¦ °¡Áö°í DirectDrawCreate¿¡ Ã¹¹ø° ÀÎÀÚ·Î ³Ö¾îÁÖ½Ã¸é µË´Ï´Ù.... (º¸Åë ³Î°ªÀ» ³Ö½À´Ï´Ù)

 

<¹öÆ°¿¡¼­ ¸Þ´º¸í·ÉÀ» ½ÇÇàÇÏ·Á¸é> 

 ¿ì¼± ¸Þ´º¿Í ƯÁ¤ ¹öÆ°ÀÌ °°Àº µ¿ÀÛÀ» ÇÏ°Ô ÇϽ÷Á¸é ¹öÆ°ÄÁÆ®·ÑÀÇ ID¿Í ÇØ´ç¸Þ´ºÀÇ ID¸¦ °°°Ô ÇØÁÖ¸é µÇ´Âµ¥ À̶§ ÁÖÀÇÇؾßÇÒ °ÍÀº ¸Þ´º¸¦ ó¸®ÇÏ´Â À©µµ¿ì Ŭ·¡½º¿Í ¹öÆ°ÀÇ ºÎ¸ð À©µµ¿ì°¡ °°¾Æ¾ß ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. ¸¸ÀÏ ¸Þ´º´Â ¸ÞÀÎ ÇÁ·¹ÀÓ À©µµ¿ì¿¡¼­ ó¸®ÇÏ°í ¹öÆ°Àº ¸ÞÀÎ ÇÁ·¹ÀÓÀÇ Â÷Àϵå·Î Á¸ÀçÇÏ´Â ºä¿¡¼­ 󸮰¡ µÈ´Ù´Â ¹Ù·Î ¿¬°áÀÌ µÇÁö ¾ÊÁÒ. ÀÌ·± °æ¿ì¿¡´Â ºä¿¡¼­ ¸ÞÀÎ ÇÁ·¹ÀÓÀÇ Æ÷ÀÎÅ͸¦ ±¸ÇÑ ÈÄ¿¡ ó¸®ÇÔ¼ö¸¦ Áï ¸Þ´º ó¸®ÇÔ¼ö¸¦ È£ÃâÇÏ½Ã¸é µË´Ï´Ù.

 ±×¸®°í ±âº»ÀûÀÎ ¸Þ´ºµé. ±×·¯´Ï±î »õ¹®¼­, Àμâ, ¹Ì¸®º¸±â µîÀº CWinApp³ª CMainFrame Ŭ·¡½º¿¡¼­ 󸮰¡ µÇ¾îÁý´Ï´Ù. ÀÌ·¯ÇÑ °ÍÀ» È®ÀÎÇϽ÷Á¸é °¢ Ŭ·¡½ºÀÇ ½ÃÀۺκп¡ Á¸ÀçÇÏ´Â ¸Þ¼¼Áö ¸Ê ºÎºÐÀ» º¸½Ã¸é È®ÀÎ °¡´ÉÇÕ´Ï´Ù.

 ¿¹¸¦ µé¸é ´ÙÀ½°ú °°½À´Ï´Ù.

 

BEGIN_MESSAGE_MAP(CSampleApp, CWinApp)
     //{{AFX_MSG_MAP(CDEDITORApp)
     ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
     //}}AFX_MSG_MAP
     // Standard file based document commands
     ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
     ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
     // Standard print setup command
     ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()

 

À§¸¦ º¸½Ã¸é File New, Open, Print Setup µîÀÇ Ã³¸®°¡ CWinApp Ŭ·¡½º¿¡¼­ 󸮵ǾîÁüÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù.

 

<¸ÅÅ©·Î »ç¿ëÇϱâ>

 ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ°í ÀÖÀ» ¶§[µ¿ÀÏÇÑ Á¶ÀÛ]À» ¸î ¹øÀÌ°í ¹Ýº¹ÇÏ´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù. ÀÌ ¿Í °°Àº [µ¿ÀÏÇÑ Á¶ÀÛ]À» ±â·ÏÇسõ°í ¿øÅÍÄ¡·Î Àç ÀÌ¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ°ÍÀ» ¸ÅÅ©·Î¶ó°í ¸»ÇÕ´Ï´Ù. VC++¿¡¼­´Â Äü ¸ÅÅ©·Î ±â´É°ú Ç¥ÁØ ¸ÅÅ©·Î ±â´ÉÀÌ ÀÖ½À´Ï´Ù.

* Äü ¸ÅÅ©·Î ±â´ÉÀº ¼ÒÀ§ [Å°º¸µå ¸ÅÅ©·Î]¶ó°í ÇÏ´Â °ÍÀ¸·Î¼­ Å°º¸µå¿¡¼­ÀÇ ½ÇÁ¦ÀÇ Á¶ÀÛÀ» ±â·ÏÇÏ¿© ÀçÇöÇÕ´Ï´Ù. Äü ¸ÅÅ©·ÎÀÇ »ç¿ë¹ýÀº  °£´ÜÇÕ´Ï´Ù.

 

¿¹¸¦ µé¸é*

Äü ¸ÅÅ©·Î´Â VC++À» Á¾·áÇÑµÚ ´Ù½Ã ½ÇÇàÇßÀ» ¶§µµ °è¼Ó ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù.

 

* Ç¥ÁØ ¸ÅÅ©·Î »ç¿ëÀº Äü ¸ÅÅ©·Î »ç¿ëº¸´Ù º¹ÀâÇÕ´Ï´Ù.

Ç¥ÁØ ¸ÅÅ©·ÎÀÇ ³»¿ëÀº ±âº»ÀûÀ¸·Î´Â Å°º¸µå·Î Á÷Á¢ Á¶ÀÛ ÇÏ´Â ¹æ¹ýÀ¸·Î ±â·Ï ÇÕ´Ï´Ù. ±×·¯³ª ±× ³»¿ëÀº VBScript¶ó´Â °£ÀÌ ¾ð¾î·Î ÀÛ¼ºµÈ ÆÄÀÏ(¸ÅÅ©·Î ÆÄÀÏ)ÀÌ µË´Ï´Ù. ±â·ÏµÈ Á¶ÀÛ¿¡´Â À̸§(¸ÅÅ©·Î¸í) À» ºÙÀÔ´Ï´Ù. ¶Ç ¸ÅÅ©·Î ÆÄÀϵµ À̸§À» ºÙ¿©¼­ ÀúÀåÇÕ´Ï´Ù.

¸ÅÅ©·Î ÆÄÀÏÀÇ ³»¿ëÀº VBScript·Î ¾º¾î ÀÖÀ¸¹Ç·Î ³ªÁß¿¡ ÀÚÀ¯·Ó°Ô ¼öÁ¤ÇÒ¼ö ÀÖ½À´Ï´Ù. 

±×·³ Áö±Ý ºÎÅÍ ±× »ç¿ë¹ý¿¡ ´ëÇؼ­ ¾Ë¾Æ º¸°Ú½À´Ï´Ù.

 

1.¿ì¼± ¸Å´ºÁß Tool/Macro...¸¦ ¼±ÅÃÇÕ´Ï´Ù.

2.±×·³ ´ÙÀ̾ó·Î±× ¹Ú½º°¡ ¶ß´Âµ¥ ±×³É [OK]¹öÆ°À» ´©¸£¸é µË´Ï´Ù.

3.¸ÅÅ©·Î À̸§ °ú ¸ÅÅ©·Î¸¦ ÀúÀåÇÒ ÆÄÀÏ ÀԷ âÀÌ ¶ß´Âµ¥ ¿¹¸¦ µé¾î ¸ÅÅ©·Î À̸§À» switchStyle À̶óÇÏ°í ¸ÅÅ©·Î ÆÄÀÏÀº µðÆúµå ÆÄÀÏÀÎ Mymacros·Î ÇÏ°í [Record] ¹öÆ°À» Ŭ¸¯ ÇÕ´Ï´Ù.

4.±×·¯¸é ¸ÅÅ©·Î¿¡ ´ëÇÑ ¼³¸íÀ» ÀûÀ»¼ö ÀÖ´Â ´ÙÀ̾ó·Î±×°¡ ¶å´Ï´Ù. ¼³¸íÀ» ÀÛ¼ºÇÏ°í [OK]¹öÆ°Àº Ŭ¸¯ ÇÕ´Ï´Ù.

5.»ç¿ëÇÏ°íÀÚ ÇÏ´Â ¸ÅÅ©·Î¸¦ ÀÛ¼ºÇÕ´Ï´Ù.

¿¹) switch() { case : break;default;}

6. ¸ÅÅ©·Î Á¤Áö ¹öÆ°À» Ŭ¸¯ÇÕ´Ï´Ù.±×·¯¸é ÀÛ¼ºÇÑ ¸ÅÅ©·Î¿¡ ´ëÇÑ ¿¡ ´ëÇÑ Äڵ尡 Ç¥½ÃµË´Ï´Ù.(VBScript)

 

** ÀÛ¼ºÇÑ ¸ÅÅ©·Î´Â ±× Â÷ü·Îµµ ¸Þ´º¿¡¼­ ½ÇÇàÇÒ ¼ö ÀÖÁö¸¸, Å°³ª ¹öÆ°¿¡ ÇÒ´çÇÏ¿© ½ÇÇàÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ±× ¼³Á¤¿¡ ´ëÇؼ­ ¾Ë¾Æ º¸°Ú½À´Ï´Ù.

 

À§ÀÇ 1,2´Ü°è¸¦ ÇÕ´Ï´Ù.

3.À̹ø¿¡´Â [Record]°¡ ¾Æ´Ñ [<<Option]¹öÆ°À» ´©¸¨´Ï´Ù. ±×·¯¸é ´ÙÀ̾ó·Î±×¹Ú½º°¡ ±æ¾îÁö¸é¼­ 4°³ÀÇ ¹öÆ°ÀÌ »ý¼º µË´Ï´Ù.

°¢°¢ÀÇ ¹öÆ°¿¡ ´ëÇؼ­ ¾Ë¾Æ º¸¸é

4.[Keystrokes]¹öÆ°À» Ŭ¸¯ÇÑ´Ù.

ÅÇ ´ÙÀ̾ó·Î±× °¡ ¶ß´Âµ¥ Keybord¶ó´Â ÅÇÀÌ È°¼ºÈ­ µÇ¾î ÀÖÀ» °ÍÀÌ´Ù.

commands¿¡¼­ Å° ÀÛ¼ºÀ» ÇÒ ¸ÅÅ©·Î¸¦ ¼±ÅÃÇÑÈÄ Press New shortcut ¶ó´Â ¿¡µðÆ® ¹Ú½º¿¡ »ç¿ëÇÒ Å°¸¦ ³ÖÀ¸¸é µË´Ï´Ù.

ÁÖÀÇ) ¿¹¸¦ µé¾î Alt  + S ¸¦ Å°·Î ¼³Á¤ÇÏ°í ½ÍÀ¸¸é Å°º¸µå·Î Alt + SÀÌ·¸°Ô ÀÛ¼ºÇϴ°ÍÀÌ ¾Æ´Ï¶ó Alt Å°¿Í S Å°¸¦ ÇѲ¨¹ø¿¡ ´©¸£¸é ±× ¿¡µðÆ® ¹Ú½º¿¡ Alt + S¶ó°í Ç¥½Ã°¡ µË´Ï´Ù.

5.Assign¹öÆ°À» ´©¸£¸é Å° ÀÛ¼ºÀ» ³¡³À´Ï´Ù.

 

***À̹ø¿¡´Â Å° °¡ ¾Æ´Ñ ¹öÆ°À» ¸¸µé¾î »ç¿ëÇϵµ·Ï ¼³Á¤ ÇÏ°Ú½À´Ï´Ù.

À§ÀÇ 3¿¡¼­ 4°¡Áö ¹öÆ°Áß À̹ø¿¡´Â Toolbars ¹öÆ°À» Ŭ¸¯ÇÕ´Ï´Ù.

4.Commands¶ó´Â ÅÇÀÌ È°¼ºÈ­µÈ ÅÇ ´ÙÀ̾ó ·Î±×°¡ ¶å´Ï´Ù.

ÀÛ¼ºÇÒ ¸ÅÅ©·Î¸íÀ» ¼±ÅÃÇÏ°í VC++ ¸ÞÀÎ È­¸éÀÇ Åø¹ÙµéÀÌ À§Ä¡ÇÑ °÷À¸·Î ±×·¡±×¸¦ ÇÕ´Ï´Ù.

¿©·¯°³ÀÇ ¾ÆÀÌÄÜÀÌ ÀÖ´Â ´ÙÀ̾ó·Î±× ¹Ú½º°¡ È­¸é¿¡ ¶ß´Âµ¥ »ç¿ëÇÒ ¾ÆÀÌÄÜÀ» ¼±ÅÃÇÏ°í [OK]¹öÆ°À» ´©¸£¸é ¸ÞÀÎ È­¸éÀÇ Åø¹Ù¿¡ ¼±ÅÃÇÑ ¾ÆÀÌÄÜÀÌ Åø¹Ù°¡ µÇ¾î Ç¥½Ã°¡ µË´Ï´Ù.

±×·³ ÀÌ Åø¹Ù¿¡ ÀÖ´Â ¾ÆÀÌÄܸ¸ ´©¸£¸é ¸ÅÅ©·Î°¡ ½ÇÇà µË´Ï´Ù.

 

- the end of this article -