°¡. ã±â ´ëÈ­»óÀÚ

ã±â ±â´ÉÀº Á¶°Ç¿¡ ¸Â´Â ¹®ÀÚ¿­ÀÌ ¹®¼­ÀÇ ¾îµðÂë¿¡ ÀÖ´ÂÁö ã¾Æ ÁÖ´Â ±â´ÉÀ̸ç ÅؽºÆ® ÆíÁý±â¶ó¸é ´ç¿¬È÷ Á¦°øÇØ¾ß ÇÏ´Â Çʼö ±â´ÉÀÌ´Ù. ¾ÆÁÖ ÂªÀº ¹®¼­¶ó¸é ¸ô¶óµµ ÇÑ ÆäÀÌÁö ÀÌ»óÀÇ ¹®¼­¿¡¼­ À°¾ÈÀ¸·Î ¹®ÀÚ¿­À» ã´Â °ÍÀº ºÎÁ¤È®ÇÒ »Ó¸¸ ¾Æ´Ï¶ó ¹«Ã´ ±ÍÂúÀº ÀÏÀÌ´Ù. ApiEdit´Â buf¿¡ ¹®¼­ÀÇ ¸ðµç ³»¿ëÀ» °¡Áö°í ÀÖÀ¸¸ç ÀúÀåÇÏ°í ÀÖ´Â µ¥ÀÌÅÍ°¡ ´Ü¼øÇÑ ¹®ÀÚ¿­ Æ÷¸ËÀ̹ǷΠº° ¾î·Á¿ò ¾øÀÌ »ç¿ëÀÚ°¡ ¿øÇÏ´Â ¹®ÀÚ¿­À» ã¾ÆÁÙ ¼ö ÀÖ´Ù.

ã±â ±â´ÉÀº Á¶°Ç¿¡ ¸Â´Â ¹®ÀÚ¿­ÀÌ Á¸ÀçÇÏ´ÂÁö¸¦ Á¶»çÇϱâ À§Çؼ­µµ »ç¿ëµÇÁö¸¸ ±×º¸´Ù´Â ½Å¼ÓÇÑ À̵¿À» À§ÇØ ´õ ¸¹ÀÌ »ç¿ëµÈ´Ù. ÇÔ¼ö¸íÀ̳ª º¯¼ö¸í µîÀ» Á÷Á¢ ÀÔ·ÂÇÔÀ¸·Î½á ÆíÁýÇÏ°íÀÚ ÇÏ´Â °÷À¸·Î ºü¸£°Ô À̵¿ÇÒ ¼ö ÀÖ´Ù. ƯÈ÷ ÇÁ·Î±×·¡¹Ö ¼Ò½º°°ÀÌ Áߺ¹µÇÁö ¾Ê´Â ¸íĪÀ» ´Ù·ç´Â ¹®¼­¿¡¼­ ÀÌ ±â´ÉÀº ¾î¶² ¹æ¹ýº¸´Ù ´õ ºü¸£°í Á¤È®ÇÑ À̵¿ ¹æ¹ýÀÌ µÈ´Ù. ¿øÇÏ´Â ÆíÁý ºÎºÐÀ» ¸í½ÃÀûÀ¸·Î ÁöÁ¤ÇÏ´Â ´Éµ¿ÀûÀÌ°í Á÷Á¢ÀûÀÎ À̵¿ ¹æ¹ýÀ̶ó°í ÇÒ ¼ö ÀÖ´Ù.

°Ë»ö ±â´ÉÀ» ÀÛ¼ºÇϱâ À§ÇØ ÀÌÀü ÇÁ·ÎÁ§Æ®¸¦ º¹»çÇÏ¿© Dangeun7 ÇÁ·ÎÁ§Æ®¸¦ ¸¸µéµµ·Ï ÇÏÀÚ. °Ë»ö °ü·Ã ¸í·ÉµéÀº °Ë»ö ¸Þ´º¿¡ ¸ðµÎ ÀÖÀ¸¸ç ´ëºÎºÐÀÇ ¸í·É¿¡ ´ÜÃàÅ°°¡ ¹èÁ¤µÇ¾î ÀÖ´Ù. ¸®¼Ò½º¿¡´Â °Ë»ö ¸Þ´º¿Í °Ë»ö °ü·Ã ´ëÈ­»óÀÚµéÀÌ ÀÌ¹Ì ÀÛ¼ºµÇ¾î ÀÖÀ¸¹Ç·Î Äڵ常 Ãß°¡ÇÏ¸é µÈ´Ù. ¸ÕÀú Dangeun.cpp¿¡ °Ë»ö¿¡ ÇÊ¿äÇÑ Àü¿ªº¯¼öµéÀ» ¼±¾ðÇÑ´Ù.

 

HWND g_FindDlg;

CHistory arFind[4];

DWORD FindFlag;

 

ã±â¸¦ ÇÏ´Â Áß¿¡ ´ëÈ­»óÀÚ¸¦ ´ÝÁö ¾Ê°íµµ °Ë»öµÈ ÅؽºÆ®¸¦ ÆíÁýÇÒ ¼ö ÀÖ¾î¾ß ÇϹǷΠã±â/¹Ù²Ù±â ´ëÈ­»óÀÚ´Â ¸ðµ¨¸®½ºÇüÀ¸·Î ¿­·Á¾ß ÇÑ´Ù. ¸ðµ¨¸®½ºÇü ´ëÈ­»óÀÚ´Â ±× »ý¸íÀÌ Àü¿ªÀûÀ̱⠶§¹®¿¡ ´ëÈ­»óÀÚÀÇ Çڵ鵵 Àü¿ªÀ¸·Î ¼±¾ðµÇ¾î¾ß Çϸç g_FindDlg °¡ ã±â ´ëÈ­»óÀÚÀÇ ÇÚµéÀÌ´Ù. arFind´Â °Ë»ö¿¡ »ç¿ëµÈ ¹®ÀÚ¿­ È÷½ºÅ丮¸¦ ÀúÀåÇÏ´Â CHistroy °´Ã¼ ¹è¿­À̸ç 4°¡Áö Á¾·ùÀÇ È÷½ºÅ丮¸¦ °ü¸®ÇÑ´Ù. arFind[0]´Â ãÀº ¹®ÀÚ¿­, arFind[1]Àº ¹Ù²Ù±â ¹®ÀÚ¿­ÀÌ¸ç ³ª¸ÓÁö´Â ÆÄÀÏ Ã£±â¿¡¼­ °Ë»ö ´ë»ó ÆÄÀÏ°ú °Ë»ö Æú´õ ÀúÀå¿¡ »ç¿ëµÈ´Ù. arFind[0] °´Ã¼°¡ »ç¿ëÀÚ°¡ °Ë»öÇÑ ¹®ÀÚ¿­ÀÇ ¸ñ·ÏÀ» ±â¾ïÇÑ´Ù´Â °ÍÀ» ¾Ë¾Æ µÎÀÚ. OnCreate¿¡¼­ È÷½ºÅ丮 °´Ã¼µéÀ» ´ÙÀ½°ú °°ÀÌ ÃʱâÈ­ÇÑ´Ù.

 

int OnCreate(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     ....

     ccs.hWindowMenu=GetSubMenu(GetMenu(hWnd),5);

     ccs.idFirstChild=IDM_WINDOWCHILD;

     g_hMDIClient=CreateWindowEx(WS_EX_CLIENTEDGE,"MDICLIENT", NULL,

          WS_CHILD | WS_CLIPCHILDREN |    WS_VISIBLE,

          0,0,0,0,hWnd,(HMENU)NULL, g_hInst, (LPSTR)&ccs);

     SetTimer(hWnd,100,1,NULL);

 

    arFind[0].Init(256,50);

    arFind[1].Init(256,20);

    arFind[2].Init(256,20);

    arFind[3].Init(256,20);

     ....

 

ÇÑ ¹ø¿¡ °Ë»öÇÒ ¼ö ÀÖ´Â ¹®ÀÚ¿­Àº ÃÖ´ë 255¹ÙÀÌÆ®±îÁö·Î Á¦ÇÑÇÏ¿´´Ù. ã±â È÷½ºÅ丮°¡ °¡Àå ¸¹ÀÌ »ç¿ëµÇ¹Ç·Î 50°³±îÁö ±â¾ïÇϵµ·Ï ÇßÀ¸¸ç ³ª¸ÓÁö´Â ±×´ÙÁö ÀÚÁÖ »ç¿ëµÇÁö ¾ÊÀ¸¹Ç·Î 20°³±îÁö¸¸ ±â¾ïÇÑ´Ù. ´õ ¸¹Àº È÷½ºÅ丮¸¦ ±â¾ïÇÏ°í ½Í´Ù¸é ÀÌ ÃʱⰪÀ» ´Ã·ÁÁÖ°í »ç¿ëÀÚ°¡ Á÷Á¢ º¯°æÇÒ ¼ö ÀÖµµ·Ï ÇÏ°í ½Í´Ù¸é ¿É¼Ç¿¡ Æ÷ÇÔ½ÃÅ°¸é µÈ´Ù.

FindFlag´Â ´ë¼Ò¹®ÀÚ ±¸ºÐ, ´Ü¾î ´ÜÀ§·Î, °Ë»ö ¹æÇâ µîÀ» ÁöÁ¤ÇÏ´Â °Ë»ö ¿É¼ÇÀÌ´Ù. °Ë»ö ¿É¼ÇµéÀº ¸ðµÎ BOOLÇüÀ̹ǷΠ¿É¼Ç¸¶´Ù º°µµÀÇ º¯¼ö¸¦ ¸¸µé ÇÊ¿ä¾øÀÌ Á¤¼öÇü º¯¼öÀÇ °¢ ºñÆ®º°·Î ¿É¼ÇÀ» ±â¾ïÇϵµ·Ï ÇÏ¿´´Ù. ApiEdit.h¿¡ FindFlag¸¦ ±¸¼ºÇÏ´Â ´ÙÀ½ Ç÷¡±×µéÀ» Á¤ÀÇÇÑ´Ù. Ç÷¡±×ÀÇ Àǹ̴ À̸§¸¸ ºÁµµ ½±°Ô ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù.

 

#define AE_FIND_UP 0x1

#define AE_FIND_WHOLEWORD 0x2

#define AE_FIND_MATCHCASE 0x4

#define AE_FIND_WRAP 0x8

#define AE_FIND_CLOSE 0x10

#define AE_FIND_RECURSIVE 0x20

#define AE_FIND_SHORTPATH 0x40

 

ÀÌ Ç÷¡±×µéÀº DangeunÀÌ °Ë»ö ¿É¼ÇÀ» ¼³Á¤ÇÒ ¶§µµ »ç¿ëÇϸç ApiEdit°¡ ½ÇÁ¦ °Ë»öÀ» ÇÒ ¶§µµ »ç¿ëÇϹǷΠApiEdit.h Çì´õ ÆÄÀÏ¿¡ Á¤ÀÇÇØ¾ß ÇÑ´Ù. ã±â ´ëÈ­»óÀÚ´Â ´ÙÀ½°ú °°ÀÌ µðÀÚÀεǾî ÀÖ´Ù.

ãÀ» ³»¿ëÀ» ÀԷ¹޴ ÄÞº¸¹Ú½º¿Í ¹®ÀÚ¿­ °Ë»ö¿¡ ÇÊ¿äÇÑ ¿É¼ÇµéÀ» ÀԷ¹ÞÀ» ¼ö Àִ üũ¹Ú½ºµéÀÌ ¹èÄ¡µÇ¾î ÀÖ´Ù. ´Ù¼¸ °³ÀÇ Ã¼Å©¹Ú½ºµéÀº AE_FIND_* ¸ÅÅ©·Î »ó¼ö¿Í Â÷·Ê´ë·Î ´ëÀÀµÈ´Ù. ÄÞº¸¹Ú½º´Â °Ë»ö ¹®ÀÚ¿­ È÷½ºÅ丮¸¦ °¡Áö¸ç ÄÞº¸ ¸®½ºÆ®¿¡¼­ ÀÌÀü °Ë»ö ¹®ÀÚ¿­À» Àç °Ë»öÇÒ ¼ö ÀÖ´Ù. ¿î¿µÃ¼Á¦°¡ Á¦°øÇϴ ã±â °øÅë ´ëÈ­»óÀÚ°¡ ÀÖ±â´Â ÇÏÁö¸¸ ´Ù·ê ¼ö ÀÖ´Â ¿É¼ÇÀÌ Á¦ÇÑÀûÀ̱⠶§¹®¿¡ Á÷Á¢ ´ëÈ­»óÀÚ¸¦ ¸¸µé¾ú´Ù. ´ÙÀ½Àº ã±â ´ëÈ­»óÀÚÀÇ ÇÁ·Î½ÃÀú¸¦ ÀÛ¼ºÇÑ´Ù. °Ë»ö È÷½ºÅ丮¸¦ ÄÞº¸¹Ú½º·Î Àоî¿À´Â À¯Æ¿¸®Æ¼ ÇÔ¼öµµ °°ÀÌ ¸¸µéµµ·Ï ÇÏÀÚ.

 

void RefillHistory(HWND hCombo, CHistory &Hist)

{

     int i;

 

     SendMessage(hCombo,CB_RESETCONTENT,0,0);

     for (i=0;i<Hist.num;i++) {

          SendMessage(hCombo,CB_ADDSTRING,0,(LPARAM)Hist.Get(i));

     }

     SendMessage(hCombo,CB_SETCURSEL,0,0);

}

 

BOOL CALLBACK FindDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     TCHAR szTemp[256];

 

     switch(iMessage)

     {

     case WM_INITDIALOG:

          if (FindFlag & AE_FIND_UP) {

              CheckDlgButton(hDlg,IDC_FIND_UP,BST_CHECKED);

          }

 

          if (FindFlag & AE_FIND_WHOLEWORD) {

              CheckDlgButton(hDlg,IDC_FIND_WHOLEWORD,BST_CHECKED);

          }

 

          if (FindFlag & AE_FIND_MATCHCASE) {

              CheckDlgButton(hDlg,IDC_FIND_MATCHCASE,BST_CHECKED);

          }

 

          if (FindFlag & AE_FIND_WRAP) {

              CheckDlgButton(hDlg,IDC_FIND_WRAP,BST_CHECKED);

          }

 

          if (FindFlag & AE_FIND_CLOSE) {

              CheckDlgButton(hDlg,IDC_FIND_CLOSE,BST_CHECKED);

          }

 

          RefillHistory(GetDlgItem(hDlg,IDC_FIND_WHAT),arFind[0]);

          SendMessage(GetDlgItem(hDlg,IDC_FIND_WHAT), CB_LIMITTEXT, (WPARAM)255, 0);

          SendMessage(hDlg,WM_COMMAND,MAKEWPARAM(IDC_FIND_WHAT,CBN_EDITCHANGE),0);

          return TRUE;

     case WM_COMMAND:

          switch (LOWORD(wParam))

          {

          case IDC_FIND_WHAT:

              switch (HIWORD(wParam)) {

              case CBN_EDITCHANGE:

                   if (GetWindowTextLength(GetDlgItem(hDlg,IDC_FIND_WHAT)) == 0) {

                        EnableWindow(GetDlgItem(hDlg,IDC_BTNFIND),FALSE);

                   } else {

                        EnableWindow(GetDlgItem(hDlg,IDC_BTNFIND),TRUE);

                   }

                   break;

              case CBN_SELCHANGE:

                   PostMessage(hDlg,WM_COMMAND,MAKEWPARAM(IDC_FIND_WHAT,CBN_EDITCHANGE),0);                                break;

              }

              break;

          case IDCANCEL:

              DestroyWindow(hDlg);

              break;

          case IDC_BTNFIND:

              if (IsDlgButtonChecked(hDlg,IDC_FIND_UP)) {

                   FindFlag |= AE_FIND_UP;

              } else {

                   FindFlag &= ~AE_FIND_UP;

              }

 

              if (IsDlgButtonChecked(hDlg,IDC_FIND_WHOLEWORD)) {

                   FindFlag |= AE_FIND_WHOLEWORD;

              } else {

                   FindFlag &= ~AE_FIND_WHOLEWORD;

              }

 

              if (IsDlgButtonChecked(hDlg,IDC_FIND_MATCHCASE)) {

                   FindFlag |= AE_FIND_MATCHCASE;

              } else {

                   FindFlag &= ~AE_FIND_MATCHCASE;

              }

 

              if (IsDlgButtonChecked(hDlg,IDC_FIND_WRAP)) {

                   FindFlag |= AE_FIND_WRAP;

              } else {

                   FindFlag &= ~AE_FIND_WRAP;

              }

 

              if (IsDlgButtonChecked(hDlg,IDC_FIND_CLOSE)) {

                   FindFlag |= AE_FIND_CLOSE;

              } else {

                   FindFlag &= ~AE_FIND_CLOSE;

              }

 

              GetDlgItemText(hDlg,IDC_FIND_WHAT,szTemp,255);

              if (lstrlen(szTemp)) {

                   arFind[0].Add(szTemp);

                   RefillHistory(GetDlgItem(hDlg,IDC_FIND_WHAT),arFind[0]);

              }

 

              switch (LOWORD(wParam)) {

              case IDC_BTNFIND:

                   SendMessage(GetParent(hDlg),WM_USER+2,1,0);

                   if (FindFlag & AE_FIND_CLOSE) {

                        DestroyWindow(hDlg);

                   }

                   break;

              }

              return TRUE;

          }

          return FALSE;

     }

     return FALSE;

}

 

RefillHistory ÇÔ¼ö´Â ÄÞº¸¹Ú½ºÀÇ ÇÚµé°ú È÷½ºÅ丮 °´Ã¼¸¦ ÁÖ¸é È÷½ºÅ丮¿¡ ±â·ÏµÈ ¹®ÀÚ¿­À» ÄÞº¸¹Ú½º¿¡ ³Ö¾îÁØ´Ù. ã±â ´ëÈ­»óÀÚÀÇ °æ¿ì ãÀ» ³»¿ë ÄÞº¸¹Ú½º¿¡ arFind[0] È÷½ºÅ丮¸¦ ´ëÀÔÇÏ¿´´Ù. ÃÖÃÊ È÷½ºÅ丮°¡ ºñ¾î ÀÖÀ¸¹Ç·Î ¾Æ¹«°Íµµ ´ëÀÔµÇÁö ¾ÊÁö¸¸ °Ë»ö ±â´ÉÀ» »ç¿ëÇϸé ÇÑ ¹ø °Ë»öÇÑ ¹®ÀÚ¿­ÀÌ È÷½ºÅ丮¿¡ ÀúÀåµÇ¸ç ÄÞº¸¹Ú½º¸¦ ÅëÇØ ´Ù½Ã ¼±ÅÃÇÒ ¼ö ÀÖ°Ô µÈ´Ù. ÀÌ ÇÔ¼ö´Â ã±â/¹Ù²Ù±â, ÆÄÀÏ Ã£±â/ÆÄÀÏ ¹Ù²Ù±â µî¿¡ °øÅëÀûÀ¸·Î »ç¿ëµÈ´Ù.

WM_INITDIALOG¿¡¼­ °Ë»ö ¿É¼ÇÀÎ FindFlagÀÇ °¢ ºñÆ®¸¦ Á¡°ËÇÏ¿© °Ë»ö ¿É¼Ç ÄÁÆ®·ÑÀ» ÃʱâÈ­ÇÏ¿© »ç¿ëÀÚ¿¡°Ô ÇöÀç °Ë»ö ¿É¼ÇÀ» º¸¿©ÁØ´Ù. ¿¹¸¦ µé¾î AE_FIND_MATCHCASE ¿É¼ÇÀÌ ¼±ÅõǾî ÀÖÀ¸¸é ¡®¿µ¹® ´ë/¼Ò¹®ÀÚ ±¸ºÐ¡¯ üũ¹Ú½º¸¦ üũÇÒ °ÍÀÌ´Ù. È÷½ºÅ丮 °´Ã¼ÀÇ ÆøÀÌ 255·Î Á¦ÇѵǾî ÀÖÀ¸¹Ç·Î °Ë»ö½ÄÀ» ÀԷ¹޴ ÄÞº¸¹Ú½ºµµ ÃÖ´ë 255¹®ÀÚ±îÁö¸¸ ÀԷ¹ÞÀ» ¼ö ÀÖµµ·Ï Á¦ÇÑÇÏ¿´´Ù.

WM_COMMAND¿¡¼­´Â ÄÁÆ®·ÑÀÇ ÅëÁö ¸Þ½ÃÁö¸¦ ó¸®Çϴµ¥ ãÀ» ³»¿ë ÄÞº¸¹Ú½º°¡ ÆíÁýµÉ ¶§ ÀÔ·ÂµÈ ¹®ÀÚ¿­ÀÇ ±æÀ̸¦ º¸°í ã±â ¹öÆ°À» °ü¸®ÇÑ´Ù. ãÀ» ³»¿ëÀÌ ÀÖ¾î¾ß¸¸ °Ë»öÀ» ½ÃÀÛÇÒ ¼ö ÀÖÀ¸¹Ç·Î °Ë»ö ¹®ÀÚ¿­ÀÇ ±æÀÌ°¡ 0À̸é ã±â ¹öÆ°À» »ç¿ë ±ÝÁö½ÃÄ×´Ù. ÄÞº¸¹Ú½ºÀÇ ¼±Åà »óÅ°¡ º¯°æµÉ ¶§³ª ´ëÈ­»óÀÚ°¡ ÃʱâÈ­µÉ ¶§µµ ÀÌ Ã³¸®¸¦ ÇØ¾ß ÇÑ´Ù.

ã±â ¹öÆ°À» Ŭ¸¯Çϸé ÄÁÆ®·Ñ¿¡ ¼³Á¤µÈ ¿É¼ÇµéÀ» FindFlag º¯¼ö·Î ´Ù½Ã ÀоîµéÀÌ°í ãÀ» ¹®ÀÚ¿­Àº arFind[0] ¹è¿­ÀÇ Ã¹ ¹ø° ¹è¿­¿ä¼Ò¿¡ ±â¾ïµÈ´Ù. ¸¸¾à ÀÌ ¹®ÀÚ¿­ÀÌ È÷½ºÅ丮¿¡ ¾øÀ¸¸é ¹è¿­ÀÇ Ã³À½¿¡ »ðÀԵǸç ÀÌ¹Ì ÀÖÀ¸¸é Á¦ÀÏ À§·Î ¿Ã¶ó°¥ °ÍÀÌ´Ù. ÀÌ·± ¸ñ·Ï °ü¸® ±â´ÉÀº CHistroy::Add ÇÔ¼ö¿¡ ÀÇÇØ Ã³¸®µÇ¸ç MRU¸¦ ÀÛ¼ºÇÒ ¶§ ÀÌ¹Ì »ìÆì º¸¾Ò¾ú´Ù. ÀÌÈĺÎÅÍ arFind[0].Get(0)·Î »ç¿ëÀÚ°¡ ÀÔ·ÂÇÑ °Ë»ö½ÄÀ» ±¸ÇÒ ¼ö ÀÖ´Ù.

ãÀ» ³»¿ë°ú °Ë»ö ¿É¼ÇÀ» arFind[0], FindFlag Àü¿ªº¯¼ö¿¡ ±â·ÏÇÑ ÈÄ ¸ÞÀÎ À©µµ¿ì·Î WM_USER+2 ¸Þ½ÃÁö¸¦ º¸³»ÁÖµÇ À̶§ wParamÀº 1ÀÇ °ªÀ» °¡Áø´Ù. ¸ÞÀÎ À©µµ¿ì´Â ÀÌ ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§ Àü¿ªº¯¼ö°ªÀ» ÂüÁ¶ÇÏ¿© °Ë»öÀ» ÇÒ °ÍÀÌ´Ù.

AE_FIND_CLOSE ¿É¼ÇÀº °Ë»öÀ» ¸¶Ä£ ÈÄ ´ëÈ­»óÀÚ¸¦ ´ÝÀ» °ÍÀÎÁö¸¦ ±â¾ïÇϴµ¥ ÀÌ ¿É¼ÇÀÌ ¼±ÅõǾî ÀÖÀ¸¸é DestroyWindow ÇÔ¼ö·Î ã±â ´ëÈ­»óÀÚ¸¦ Á÷Á¢ Æı«ÇÑ´Ù. ¼±ÅõǾî ÀÖÁö ¾ÊÀ¸¸é ã±â ´ëÈ­»óÀÚ´Â ´ÝÈ÷Áö ¾Ê°í ±×´ë·Î À¯ÁöµÈ´Ù. °è¼Ó °Ë»öÀ» ÇÒ ¶§´Â ÀÌ ¿É¼ÇÀ» ¼±ÅÃÇÏÁö ¸»°í À̵¿À» À§ÇØ °Ë»öÀ» ÇÏ°í ÀÖÀ¸¸é ÀÌ ¿É¼ÇÀ» ¼±ÅÃÇÏ¿© À̵¿ÇÑ °÷¿¡¼­ ¹Ù·Î ÆíÁýÀ» ÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â °ÍÀÌ ÁÁ´Ù.

ã±â ´ëÈ­»óÀÚ´Â ¸Þ´º¿¡¼­ °Ë»ö/ã±â¸¦ ¼±ÅÃÇϰųª ¶Ç´Â ´ÜÃàÅ° <Ctrl+F>¸¦ ´©¸¦ ¶§ ³ªÅ¸³­´Ù. OnCommand¿¡¼­ IDM_SEARCH_FIND ¸í·ÉÀ» ¹Þ¾ÒÀ» ¶§ ÀÌ ´ëÈ­»óÀÚ¸¦ È£ÃâÇÑ´Ù.

 

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

{

     ....

     case IDM_SEARCH_FIND:

          if (!IsWindow(g_FindDlg)) {

              g_FindDlg=CreateDialog(g_hInst,MAKEINTRESOURCE(IDD_FIND),hWnd,FindDlgProc);

              ShowWindow(g_FindDlg,SW_SHOW);

          } else {

              SetFocus(g_FindDlg);

          }

          break;

 

¸ðµ¨¸®½º ´ëÈ­»óÀÚÀ̹ǷΠDialogBox ÇÔ¼ö¸¦ »ç¿ëÇÏÁö ¾Ê°í CreateDialog ÇÔ¼ö·Î ¸¸µé±â¸¸ ÇÑ´Ù. g_FindDlg ÇÚµéÀÌ À¯È¿Çϸé ÀÌ¹Ì Ã£±â ´ëÈ­»óÀÚ°¡ ¶° ÀÖÀ¸¹Ç·Î »õ·Î ´ëÈ­»óÀÚ¸¦ ¸¸µé ÇÊ¿ä¾øÀÌ SetFocus·Î Æ÷Ä¿½º¸¸ ³Ñ°ÜÁÖ¸é µÈ´Ù. ¸Þ½ÃÁö ·çÇÁ´Â ¸ðµ¨¸®½º ´ëÈ­»óÀÚÀÇ ¸Þ½ÃÁö¸¦ ó¸®ÇÒ ¼ö ÀÖµµ·Ï ´ÙÀ½°ú °°ÀÌ ¼öÁ¤µÇ¾î¾ß ÇÑ´Ù.

 

     while(GetMessage(&Message,0,0,0)) {

        if (!IsWindow(g_FindDlg) || !IsDialogMessage(g_FindDlg,&Message)) {

              if (!TranslateMDISysAccel(g_hMDIClient, &Message)) {

                   if (!TranslateAccelerator(hWnd,hAccel,&Message)) {

                        TranslateMessage(&Message);

                        DispatchMessage(&Message);

                   }

              }

        }

     }

 

ÀÌ Ã³¸®¸¦ ÇÏÁö ¾ÊÀ¸¸é ã±â ´ëÈ­»óÀÚ¿¡¼­ Tab, Ä¿¼­À̵¿Å° µîÀ¸·Î ÄÁÆ®·ÑÀ» ÀüȯÇÒ ¼ö ¾ø´Ù. ¸Þ½ÃÁö ·çÇÁ ¸ð¾çÀÌ Á» º¹ÀâÇØÁ³´Âµ¥ ¸Þ½ÃÁö Å¥¿¡¼­ ¸Þ½ÃÁö¸¦ ²¨³»¸é IsDialogMessage ÇÔ¼ö°¡ ¸ÕÀú ¸ðµ¨¸®½º ´ëÈ­»óÀÚ¸¦ À§ÇÑ ¸Þ½ÃÁöÀÎÁö º»´Ù. ¾Æ´Ï¸é MDI¾×¼¿·¯·¹ÀÌÅÍÀÎÁö º¸°í ±×°Íµµ ¾Æ´Ï¸é ¾×¼¿·¯·¹ÀÌÅÍ Å×ÀÌºí¿¡ µî·ÏµÈ Å°ÀÔ·ÂÀÎÁö º»´Ù. ÀÌ ¸ðµç Á¶°Ç¿¡ ÇØ´çµÇÁö ¾ÊÀ» ¶§ ºñ·Î¼Ò DispatchMessage ÇÔ¼ö¿¡ ÀÇÇØ À©µµ¿ì ÇÁ·Î½ÃÀú·Î ¸Þ½ÃÁö¸¦ º¸³½´Ù.

¸Þ½ÃÁö Å¥¿¡¼­ ²¨³½ ¸Þ½ÃÁö´Â ¿©·¯ ÇÔ¼öµé¿¡ ÀÇÇØ Á¡°ËµÇ°í 󸮵Ǵµ¥ À̶§ ¼ø¼­¿¡ ÁÖÀÇÇØ¾ß ÇÑ´Ù. ¾î¶² ÇÔ¼ö¸¦ ¸ÕÀú È£ÃâÇϴ°¡¿¡ µû¶ó ¸Þ½ÃÁö ó¸® ¿ì¼± ¼øÀ§°¡ °áÁ¤µÇ´Âµ¥ ¸ðµ¨¸®½º ´ëÈ­»óÀÚÀÇ ¸Þ½ÃÁö¸¦ ó¸®ÇÏ´Â IsDialogMessage ÇÔ¼ö°¡ ÃÖ¿ì¼± ¼øÀ§¸¦ °¡Á®¾ß ÇÑ´Ù. ¸¸¾à ÀÌ ÇÔ¼ö°¡ TranslateAccelerator ÇÔ¼öº¸´Ù µÚ¿¡ ÀÖÀ¸¸é ã±â ´ëÈ­»óÀÚÀÇ ÄÞº¸¹Ú½º¿¡¼­ <Ctrl+C>, <Ctrl+V> µîÀÇ Å¬¸³º¸µå ´ÜÃàÅ°°¡ ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù.

¿©±â±îÁö ÀÛ¼ºÇÑ ÈÄ ½ÇÇàÇÏ¸é ´ëÈ­»óÀÚ°¡ ³ªÅ¸³ª¸ç °Ë»ö ¿É¼ÇÀ̳ª °Ë»ö ¹®ÀÚ¿­À» ÀÔ·ÂÇÒ ¼ö´Â ÀÖÁö¸¸ ¾ÆÁ÷ °Ë»öÀº µÇÁö ¾Ê´Â´Ù. °Ë»ö ¿äûÀº ¸ÞÀÎ À©µµ¿ì°¡ Á÷Á¢ ó¸®ÇØ¾ß ÇÑ´Ù. ÀÌ ´ëÈ­»óÀÚÀÇ ÀÓ¹«´Â ÇöÀç ¼³Á¤µÇ¾î ÀÖ´Â °Ë»ö ¿É¼ÇÀ» º¸¿©ÁÖ°í »ç¿ëÀÚ¿¡°Ô °Ë»ö ¿É¼Ç°ú °Ë»ö ¹®ÀÚ¿­À» ÀԷ¹޴ °Í»ÓÀÌ´Ù. ´ëÈ­»óÀÚ´Â ´ëÈ­°¡ ÁÖ¸ñÀûÀÌÁö ±â´ÉÀ» Á¦°øÇÏ´Â °ÍÀÌ º»ºÐÀÌ ¾Æ´Ï´Ù. ÆÄÀÏ¿­±â ´ëÈ­»óÀÚ´Â ¿­°íÀÚ ÇÏ´Â ÆÄÀÏÀÇ °æ·Î¸¦ ÀÔ·Â¹Þ¾Æ ÁÙ »ÓÀÌÁö ÆÄÀÏÀ» Á÷Á¢ ¿­¾îÁÖ´Â °ÍÀº ¾Æ´ÏÁö ¾Ê´Â°¡? ´ëÈ­»óÀÚ°¡ ´ëÈ­ ÀÌ¿ÜÀÇ µ¿ÀÛÀ» ÇÏ·Á°í ÇÒ ¶§ ÇÁ·Î±×·¥Àº º¹ÀâÇØÁø´Ù.