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