¸ÅÅ©·Î¸¦ ½ÇÇàÇÒ ¼ö ÀÖ´Â ¸ðµç Äڵ尡 ¿Ï·áµÇ¾úÀ¸¹Ç·Î ÀÌÁ¦ »ç¿ëÀÚ°¡ ¸ÅÅ©·Î¸¦ ÀÛ¼ºÇÏ°í °ü¸®ÇÒ ¼ö ÀÖ´Â ´ëÈ»óÀÚ¸¦ ¸¸µé Â÷·Ê´Ù. »ç¿ëÀÚ´Â ÀÌ ´ëÈ»óÀÚ¿¡¼ ÃÖ±Ù ÆíÁý µ¿ÀÛÀ» ¸ÅÅ©·Î·Î ¸¸µé ¼öµµ ÀÖ°í Á÷Á¢ ¸í·ÉÀ» ÀÔ·ÂÇØ ³ÖÀ» ¼öµµ ÀÖÀ¸¸ç ¸ÅÅ©·Î¸¦ Ãß°¡, »èÁ¦, ÆíÁýÇÒ ¼ö ÀÖ´Ù. ´ëÈ»óÀÚ ¸®¼Ò½º´Â ÀÌ¹Ì ÀÛ¼ºµÇ¾î ÀÖÀ¸¹Ç·Î Äڵ常 ÀÛ¼ºÇÏ¸é µÈ´Ù. ¸ÕÀú OnCommand¿¡¼ ¸ÅÅ©·Î °ü¸® ´ëÈ»óÀÚ¸¦ È£ÃâÇÑ´Ù.
void OnCommand(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
....
case IDM_TOOL_MACRO:
DialogBox(g_hInst,MAKEINTRESOURCE(IDD_MACRO),hWnd,MacroDlgProc);
break;
´ëÈ»óÀÚ ³»ºÎÀÇ µ¿ÀÛÀº ¹«Ã´ º¹ÀâÇÏÁö¸¸ ¾î·µç ´ëÈ»óÀÚÀ̹ǷΠȣ½ºÆ®´Â ´ëÈ»óÀÚ¸¦ ¶ç¿ì±â¸¸ ÇÏ¸é µÈ´Ù. Macro.h¿¡ °ü·Ã ÇÔ¼öÀÇ ¿øÇüÀ» ¼±¾ðÇÑ´Ù.
BOOL CALLBACK MacroDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam);
BOOL CALLBACK MacroEditDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam);
void DisplayMakingCommand(HWND hDlg);
BOOL CALLBACK AddCommandDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam);
BOOL CALLBACK RunMacroDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam);
´ëÈ»óÀÚ ÇÁ·Î½ÃÀú´Â ´ÙÀ½°ú °°´Ù. ¸ÅÅ©·Î¿Í °ü·ÃµÈ ¸ðµç ÀÏÀ» °üÀåÇÏ¸ç °øÅë ÄÁÆ®·Ñ±îÁö ÇÁ·Î±×·¡¹ÖÇØ¾ß ÇÏ°í ³»ºÎ¿¡¼ ApiEdit ÄÁÆ®·Ñ±îÁö »ý¼ºÇؼ »ç¿ëÇϹǷΠ±æÀÌ°¡ Á» ±æ´Ù.
BOOL CALLBACK MacroDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
static HWND hRecCom;
static CApiEdit *pAe;
static CApiEditText *pView,*pAct;
static int oldidx=-1;
static HWND hActive;
SInfo *pSi;
LVCOLUMN COL;
int i,count,idx,len;
LVITEM LI;
TCHAR szName[65];
RECT brt;
BOOL bEnable;
TCHAR *szMacro;
const TCHAR *p;
int Verb,Object;
TCHAR szDesc[128];
switch(iMessage) {
case WM_INITDIALOG:
MoveToParentCenter(hDlg);
hRecCom=GetDlgItem(hDlg,IDC_RECENTCOM);
COL.mask=LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
COL.fmt=LVCFMT_LEFT;
COL.cx=40;
COL.pszText="¼ø¼";
COL.iSubItem=0;
ListView_InsertColumn(hRecCom,0,&COL);
COL.cx=150;
COL.pszText="¸í·É";
COL.iSubItem=1;
ListView_InsertColumn(hRecCom,1,&COL);
COL.cx=100;
COL.pszText="¼³¸í";
COL.iSubItem=2;
ListView_InsertColumn(hRecCom,2,&COL);
ListView_SetExtendedListViewStyle(hRecCom,LVS_EX_FULLROWSELECT);
SetDlgItemInt(hDlg,IDC_MACROCOUNT,1,FALSE);
SendDlgItemMessage(hDlg,IDC_SPINMACROCOUNT,UDM_SETRANGE,0,MAKELPARAM(1000000,1));
// ¹öÆ° ÀÚ¸®¿¡ ApiEdit¸¦ ¹èÄ¡ÇÑ´Ù.´ëºÎºÐÀÇ ¼³Á¤Àº ±âº» ¼³Á¤´ë·Î, ¸î°¡Áö¸¸ °íÁ¤ ¼³Á¤ »ç¿ë
GetWindowRect(GetDlgItem(hDlg,IDC_PLACEAPIEDIT),&brt);
ScreenToClient(hDlg,(LPPOINT)&brt);
ScreenToClient(hDlg,(LPPOINT)&brt.right);
pAe=new CApiEdit;
pAe->Create(brt.left,brt.top,brt.right-brt.left,brt.bottom-brt.top,
WS_VISIBLE | WS_CHILD | WS_BORDER | WS_TABSTOP,0,hDlg);
SetSetting(*pAe);
pAe->SetShowState(SHOWMARGIN,TRUE);
pAe->SetShowState(SHOWLINENUM,TRUE);
pAe->SetWrap(0);
pAe->SetWantTab(FALSE);
pAct=pAe->GetActiveView();
EnableWindow(pAe->hWnd,FALSE);
// ÃÖ±Ù ¸í·ÉÀ» Àоî¿Â´Ù. È°¼ºÃ¢ÀÌ ¾øÀ¸¸é ¸»°í
hActive=(HWND)SendMessage(g_hMDIClient,WM_MDIGETACTIVE,0,(LPARAM)NULL);
if (hActive) {
pSi=(SInfo *)GetWindowLong(hActive,0);
pView=pSi->Ae.GetActiveView();
for (i=0;i<pView->AeMc.nowmc;i++) {
LI.mask=LVIF_TEXT;
LI.iSubItem=0;
LI.iItem=i;
itoa(i,szName,10);
LI.pszText=szName;
ListView_InsertItem(hRecCom,&LI);
p=pView->AeMc.arMc[i];
ListView_SetItemText(hRecCom,i,1,(LPSTR)p);
Verb=GetComVerb(p,arComVerb);
if (Verb==AEC_MOVE || Verb==AEC_MOVESEL || Verb==AEC_CONVERT) {
Object=GetComObject(Verb,p,arComObject,arObjOfVerb);
wsprintf(szDesc,"%s(%s)",arComVerb[Verb].Desc,
arComObject[arObjOfVerb[Verb]+Object].Desc);
} else {
lstrcpy(szDesc,arComVerb[Verb].Desc);
}
ListView_SetItemText(hRecCom,i,2,szDesc);
}
ListView_EnsureVisible(hList,i,FALSE);
}
// ¸ÅÅ©·Î ¸ñ·ÏÀ» Àоî¿Â´Ù. ù¹ø° ¸ÅÅ©·Î¸¦ ¼±ÅÃÇØ ÁØ´Ù.
for (i=0;i<DgMacro.Num;i++) {
SendDlgItemMessage(hDlg,IDC_CBMACRO,CB_ADDSTRING,0,(LPARAM)DgMacro.arMacro[i].Name);
}
if (oldidx==-1) {
oldidx=SendDlgItemMessage(hDlg,IDC_CBMACRO,CB_SETCURSEL,0,0);
} else {
oldidx=SendDlgItemMessage(hDlg,IDC_CBMACRO,CB_SETCURSEL,oldidx,0);
}
SendMessage(hDlg,WM_COMMAND,MAKEWPARAM(IDC_CBMACRO,CBN_SELCHANGE),0);
SendMessage(hDlg,WM_USER+1,0,0);
return TRUE;
// ¸ÅÅ©·Î °³¼ö¿¡ µû¶ó ÄÁÆ®·Ñ »ç¿ë ¿©ºÎ Á¶Á¤
case WM_USER+1:
if (SendDlgItemMessage(hDlg,IDC_CBMACRO,CB_GETCOUNT,0,0) == 0) {
bEnable=FALSE;
} else {
bEnable=TRUE;
}
EnableWindow(pAe->hWnd,bEnable);
EnableWindow(GetDlgItem(hDlg,IDC_BTNEDITMACRO),bEnable);
EnableWindow(GetDlgItem(hDlg,IDC_BTNDELETEMACRO),bEnable);
EnableWindow(GetDlgItem(hDlg,IDC_BTNMAKECOMMAND),bEnable);
if (hActive==NULL) {
bEnable=FALSE;
}
EnableWindow(GetDlgItem(hDlg,IDC_BTNRUNMACRO),bEnable);
EnableWindow(GetDlgItem(hDlg,IDC_MACROCOUNT),bEnable);
EnableWindow(GetDlgItem(hDlg,IDC_SPINMACROCOUNT),bEnable);
EnableWindow(GetDlgItem(hDlg,IDC_BTNCOPYRECENT),bEnable);
return TRUE;
// ÇöÀç ÆíÁýÁßÀÎ ¸ÅÅ©·Î¸¦ wParam¹ø¿¡ ÀúÀåÇÑ´Ù.
case WM_USER+2:
len=pAe->GetTextLength();
szMacro=(TCHAR *)malloc(len+2);
pAe->GetText(szMacro,len+2);
szMacro[len]=0;
pAe->SetModified(FALSE);
DgMacro.Set(wParam,szMacro);
free(szMacro);
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDC_CBMACRO:
switch (HIWORD(wParam)) {
case CBN_SELCHANGE:
// ÀÌÀü ¸ÅÅ©·Î°¡ º¯°æµÇ¾úÀ¸¸é ¸ÕÀú ÀúÀåÇÑ´Ù.
if (oldidx!=-1 && pAe->GetModified()) {
SendMessage(hDlg,WM_USER+2,oldidx,0);
}
idx=SendDlgItemMessage(hDlg,IDC_CBMACRO,CB_GETCURSEL,0,0);
if (idx != -1) {
pAe->SetText(DgMacro.arMacro[idx].Content,lstrlen(DgMacro.arMacro[idx].Content));
pAe->SetModified(FALSE);
oldidx=idx;
} else {
pAe->InitDoc();
}
break;
}
return TRUE;
case IDC_BTNNEWMACRO:
// ÀÌÀü ¸ÅÅ©·Î°¡ º¯°æµÇ¾úÀ¸¸é ¸ÕÀú ÀúÀåÇÑ´Ù.
if (oldidx!=-1 && pAe->GetModified()) {
SendMessage(hDlg,WM_USER+2,oldidx,0);
}
lstrcpy(szName,"");
if (DialogBoxParam(g_hInst,MAKEINTRESOURCE(IDD_EDITMACRO),hDlg,
MacroEditDlgProc,(LPARAM)szName)==IDCANCEL) {
return TRUE;
}
if (DgMacro.Find(szName) != -1) {
MessageBox(hDlg,"ÀÌ¹Ì µî·ÏµÈ À̸§ÀÔ´Ï´Ù. ´Ù¸¥ À̸§À» ¼±ÅÃÇØ ÁֽʽÿÀ","¾Ë¸²",MB_OK);
return TRUE;
}
idx=SendDlgItemMessage(hDlg,IDC_CBMACRO,CB_ADDSTRING,0,(LPARAM)szName);
oldidx=idx;
SendDlgItemMessage(hDlg,IDC_CBMACRO,CB_SETCURSEL,idx,0);
pAe->InitDoc();
SendMessage(hDlg,WM_USER+1,0,0);
// »õ·Î ¸¸µç ¸ÅÅ©·Î ÀÏ´Ü Ãß°¡. ±×·¡¾ß ¸Þ¸ð¸®°¡ ÇÒ´çµÇ°í SelChange°¡ ¹ß»ýÇصµ ¿¡·¯ ¾È³²
DgMacro.Add(szName,"");
return TRUE;
case IDC_BTNEDITMACRO:
idx=SendDlgItemMessage(hDlg,IDC_CBMACRO,CB_GETCURSEL,0,0);
lstrcpy(szName,DgMacro.arMacro[idx].Name);
if (DialogBoxParam(g_hInst,MAKEINTRESOURCE(IDD_EDITMACRO),hDlg,
MacroEditDlgProc,(LPARAM)szName)==IDCANCEL) {
return TRUE;
}
SendDlgItemMessage(hDlg,IDC_CBMACRO,CB_DELETESTRING,idx,0);
SendDlgItemMessage(hDlg,IDC_CBMACRO,CB_INSERTSTRING,idx,(LPARAM)szName);
SendDlgItemMessage(hDlg,IDC_CBMACRO,CB_SETCURSEL,idx,0);
lstrcpy(DgMacro.arMacro[idx].Name,szName);
return TRUE;
case IDC_BTNDELETEMACRO:
idx=SendDlgItemMessage(hDlg,IDC_CBMACRO,CB_GETCURSEL,0,0);
DgMacro.Delete(idx);
SendDlgItemMessage(hDlg,IDC_CBMACRO,CB_DELETESTRING,idx,0);
if (SendDlgItemMessage(hDlg,IDC_CBMACRO,CB_GETCOUNT,0,0) == 0) {
SendMessage(hDlg,WM_USER+1,0,0);
idx=-1;
} else {
idx=0;
}
SendDlgItemMessage(hDlg,IDC_CBMACRO,CB_SETCURSEL,idx,0);
oldidx=-1;
SendMessage(hDlg,WM_COMMAND,MAKEWPARAM(IDC_CBMACRO,CBN_SELCHANGE),0);
return TRUE;
case IDC_BTNMAKECOMMAND:
szMacro=(TCHAR *)malloc(256);
if (DialogBoxParam(g_hInst,MAKEINTRESOURCE(IDD_ADDCOMMAND),hDlg,
AddCommandDlgProc,(LPARAM)szMacro)==IDOK) {
pAct->SetOffset(pAe->FindParaStart(pAct->GetOffset()));
pAct->InsertText(szMacro);
pAct->InsertText("\r\n");
}
free(szMacro);
return TRUE;
case IDC_BTNCOPYRECENT:
count=ListView_GetItemCount(hRecCom);
for (i=0;i<count;i++) {
if (ListView_GetItemState(hRecCom,i,LVIS_SELECTED)==LVIS_SELECTED) {
pAct->SetOffset(pAe->FindParaStart(pAct->GetOffset()));
pAct->InsertText(pView->AeMc.arMc[i]);
pAct->InsertText("\r\n");
}
}
return TRUE;
case IDC_BTNRUNMACRO:
idx=SendDlgItemMessage(hDlg,IDC_CBMACRO,CB_GETCURSEL,0,0);
if (pAe->GetModified()) {
SendMessage(hDlg,WM_USER+2,idx,0);
}
count=GetDlgItemInt(hDlg,IDC_MACROCOUNT,NULL,FALSE);
PostMessage(g_hFrameWnd,WM_USER+4,count,(LPARAM)DgMacro.arMacro[idx].Name);
// no break.
case IDCANCEL:
idx=SendDlgItemMessage(hDlg,IDC_CBMACRO,CB_GETCURSEL,0,0);
if (pAe->GetModified()) {
if (MessageBox(hDlg,"¼öÁ¤µÈ ¸ÅÅ©·Î¸¦ ÀúÀåÇϽðڽÀ´Ï±î?","Áú¹®",MB_YESNO) == IDYES) {
SendMessage(hDlg,WM_USER+2,idx,0);
}
}
DestroyWindow(pAe->hWnd);
delete pAe;
EndDialog(hDlg,IDCANCEL);
oldidx=idx;
return TRUE;
}
return FALSE;
}
return FALSE;
}
BOOL CALLBACK MacroEditDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
static TCHAR *pName;
int i;
TCHAR NewMacro[256];
switch(iMessage) {
case WM_INITDIALOG:
MoveToParentCenter(hDlg);
SendDlgItemMessage(hDlg,IDC_MACRONAME,EM_LIMITTEXT,64,0);
pName=(TCHAR *)lParam;
if (lstrlen(pName)==0) {
SetWindowText(hDlg,"»õ ¸ÅÅ©·Î");
for (i=1;;i++) {
wsprintf(NewMacro,"¸ÅÅ©·Î%d",i);
if (DgMacro.Find(NewMacro)==-1) {
break;
}
}
SetDlgItemText(hDlg,IDC_MACRONAME,NewMacro);
} else {
SetWindowText(hDlg,"¸ÅÅ©·Î À̸§ º¯°æ");
SetDlgItemText(hDlg,IDC_MACRONAME,pName);
}
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDOK:
GetDlgItemText(hDlg,IDC_MACRONAME,pName,64);
StringNormalize(pName,NULL);
if (IsStrEmpty(pName)) {
MessageBox(hDlg,"¸ÅÅ©·Î À̸§À» ÁöÁ¤ÇØ ÁֽʽÿÀ","¾Ë¸²",MB_OK);
return TRUE;
}
if (strchr(pName,'\"') || strchr(pName,'\\')) {
MessageBox(hDlg,"¸ÅÅ©·Î À̸§¿¡ \"¿Í \\´Â ¾µ ¼ö ¾ø½À´Ï´Ù.","¾Ë¸²",MB_OK);
return TRUE;
}
EndDialog(hDlg,IDOK);
return TRUE;
case IDCANCEL:
EndDialog(hDlg,IDCANCEL);
return TRUE;
}
return FALSE;
}
return FALSE;
}
´ëÈ»óÀÚ ÃʱâÈ Äڵ尡 ´Ù¼Ò ±æ´Ù. ÃÖ±Ù ¸í·É ¸ñ·ÏÀ» Ç¥½ÃÇϱâ À§ÇØ ¸®½ºÆ® ºä ÄÁÆ®·ÑÀ» ÃʱâÈÇÏ°í ¸ÅÅ©·Î º»¹®À» Ç¥½ÃÇϱâ À§ÇØ ApiEdit °´Ã¼¸¦ »ý¼ºÇÑ´Ù. ¸ÅÅ©·Î°¡ ÅؽºÆ® Æ÷¸ËÀ¸·Î ÀúÀåµÇ¹Ç·Î ÅؽºÆ®¸¦ Ãâ·ÂÇÒ ¼ö ÀÖ´Â ÄÁÆ®·ÑÀ» ¹èÄ¡ÇØ¾ß Çϴµ¥ ¿¡µðÆ®°°Àº Ç¥ÁØ ÄÁÆ®·ÑÀ» »ç¿ëÇÏÁö ¾Ê°í ApiEdit °´Ã¼¸¦ »ç¿ëÇß´Ù. ¸¶Áø¿¡ ÁÙ ¹øÈ£µµ Ç¥½ÃµÇ°í â ºÐÇÒ±îÁö °¡´ÉÇÏ´Ù. ÀÌ¿ÕÀÌ¸é ¸ÅÅ©·Î ±¸¹®À» ´Ù¸¥ »ö»óÀ¸·Î º¸¿©ÁÖ´Â ºÐ¼®±â±îÁö ¸¸µé¾îÁ® ÀÖ´Ù¸é ´õ ÁÁÀ» °Í °°´Ù. ´ëÈ»óÀÚ ³»¿¡¼ »ç¿ëµÇ¹Ç·Î TabÅ°´Â ó¸®ÇÏÁö ¾Ê´Â´Ù. º°´Ù¸¥ Á¶Ä¡¾øÀÌ ´ëÈ»óÀÚ¿¡¼ ApiEdit ÄÁÆ®·ÑÀ» »ç¿ëÇÒ ¼ö Àִµ¥ ÀÌ°ÍÀÌ ÄÁÆ®·ÑÈÀÇ ÀåÁ¡ÀÌ´Ù
¸®½ºÆ® ºä¿¡´Â È°¼ºÃ¢ÀÇ ÃÖ±Ù ÆíÁý ¸í·ÉÀ» Àоî Ç¥½ÃÇϴµ¥ AeMc °´Ã¼¿¡ ÆíÁý ±â·ÏÀÌ Àß ÀúÀåµÇ¾î ÀÖÀ¸¹Ç·Î ÀÌ °´Ã¼ÀÇ ³»¿ëÀ» ¸®½ºÆ® ºä·Î Ãâ·ÂÇÏ¸é µÈ´Ù. ¸¸¾à È°¼ºÃ¢ÀÌ ¾ø´Ù¸é ÃÖ±Ù ¸í·ÉÀÌ ¾øÀ¸¹Ç·Î À̶§´Â ¸®½ºÆ® ºä¿¡ ¾Æ¹« °Íµµ ä¿ï °ÍÀÌ ¾ø´Ù. È°¼ºÃ¢ÀÌ ¾øÀ¸¸é ¸ÅÅ©·Î¸¦ ½ÇÇàÇÒ ¼ö´Â ¾øÁö¸¸ ¸ÅÅ©·Î¸¦ ÆíÁýÇÏ´Â °ÍÀº ¿©ÀüÈ÷ °¡´ÉÇÏ´Ù.
Àü¿ª DgMacro °´Ã¼¿¡¼ ÀÛ¼ºµÇ¾î ÀÖ´Â ¸ÅÅ©·Î ¸ñ·ÏÀ» Àоî¿Í ÄÞº¸ ¹Ú½º¿¡ ä¿î´Ù. ÄÞº¸ ¹Ú½º¿¡¼ ÆíÁý ´ë»ó ¸ÅÅ©·Î¸¦ ¼±ÅÃÇÏ¸é ¼±ÅÃµÈ ¸ÅÅ©·ÎÀÇ ³»¿ëÀÌ ApiEdit¿¡ ÀÐÇôÁø´Ù. WM_USER+1, WM_USER+2 »ç¿ëÀÚ Á¤ÀÇ ¸Þ½ÃÁö´Â ´ëÈ»óÀÚ³»¿¡¼ ¼ºê·çƾó·³ »ç¿ëµÇ´Âµ¥ ÄÁÆ®·ÑÀÇ »ç¿ë °¡´É¼º ¿©ºÎ¿Í ¸ÅÅ©·Î ÀúÀå½Ã È£ÃâµÈ´Ù.
»õ ¸ÅÅ©·Î Ãß°¡ ´ëÈ»óÀÚ´Â ¸ÅÅ©·Î À̸§¿¡ ÀÏ·Ã ¹øÈ£¸¦ ºÙ¿© µðÆúÆ® À̸§À» ¸¸µéµÇ À̸§Àº ¹Ýµå½Ã Á¤±ÔÈÇØ¾ß ÇÑ´Ù. À̸§¾Õ¿¡ °ø¹éÀ» ³Ö¾î " Name"À̶ó°í ÇØ ³õ°í call "Name"À̶ó°í ºÎ¸£¸é ÀÌ ¸ÅÅ©·Î¸¦ Á¦´ë·Î ãÁö ¸øÇÒ °ÍÀÌ´Ù. °¢ ¸ÅÅ©·Î¿¡ ´ÜÃàÅ°¸¦ ÇÒ´çÇÒ ¼ö Àִµ¥ ÀÌ ±â´ÉÀº ´ÙÀ½ Àå¿¡¼ ÀÛ¼ºÇÒ °ÍÀÌ´Ù.
»ç¿ëÀÚµéÀº ÃÖ±Ù ÆíÁý µ¿ÀÛ¿¡¼ ¸ÅÅ©·Î¿¡ Æ÷ÇÔÇÒ ¸í·ÉÀ» ¼±ÅÃÇϰųª ¾Æ´Ï¸é Á÷Á¢ ÀÔ·ÂÇØ ³ÖÀ» ¼ö ÀÖ´Ù. ¸í·ÉÀ» ÀÔ·ÂÇÏ·Á¸é ¸ÅÅ©·Î ¹®¹ýÀ» ¾Ë¾Æ¾ß Çϴµ¥ »ç¿ëÀÚµéÀÌ ¸í·ÉÀ» ¿Ü¿ï ¼ö´Â ¾øÀ¸¹Ç·Î ¸ñ·ÏÀ» º¸¿©ÁÖ°í ¼±ÅÃÇÏ°Ô ÇÏ´Â °ÍÀÌ ´õ ÁÁ´Ù. ¸í·É Ãß°¡ ´ëÈ»óÀÚ´Â arComVerb¿Í arHostVerb ¸ñ·Ï°ú ¸ñÀû¾î¸¦ ¸®½ºÆ® ¹Ú½º¿¡ Ç¥½ÃÇÏ°í ¼±ÅÃµÈ ¸í·ÉÀ» ÀÛ¼ºÇÑ´Ù.
// ÀÛ¼ºÁßÀÎ ¸í·ÉÀ» ¸í·É ¿¡µðÆ® ¹Ú½º¿¡ º¸¿©ÁØ´Ù.
void DisplayMakingCommand(HWND hDlg)
{
int Verb, Object=0;
TCHAR szCommand[256];
TCHAR szTemp[256];
int Count;
SMacVerb *arVerb;
SMacObject *arObject;
int *arObj;
// ÀÏ´Ü µ¿»çºÎÅÍ
Verb=SendDlgItemMessage(hDlg,IDC_LISTVERB,LB_GETCURSEL,0,0);
if (Verb==-1) {
return;
}
// ÄÁÆ®·ÑÀÇ ¸í·ÉÀÎÁö, È£½ºÆ®ÀÇ ¸í·ÉÀÎÁö ±¸ºÐÇÑ´Ù.
if (Verb >= AEVERBNUM) {
arVerb=arHostVerb;
arObject=arHostObject;
arObj=arObjOfVerbHost;
Verb-=AEVERBNUM;
} else {
arVerb=arComVerb;
arObject=arComObject;
arObj=arObjOfVerb;
}
lstrcpy(szCommand,arVerb[Verb].Name);
// ¸ñÀû¾î°¡ ÀÖÀ¸¸é ¸ñÀû¾î¸¦ ±â·ÏÇÑ´Ù.
if (arObj[Verb]!=-1) {
Object=SendDlgItemMessage(hDlg,IDC_LISTOBJECT,LB_GETCURSEL,0,0);
if (Object!=-1) {
wsprintf(szTemp," %s",arObject[arObj[Verb]+Object].Name);
lstrcat(szCommand,szTemp);
}
}
// ¹®ÀÚ¿ Àμö ó¸®
if (arVerb==arComVerb) {
if (Verb==AEC_INSERT || Verb==AEC_FIND || Verb==AEC_REPLACE) {
GetDlgItemText(hDlg,IDC_EDSTRING1,szTemp,256);
lstrcat(szCommand," \"");
lstrcat(szCommand,szTemp);
lstrcat(szCommand,"\"");
if (Verb==AEC_REPLACE) {
GetDlgItemText(hDlg,IDC_EDSTRING2,szTemp,256);
lstrcat(szCommand," \"");
lstrcat(szCommand,szTemp);
lstrcat(szCommand,"\"");
}
}
} else {
if (Verb==DGC_CALL || Verb==DGC_CLIP) {
GetDlgItemText(hDlg,IDC_EDSTRING1,szTemp,256);
lstrcat(szCommand," \"");
lstrcat(szCommand,szTemp);
lstrcat(szCommand,"\"");
}
}
if (arVerb==arComVerb) {
if (Verb==AEC_FIND || Verb==AEC_REPLACE) {
if (IsDlgButtonChecked(hDlg,IDC_FIND_UP)) lstrcat(szCommand," up");
if (IsDlgButtonChecked(hDlg,IDC_FIND_WHOLEWORD)) lstrcat(szCommand," word");
if (IsDlgButtonChecked(hDlg,IDC_FIND_MATCHCASE)) lstrcat(szCommand," case");
if (IsDlgButtonChecked(hDlg,IDC_FIND_WRAP)) lstrcat(szCommand," wrap");
}
}
// ¹Ýº¹ °¡´ÉÇÑ ¸í·ÉÀÌ¸é ¹Ýº¹ ȸ¼ö ±â·Ï. 1ÀÌ»óÀÌ°í ¸ñÀû¾î°¡ ¼±ÅõǾî ÀÖÀ» ¶§¸¸. move 5 µûÀ§ÀÇ ¹®ÀÚ¿À» ¸¸µéÁö ¾ÊÀ½
if (arVerb[Verb].Flag & 0x1) {
Count=GetDlgItemInt(hDlg,IDC_EDCOUNT,NULL,FALSE);
if (Count != 1 && Object!=-1) {
wsprintf(szTemp, " %d",Count);
lstrcat(szCommand,szTemp);
}
}
SetDlgItemText(hDlg,IDC_EDCOMMAND,szCommand);
}
BOOL CALLBACK AddCommandDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
static TCHAR *szCommand;
TCHAR szTemp[256];
int i,idx;
SMacVerb *arVerb;
SMacObject *arObject;
int *arObj;
switch(iMessage) {
case WM_INITDIALOG:
MoveToParentCenter(hDlg);
szCommand=(TCHAR *)lParam;
for (i=0;i<AEVERBNUM;i++) {
wsprintf(szTemp,"%s(%s)",arComVerb[i].Desc,arComVerb[i].Name);
SendDlgItemMessage(hDlg,IDC_LISTVERB,LB_ADDSTRING,0,(LPARAM)szTemp);
}
// È£½ºÆ® ¼öÁØÀÇ ¸í·Éµµ Æ÷ÇÔ½ÃŲ´Ù.
for (i=0;i<DGVERBNUM;i++) {
wsprintf(szTemp,"%s(%s)",arHostVerb[i].Desc,arHostVerb[i].Name);
SendDlgItemMessage(hDlg,IDC_LISTVERB,LB_ADDSTRING,0,(LPARAM)szTemp);
}
SetDlgItemInt(hDlg,IDC_EDCOUNT,1,FALSE);
SendDlgItemMessage(hDlg,IDC_SPINCOUNT,UDM_SETRANGE,0,MAKELPARAM(1000000,1));
SendDlgItemMessage(hDlg,IDC_EDCOMMAND,EM_LIMITTEXT,256,0);
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDOK:
GetDlgItemText(hDlg,IDC_EDCOMMAND,szCommand,256);
EndDialog(hDlg,IDOK);
return TRUE;
case IDCANCEL:
EndDialog(hDlg,IDCANCEL);
return TRUE;
case IDC_LISTVERB:
switch (HIWORD(wParam)) {
case LBN_SELCHANGE:
SendDlgItemMessage(hDlg,IDC_LISTOBJECT,LB_RESETCONTENT,0,0);
DisplayMakingCommand(hDlg);;
// ÀÏ´Ü ¸ðµÎ ¼û±ä´Ù.
ShowWindow(GetDlgItem(hDlg,IDC_LISTOBJECT),SW_HIDE);
ShowWindow(GetDlgItem(hDlg,IDC_STOBJECT),SW_HIDE);
ShowWindow(GetDlgItem(hDlg,IDC_EDSTRING1),SW_HIDE);
ShowWindow(GetDlgItem(hDlg,IDC_EDSTRING2),SW_HIDE);
ShowWindow(GetDlgItem(hDlg,IDC_STSTRING1),SW_HIDE);
ShowWindow(GetDlgItem(hDlg,IDC_STSTRING2),SW_HIDE);
ShowWindow(GetDlgItem(hDlg,IDC_EDCOUNT),SW_HIDE);
ShowWindow(GetDlgItem(hDlg,IDC_STCOUNT),SW_HIDE);
ShowWindow(GetDlgItem(hDlg,IDC_SPINCOUNT),SW_HIDE);
ShowWindow(GetDlgItem(hDlg,IDC_FIND_UP),SW_HIDE);
ShowWindow(GetDlgItem(hDlg,IDC_FIND_WHOLEWORD),SW_HIDE);
ShowWindow(GetDlgItem(hDlg,IDC_FIND_MATCHCASE),SW_HIDE);
ShowWindow(GetDlgItem(hDlg,IDC_FIND_WRAP),SW_HIDE);
idx=SendDlgItemMessage(hDlg,IDC_LISTVERB,LB_GETCURSEL,0,0);
// ÄÁÆ®·ÑÀÇ ¸í·ÉÀÎÁö, È£½ºÆ®ÀÇ ¸í·ÉÀÎÁö ±¸ºÐÇÑ´Ù.
if (idx >= AEVERBNUM) {
arVerb=arHostVerb;
arObject=arHostObject;
arObj=arObjOfVerbHost;
idx-=AEVERBNUM;
} else {
arVerb=arComVerb;
arObject=arComObject;
arObj=arObjOfVerb;
}
// ¹Ýº¹ÀÌ °¡´ÉÇÑ ¸í·Éµé
if (arVerb[idx].Flag & 0x1) {
ShowWindow(GetDlgItem(hDlg,IDC_EDCOUNT),SW_SHOW);
ShowWindow(GetDlgItem(hDlg,IDC_STCOUNT),SW_SHOW);
ShowWindow(GetDlgItem(hDlg,IDC_SPINCOUNT),SW_SHOW);
}
// ¹®ÀÚ¿ ÀÔ·ÂÇüÀº Ưº°ÇÏ°Ô ´Ù·é´Ù
if (arVerb==arComVerb) {
if (idx==AEC_INSERT) {
ShowWindow(GetDlgItem(hDlg,IDC_EDSTRING1),SW_SHOW);
ShowWindow(GetDlgItem(hDlg,IDC_STSTRING1),SW_SHOW);
SetWindowText(GetDlgItem(hDlg,IDC_STSTRING1),"ÀÔ·Â ³»¿ë(&I)");
return TRUE;
}
if (idx==AEC_FIND || idx==AEC_REPLACE) {
ShowWindow(GetDlgItem(hDlg,IDC_EDSTRING1),SW_SHOW);
ShowWindow(GetDlgItem(hDlg,IDC_STSTRING1),SW_SHOW);
SetWindowText(GetDlgItem(hDlg,IDC_STSTRING1),"ãÀ» ³»¿ë(&F)");
ShowWindow(GetDlgItem(hDlg,IDC_FIND_UP),SW_SHOW);
ShowWindow(GetDlgItem(hDlg,IDC_FIND_WHOLEWORD),SW_SHOW);
ShowWindow(GetDlgItem(hDlg,IDC_FIND_MATCHCASE),SW_SHOW);
ShowWindow(GetDlgItem(hDlg,IDC_FIND_WRAP),SW_SHOW);
if (idx==AEC_REPLACE) {
ShowWindow(GetDlgItem(hDlg,IDC_EDSTRING2),SW_SHOW);
ShowWindow(GetDlgItem(hDlg,IDC_STSTRING2),SW_SHOW);
SetWindowText(GetDlgItem(hDlg,IDC_STSTRING2),"¹Ù²Ü ³»¿ë(&T)");
}
return TRUE;
}
} else {
if (idx==DGC_CALL || idx==DGC_CLIP) {
ShowWindow(GetDlgItem(hDlg,IDC_EDSTRING1),SW_SHOW);
ShowWindow(GetDlgItem(hDlg,IDC_STSTRING1),SW_SHOW);
if (idx==DGC_CALL) {
SetWindowText(GetDlgItem(hDlg,IDC_STSTRING1),"¸ÅÅ©·Î À̸§(&I)");
} else {
SetWindowText(GetDlgItem(hDlg,IDC_STSTRING1),"»ó¿ë±¸ À̸§(&I)");
}
return TRUE;
}
}
// ¸ñÀû¾î°¡ ¾ø´Â °Íµé(insert,find, replace´Â Á¦¿Ü)
if ((arVerb[idx].Flag & 0x2)==0) {
return TRUE;
} else {
ShowWindow(GetDlgItem(hDlg,IDC_LISTOBJECT),SW_SHOW);
ShowWindow(GetDlgItem(hDlg,IDC_STOBJECT),SW_SHOW);
for (i=arObj[idx];arObject[i].Name!=NULL;i++) {
wsprintf(szTemp,"%s(%s)",arObject[i].Desc,arObject[i].Name);
SendDlgItemMessage(hDlg,IDC_LISTOBJECT,LB_ADDSTRING,0,(LPARAM)szTemp);
}
return TRUE;
}
break;
}
break;
case IDC_LISTOBJECT:
switch (HIWORD(wParam)) {
case LBN_SELCHANGE:
DisplayMakingCommand(hDlg);
break;
}
break;
case IDC_FIND_UP:
case IDC_FIND_WHOLEWORD:
case IDC_FIND_MATCHCASE:
case IDC_FIND_WRAP:
DisplayMakingCommand(hDlg);
break;
case IDC_EDSTRING1:
case IDC_EDSTRING2:
case IDC_EDCOUNT:
switch (HIWORD(wParam)) {
case EN_CHANGE:
DisplayMakingCommand(hDlg);
break;
}
break;
}
return FALSE;
}
return FALSE;
}
DisplayMakingCommand ÇÔ¼ö´Â ´ëÈ»óÀÚ¿¡ ¼±ÅÃµÈ ¿É¼ÇÀ» ÀÐ¾î ¸í·É ¹®ÀÚ¿À» Á¶¸³ÇÑ´Ù. È®Àå¿ Ã³¸®´Â ÇÏÁö ¾ÊÀ¸¹Ç·Î »ç¿ëÀÚ°¡ Á÷Á¢ ÇØ¾ß ÇÑ´Ù. insert ¸í·ÉÀ» ¼±ÅÃÇØ ³õ°í »ðÀÔÇÒ ¹®ÀÚ¿ ÀÚ¸®¿¡ c:\temp ¶ó°í ÀÔ·ÂÇßÀ» °æ¿ì c:\\temp·Î È®ÀåÇØ ÁÖÁö ¾Ê´Â´Ù´Â ¶æÀÌ´Ù. ÀÌ·¸°Ô ÀÔ·ÂÇÑ ±×´ë·Î È®Àå¿À» Àû¿ëÇØ ÁÙ ¼öµµ ÀÖÀ¸³ª ±×·¸°Ô ÇÏ¸é °³Çà ÄÚµå¿Í ÅÇ Äڵ带 Ç¥ÇöÇÒ ¹æ¹ýÀÌ ¾ø¾îÁ® ¹ö¸°´Ù. ÇÑÁÙÂ¥¸® ¿¡µðÆ® ÄÁÆ®·Ñ¿¡ °³Çà Äڵ带 Ä¥ ¼ö ¾øÀ¸¹Ç·Î °³Çà ÄÚµå´Â \r\nÀ¸·Î Ç¥ÇöÇÏ´Â ¼ö¹Û¿¡ ¾ø´Âµ¥ È®Àå¿À» Á÷Á¢ ó¸®ÇØ ¹ö¸®¸é \r\nÀ» \\r\\nÀ¸·Î È®ÀåÇØ ¹ö¸®¹Ç·Î È®Àå¿ ÀÔ·ÂÀº »ç¿ëÀÚÀÇ Ã¥ÀÓÀ¸·Î ³²°ÜÁú ¼ö¹Û¿¡ ¾ø´Ù.
¶ÇÇÑ ¸ÅÅ©·Î ³»¿ëÀ» Á÷Á¢ ÆíÁýÇÒ ¶§µµ È®Àå¿À» Á÷Á¢ ½á¾ß Çϱ⠶§¹®¿¡ ¿ÀÈ÷·Á »ç¿ëÀÚ°¡ ¾Ë¾Æ¼ È®Àå¿À» ÀÔ·ÂÇÏ´Â °ÍÀÌ ³í¸®ÀûÀ¸·Î ´õ ¸íÈ®ÇÑ °Í °°´Ù. ¸¸¾à Ʋ¸° ¸í·ÉÀ» ÀÔ·ÂÇÒ °æ¿ì ¿¹¸¦ µé¾î insert "12\" ÀÌ·¸°Ô µÇ¸é ´Ý´Â µû¿ÈÇ¥°¡ ¾ø´Â ¿¡·¯·Î 󸮵ȴÙ. insert "12\34" ÀÌ·¸°Ô µÇ¸é \3ÀÌ ¹«È¿ÇÑ È®Àå¿·Î Çؼ®µÇ¾î ¹«½ÃµÈ´Ù.
IDC_LISTVERB ¸®½ºÆ® ¹Ú½º¿¡¼ µ¿»ç¸¦ ¼±ÅÃÇÏ¸é µ¿»çÀÇ ¿É¼ÇÀ» ÀÔ·ÂÇÒ ¼ö ÀÖ´Â ÀûÀýÇÑ ÄÁÆ®·ÑÀ» È°¼ºÈÇÑ´Ù. ¿¹¸¦ µé¾î ¹Ýº¹ÀÌ °¡´ÉÇÑ ¸í·ÉµéÀº ȸ¼ö¸¦ ÀԷ¹޴ ¿¡µðÆ® ÄÁÆ®·ÑÀ» Ç¥½ÃÇÏ°í ¹®ÀÚ¿ ÀÔ·Â ¸í·ÉÀº ´ë»ó ¹®ÀÚ¿À» Á÷Á¢ ÀÔ·ÂÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù. ¸ñÀû¾î°¡ ÀÖ´Â ¸í·ÉÀº ¼±Åà °¡´ÉÇÑ ¸ñÀû¾î¸¦ º°µµÀÇ ¸®½ºÆ® ¹Ú½º¿¡ Ãâ·ÂÇϸç ã±â, ¹Ù²Ù±â´Â °Ë»ö ¿É¼Ç üũ ¹Ú½º¸¦ Ç¥½ÃÇÑ´Ù. »ç¿ëÀÚ´Â µ¿»ç¸¦ ¸ÕÀú °í¸£°í ¸ñÀû¾î³ª ÀÔ·Â ³»¿ë, ±âŸ ¿É¼ÇÀ» ¼±ÅÃÇÏ¸é µÈ´Ù.
Å°¿öµå¸¦ ¿Ü¿ìÁö ¾Ê¾Æµµ µ¿»ç¿Í ¸ñÀû¾î ¼±Åà °¡´ÉÇÑ ¿É¼ÇÀ» °í¸¦ ¼ö ÀÖÀ¸¹Ç·Î ¸ÅÅ©·Î ±¸¹®À» ¸ô¶óµµ ÀÌ ´ëÈ»óÀÚ¸¦ »ç¿ëÇÏ¸é ¿øÇÏ´Â ¸í·ÉÀ» ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. °Ô´Ù°¡ Çѱ۷ΠµÈ ¼³¸í°ú ¸í·É Å°¿öµå°¡ °°ÀÌ Ç¥½ÃµÇ¹Ç·Î ÀÚÁÖ »ç¿ëÇÏ´Â »ç¶÷Àº Å°¿öµå¸¦ ¿Ü¿ö¼ °ð¹Ù·Î ÀÔ·ÂÇÒ ¼öµµ ÀÖÀ» °ÍÀÌ´Ù.
¸ÅÅ©·Î ´ëÈ»óÀÚ¿¡¼ ¸ÅÅ©·Î¸¦ Á÷Á¢ ½ÇÇàÇÒ ¼öµµ ÀÖ´Ù. À̶§ ¸ÅÅ©·ÎÀÇ ³»¿ëÀÌ ¾Æ´Ñ À̸§¸¸ Àü´ÞÇϹǷΠÆíÁýÁßÀÎ ¸ÅÅ©·Î´Â ÀÏ´Ü ÀúÀåµÇ¾î¾ß ÇÑ´Ù. ¸ÅÅ©·Î¸¦ ½ÇÇàÇÒ ¶§´Â PostMessage ÇÔ¼ö·Î ¸ÞÀÎ À©µµ¿ì¿¡ WM_USER+4 ¸Þ½ÃÁö¸¦ ºÙÀδÙ. SendMessage¸¦ »ç¿ëÇÒ ¼ö ¾ø´Â ÀÌÀ¯´Â ÀÏ´Ü ´ëÈ»óÀÚ¸¦ ´ÝÀº ÈÄ¿¡ ¸ÅÅ©·Î¸¦ ½ÇÇàÇØ¾ß Çϱ⠶§¹®ÀÌ´Ù. wParamÀ¸·Î´Â ¹Ýº¹ ȸ¼ö°¡ Àü´ÞµÇ¸ç lParamÀ¸·Î´Â ¸ÅÅ©·Î À̸§ÀÌ Àü´ÞµÈ´Ù. ¸ÞÀÎ À©µµ¿ì´Â ÀÌ ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§ lParam ¸ÅÅ©·Î¸¦ wParamȸ¸¸Å ¹Ýº¹ ½ÇÇàÇÑ´Ù.
LRESULT CALLBACK DGWndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
switch(iMessage) {
....
case WM_USER+4:OnUser4(hWnd,wParam,lParam);return 0;
// ¸ÅÅ©·Î ½ÇÇà. wParam¿¡ ȸ¼ö, lParam¿¡ ¸ÅÅ©·Î À̸§
void OnUser4(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
int i,count;
HWND hDlg;
MSG msg;
count=(int)wParam;
if (count > 1) {
hDlg=CreateDialogParam(g_hInst, MAKEINTRESOURCE(IDD_RUNMACRO),
hWnd, (DLGPROC)RunMacroDlgProc,lParam);
ShowWindow(hDlg,SW_SHOW);
EnableWindow(g_hFrameWnd,FALSE);
}
for (i=0;i<count;i++) {
ExecMacro((const TCHAR *)lParam);
if (count > 1) {
SendMessage(hDlg,WM_USER+1,count,i);
while (PeekMessage(&msg, NULL,0,0,PM_REMOVE)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
if (!IsWindow(hDlg)) {
break;
}
}
}
if (count > 1) {
EnableWindow(g_hFrameWnd,TRUE);
if (IsWindow(hDlg)) {
DestroyWindow(hDlg);
}
}
}
Çѹø¸¸ ½ÇÇàÇÒ ¶§´Â ExecMacro ÇÔ¼ö·Î lParam¸¸ Àü´ÞÇÏ¸é µÈ´Ù. ¿©·¯¹ø ½ÇÇàÇÒ ¶§´Â ¸ÅÅ©·Î ½ÇÇà ½Ã°£ÀÌ ±²ÀåÈ÷ ±æ ¼öµµ ÀÖÀ¸¹Ç·Î Ãë¼Ò ´ëÈ»óÀÚ¸¦ Ç¥½ÃÇÏ°í ¸Þ½ÃÁö ÆßÇÎÀ» ÇÏ¸é¼ ´ëÈ»óÀÚ°¡ À¯È¿ÇÑÁö °è¼Ó Á¡°ËÇØ ºÁ¾ß ÇÑ´Ù. ¸¸¾à Ãë¼Ò ´ëÈ»óÀÚ°¡ ´ÝÇû´Ù¸é ¸ÅÅ©·Î ½ÇÇàÀ» ÁßÁöÇ϶ó´Â ¶æÀ̹ǷΠÁï½Ã ¸®ÅÏÇÑ´Ù. ´ÙÀ½ ÇÔ¼ö¸¦ Macro.cpp¿¡ ÀÛ¼ºÇÑ´Ù.
BOOL CALLBACK RunMacroDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
TCHAR str[256];
switch(iMessage) {
case WM_INITDIALOG:
MoveToParentCenter(hDlg);
wsprintf(str,"¸ÅÅ©·Î À̸§ : %s", (TCHAR *)lParam);
SetDlgItemText(hDlg,IDC_MACRONAME,str);
return TRUE;
case WM_USER+1:
wsprintf(str,"ÃÑ %d ȸ Áß %d ¹ø° ½ÇÇà",wParam,lParam);
SetDlgItemText(hDlg,IDC_MACRONUM,str);
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDCANCEL:
DestroyWindow(hDlg);
return TRUE;
}
return FALSE;
}
return FALSE;
}
ÀÌ ´ëÈ»óÀÚ´Â ¸ÅÅ©·Î¸¦ ¸î ȸ° ½ÇÇàÇÏ°í ÀÖ´ÂÁö¸¦ Ãâ·ÂÇÏ´Â ´Ü¼øÇÑ ÀÛ¾÷¸¸ ÇÑ´Ù. »ç¿ëÀÚ°¡ ÀÌ ´ëÈ»óÀÚ¸¦ ´Ý±â¸¸ ÇÏ¸é ¸ÅÅ©·Î ½ÇÇàÀº Áï½Ã ÁߴܵȴÙ. ¸ÅÅ©·Î¸¦ ´ëÈ»óÀÚ¿¡¼ ½ÇÇàÇÏ´Â ¹æ½ÄÀ̶ó ´Ù¼Ò ºÒÆíÇѵ¥ Á» ´õ Á¦´ë·Î ¸¸µç´Ù¸é ¸ðµ¨¸®½º ´ëÈ»óÀÚ¸¦ Çϳª ¸¸µé¸é ÁÁÀ» °Í °°´Ù. ±×·¯³ª ´ÙÀ½ Àå¿¡¼ ¸ÅÅ©·Î¿¡ ´ÜÃàÅ°¸¦ ÁöÁ¤ÇÏ´Â ±â´ÉÀ» ÀÛ¼ºÇÒ °ÍÀ̹ǷΠū ºÒÆíÀº ¾øÀ» °ÍÀÌ´Ù.