¹Ù. ¸í·É Ç׸ñ °ü¸®

¾Õ¿¡¼­ ÀÛ¼ºÇÑ OnCommand ÇÔ¼ö¸¦ ´Ù½Ã ÇÑ ¹ø º¸µµ·Ï ÇÏÀÚ. IDM_FILE_NEW¸¦ ¼±ÅÃÇϸé New ÇÔ¼ö¸¦ ºÎ¸£°í IDM_FILE_SAVE¸¦ ¼±ÅÃÇϸé Save ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ÀÌ ¸í·ÉÀÌ Àü´ÞµÇ±â¸¸ ÇÏ¸é ¹«Á¶°Ç ÇÔ¼ö¸¦ ºÎ¸£°í ÀÖ´Â ¼ÀÀÌ´Ù. »õ ÆÄÀÏÀ̳ª ¿­±â´Â Ç×»ó »õ·Î¿î Â÷Àϵ带 ¸¸µé±â ¶§¹®¿¡ ÀÛ¾÷ ´ë»ó À©µµ¿ì°¡ ÇÊ¿ä¾øÁö¸¸ ÀúÀåÇÒ ¶§´Â ÇöÀç È°¼ºÈ­µÈ Â÷Àϵ带 ´ë»óÀ¸·Î ÇÑ´Ù. ±×·¡¼­ hActive¿¡ È°¼º Â÷ÀϵåÀÇ ÇÚµéÀ» ¹Ì¸® ±¸Çسõ¾ÒÀ¸¸ç Save¿Í SaveAs ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ ÀÌ ÇÚµéÀ» Àμö·Î Àü´ÞÇÏ¿´´Ù.

¸¸¾à È°¼º Â÷Àϵ尡 ¾ø´Â »óŶó¸é hActive´Â NULLÀÌ µÇ¸ç ÀÌ °æ¿ì ÀúÀå ¸í·ÉÀº ½ÇÆÐÇÒ »Ó¸¸ ¾Æ´Ï¶ó ÀÖÁöµµ ¾Ê´Â hActive·ÎºÎÅÍ pSi¸¦ ±¸ÇÏ·Á°í Çϱ⠶§¹®¿¡ °á±¹ Á×°í ¸¸´Ù. pSi´Â NULLÀÌ µÇ°í pSi->Ae´Â ¹«È¿À̱⠶§¹®ÀÌ´Ù. ±×·¡¼­ È°¼ºÃ¢ÀÌ ÇÊ¿äÇÑ ¸í·ÉÀº ´ÙÀ½°ú °°ÀÌ ¹Ýµå½Ã È£ÃâÇϱâ Àü¿¡ hActive°¡ ÀÖ´ÂÁö Á¡°ËÇغ¸´Â °ÍÀÌ ¿øÄ¢ÀÌ´Ù.

 

     case IDM_FILE_SAVE:

          if (hActive) {

              Save(hActive);

          }

          break;

 

hActive°¡ NULLÀÌ ¾Æ´Ò ¶§¸¸ Save ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ÀÌ·¸°Ô Çϸé ÃæºÐÇÑ ¾ÈÀü ÀåÄ¡¸¦ ¸¶·ÃÇÑ ¼ÀÀε¥ ½ÇÁ¦·Î´Â hActive°¡ NULLÀÌ µÉ ¶§ ÀúÀå ¸í·É ÀÚü°¡ ¾ø´Ù. DangeunÀº µÎ °³ÀÇ ¸Þ´º¸¦ °¡Áö°í ÀÖÀ¸¸ç È°¼º Â÷Àϵ尡 ¾øÀ» ¶§´Â ¾Æ¿¹ ÀúÀåÀ̶ó´Â ¸í·É ÀÚü°¡ ¸Þ´º¿¡ ³ªÅ¸³ªÁö ¾Ê´Â´Ù. ±×·³¿¡µµ ºÒ±¸ÇÏ°í IDM_FILE_SAVE¿¡¼­ hActive¸¦ Á¡°ËÇØ¾ß ÇÏ´Â ÀÌÀ¯´Â ÀÌ ¸í·ÉÀ» ¾×¼¿·¯·¹ÀÌÅͳª Åø¹Ù·Îµµ Àü´ÞÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ¸Þ´º´Â ½ÇÇàÁß¿¡ ±³Ã¼ÇÏÁö¸¸ ¾×¼¿·¯·¹ÀÌÅÍ´Â ±³Ã¼µÇÁö ¾Ê´Â´Ù.

ÀúÀå»Ó¸¸ ¾Æ´Ï¶ó ´Ý±â, ÀбâÀü¿ë ¼Ó¼º º¯°æ, ÆÄÀÏ µÇµ¹¸®±â, º¹»ç, ºÙ¿©³Ö±â, ÀÚµ¿°³Çà º¯°æ, ã±â, ¹Ù²Ù±â µîµî ¾ÕÀ¸·Î ¸¸µé ´ëºÎºÐÀÇ ¸í·Éµéµµ ¸¶Âù°¡Áö·Î È°¼ºÃ¢ÀÌ ¾øÀ» ¶§´Â ½ÇÇàÇÒ ¼ö ¾ø´Ù. ±×·¸´Ù¸é È°¼ºÃ¢ÀÌ ÇÊ¿ä¾ø´Â ÀϺΠ¸î °³ÀÇ ¸í·ÉÀ» Á¦¿ÜÇÏ°í´Â ÀÏÀÏÀÌ if (hActive)¸¦ ºÙ¿©ÁÖ¾î¾ß Çϴ°¡ ÇÏ¸é ±×·² ÇÊ¿ä°¡ ºÐ¸íÈ÷ ÀÖ´Ù. È°¼ºÃ¢ÀÌ ¾øÀ» ¶§ ¸Þ´º ¸í·ÉÀ» Á¦´ë·Î ¸·Áö ¾ÊÀ¸¸é ÇÁ·Î±×·¥ÀÌ ´Ù¿îµÇ´Âµ¥ ±×´ë·Î µÎ°í º¼ ¼ö´Â ¾øÁö ¾ÊÀº°¡? ÇÏÁö¸¸ DangeunÀº Á» ´Ù¸¥ ¹æ¹ýÀ¸·Î È°¼ºÃ¢ÀÌ ÇÊ¿äÇÑ ¸í·ÉµéÀ» ¸·±â·Î Çß´Ù.

 

BOOL TestNeedActive(WORD ID)

{

     static WORD IDs[]={ IDM_FILE_NEW,IDM_FILE_OPEN,IDM_FILE_EXIT,IDM_FILE_PROJECT,

          IDM_FILE_FTPOPEN, IDM_FILE_HTTPOPEN, IDM_VIEW_OUTPUT,

          IDM_VIEW_TOOLBAR,IDM_VIEW_STATUS,IDM_VIEW_FILE,IDM_VIEW_FILETAB,

          IDM_SEARCH_FILES,IDM_SEARCH_RFILES,IDM_TOOL_CONFIG,IDM_TOOL_UNINSTALL,

          IDM_HELP_ABOUT };

     int i;

 

     for (i=0;i<sizeof(IDs)/sizeof(IDs[0]);i++) {

          if (ID==IDs[i])

              return FALSE;

     }

     return TRUE;

}

 

ÀÌ ÇÔ¼ö´Â ¸í·É ID°¡ È°¼ºÃ¢À» ÇÊ¿ä·Î ÇÏ´ÂÁö ¾Æ´ÑÁö¸¦ Á¶»çÇÑ´Ù. IDs ¹è¿­¿¡ È°¼ºÃ¢ÀÌ ÇÊ¿ä¾ø´Â ¸í·É Ç׸ñÀ» ¹Ì¸® Á¤ÀÇÇصΰí ÀÌ Áß ÇϳªÀÏ ¶§¸¸ FALSE¸¦ ¸®ÅÏÇÏ¸ç ±× ¿ÜÀÇ °æ¿ì´Â TRUE¸¦ ¸®ÅÏÇÑ´Ù. È°¼ºÃ¢ÀÌ ÇÊ¿äÇÑ ¸í·ÉµéÀÌ ´ëºÎºÐÀ̶ó ¹Ý´ë·Î ÇÊ¿ä¾ø´Â ¸í·ÉÀÎÁö¸¦ Á¶»çÇÏ´Â °ÍÀÌ ´õ ºü¸£´Ù. OnCommand¿¡¼­´Â ´ÙÀ½°ú °°ÀÌ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ¸í·ÉÀÇ ½ÇÇà ¿©ºÎ¸¦ °áÁ¤ÇÑ´Ù.

 

void OnCommand(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     ....

     hActive=(HWND)SendMessage(g_hMDIClient,WM_MDIGETACTIVE,0,NULL);

    if (hActive==NULL) {

        if (TestNeedActive(LOWORD(wParam)))

           return;

    }

 

hActive°¡ NULLÀ̸é ÀÌ ¸í·ÉÀÌ È°¼ºÃ¢ÀÌ ¾ø¾îµµ µÇ´Â ¸í·ÉÀÎÁö Á¶»çÇÑ ÈÄ ±×·¸Áö ¾Ê´Ù¸é ±×³É ¸®ÅÏÇϵµ·Ï Çß´Ù. µû¶ó¼­ hActive°¡ ¹Ýµå½Ã ÇÊ¿äÇÑ ¸í·ÉÀº hActive°¡ ¾øÀ» ¶§´Â ¾Æ¿¹ ½ÇÇàÀ» ÇÏÁö ¾Ê´Â´Ù. ¿øÄ¢À» µûÁöÀÚ¸é ¸ðµç ¸í·É¿¡ if (hActive)¸¦ ºÙ¿©ÁÖ´Â °ÍÀÌ ´õ ÁÁÀº ¹æ¹ýÀÌ´Ù. ±×·¯³ª ¿©±â¼­ ÀÌ·± ¹æ¹ýÀ» ¾²´Â ÀÌÀ¯´Â °á°úÀûÀ¸·Î ÀÌ ¹æ¹ýÀÌ ´õ °£´ÜÇؼ­À̱⵵ ÇÏÁö¸¸ º¸¿©ÁÖ±â À§ÇÑ ¿¹Á¦À̱⠶§¹®ÀÌ´Ù. ¸ðµç ¸í·É¿¡ ÀÏÀÏÀÌ if (hActive)¸¦ ºÙÀÌÀÚ¸é ¼Ò½º°¡ ±æ¾îÁú »Ó¸¸ ¾Æ´Ï¶ó µé¿©¾²±â°¡ ÇÑ Ä­ ´õ µÇ¾î¾ß Çϱ⠶§¹®¿¡ º¸±â¿¡µµ ÁÁÁö ¾Ê´Ù. Áö¸é¿¡ ½Ç¾î¾ß ÇÒ ¼Ò½º´Â 90Ä÷³À» ³Ñ¾î¼­´Â °ï¶õÇÏ´Ù´Â ¸» ¸øÇÒ »çÁ¤ÀÌ Àֱ⠶§¹®ÀÌ´Ù.