Àü¿ª ÈÅ ÇÁ·Î½ÃÀú´Â ´Ù¸¥ ÇÁ·Î¼¼½ºÀÇ ¸Þ½ÃÁö È帧À» µé¿©´Ù º¼ ¼ö ÀÖ´Ù´Â Á¡¿¡¼ Ȱ¿ë¼ºÀÌ ³ô´Ù. ƯÁ¤ À©µµ¿ì·Î ÀԷµǴ ¸Þ½ÃÁöÀÇ È帧À» »ìÆìº¸¸é ÀÌ À©µµ¿ì°¡ ÀÔ·ÂµÈ ¸Þ½ÃÁö¿¡ ´ëÇØ ¾î¶»°Ô ¹ÝÀÀÇÒ °ÍÀΰ¡¸¦ ¿¹ÃøÇÒ ¼ö ÀÖÀ¸¸ç µû¶ó¼ À©µµ¿ì¿¡°Ô »ç°ÇÀÌ ¹ß»ýÇÏ´Â Á¤È®ÇÑ ½ÃÁ¡À» ¾Ë ¼ö ÀÖ´Ù. ÈÅ ÇÁ·Î½ÃÀú´Â ¸Þ½ÃÁö È帧À» °¨½ÃÇϰí ÀÖ´Ù°¡ °ü½ÉÀÖ´Â À̺¥Æ®°¡ ¹ß»ýÇßÀ» ¶§ ¿øÇÏ´Â ¾î¶² Á¶Ä¡¸¦ ÃëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
´ÙÀ½ ¿¹Á¦´Â ¸Þ¸ðÀåÀÇ Å° ÀÔ·ÂÀ» °¨½ÃÇÏ´Â ÈÅ ÇÁ·Î½ÃÀú¸¦ ¼³Ä¡ÇÏ°í »ç¿ëÀÚ°¡ babo¶ó´Â ۸¦ ¿¬¼ÓÀ¸·Î ÀÔ·ÂÇϸé ÀÌ Å° ÀÔ·ÂÀ» ¸ðµÎ Ãë¼ÒÇϰí chunjae·Î ¹Ù²ã ¹ö¸°´Ù. babo¶ó´Â ¿¬¼ÓµÈ ŰÀÔ·Â À̺¥Æ®¿¡ ¹ÝÀÀÇÏ¿© ¸Þ¸ðÀåÀÇ µ¿ÀÛÀ» ¿øÇÏ´Â ¹æ½ÄÀ¸·Î Á¦¾îÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù. ÈÅ DLLÀº ¾Õ¼ ÀÛ¼ºÇß´ø KeyBeepDll°ú µ¿ÀÏÇϹǷΠµû·Î »ìÆìº¼ Çʿ䰡 ¾øÀ¸¸ç ÈÅ ¼¹ö ÇÁ·Î±×·¥ÀÌ Å° ÀÔ·ÂÀ» °¨½ÃÇϰí À̺¥Æ®¿¡ ´ëÀÀÇÏ´Â ¹æ¹ý¸¸ º¸µµ·Ï ÇÏÀÚ.
#include "../HookNotePadDll/HookNotePadDll.h"
TCHAR Mes[]="¸Þ¸ðÀå¿¡¼ BABO¸¦ ÀÔ·ÂÇϸé chaunjae·Î º¯°æÇÕ´Ï´Ù.";
TCHAR szSrc[]="BABO";
TCHAR szDest[]="CHUNJAE";
int idx;
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
HWND hFGWnd;
TCHAR szClass[32];
int i;
switch(iMessage) {
case WM_CREATE:
InstallHook(hWnd);
return 0;
case WM_USER+1:
hFGWnd=GetForegroundWindow();
GetClassName(hFGWnd,szClass,32);
if (lstrcmpi(szClass,"NotePad")==0 && (lParam & 0x80000000)==0) {
if (wParam == (WPARAM)szSrc[idx]) {
idx++;
} else {
idx=0;
}
if (szSrc[idx]==0) {
for (i=0;i<lstrlen(szSrc);i++) {
keybd_event(VK_BACK,0,0,0);
keybd_event(VK_BACK,0,KEYEVENTF_KEYUP,0);
}
for (i=0;i<lstrlen(szDest);i++) {
keybd_event(szDest[i],0,0,0);
keybd_event(szDest[i],0,KEYEVENTF_KEYUP,0);
}
}
}
return 0;
case WM_PAINT:
hdc=BeginPaint(hWnd, &ps);
TextOut(hdc,10,10,Mes,lstrlen(Mes));
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
UninstallHook();
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
ÀÌ ÇÁ·Î±×·¥Àº ¸Þ¸ðÀåÀÇ µ¿ÀÛ¿¡ ´ëÇØ¼¸¸ °ü¿©ÇϹǷΠÈÅ ÇÁ·Î½ÃÀú·ÎºÎÅÍ WM_USER+1 ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§ Ȱ¼ºÈµÈ À©µµ¿ì°¡ ¸Þ¸ðÀåÀÌ ¸Â´ÂÁö¸¦ ¸ÕÀú »ìÆì º»´Ù. Ȱ¼º À©µµ¿ìÀÇ À©µµ¿ì Ŭ·¡½º¸íÀÌ "NotePad"°¡ ¾Æ´Ï¶ó¸é ¸Þ¸ðÀåÀÌ ¾Æ´Ï¹Ç·Î ¾Æ¹«·± µ¿ÀÛµµ ÇÏÁö ¾ÊÀ¸¸ç ۰¡ ¶³¾îÁú ¶§µµ ¿ª½Ã ¾Æ¹« µ¿ÀÛµµ ÇÏÁö ¾Ê´Â´Ù. ¿ÀÁ÷ ¸Þ¸ðÀå¿¡¼ ۸¦ ´©¸¦ ¶§(WM_KEYDOWN)¸¸ µ¿ÀÛÇϵµ·Ï Çߴµ¥ ÀÌ Á¶°ÇÀ» º¯°æÇÏ¸é ¸ðµç ÇÁ·Î±×·¥¿¡ ´ëÇØ µ¿ÀÛÇϵµ·Ï ¹Ù²Ü ¼öµµ ÀÖ´Ù.
¸Þ¸ðÀå¿¡¼ ۰¡ ´·¯Á³À» ¶§, Áï ¸Þ¸ðÀå À©µµ¿ì°¡ WM_KEYDOWN ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§ wParamÀÌ baboÀÇ ¿¬¼ÓÀÎÁö ¾Æ´ÑÁö¸¦ Ç×»ó °¨½ÃÇϰí ÀÖ´Ù°¡ ¸¸¾à babo°¡ ¿¬¼ÓÀ¸·Î ÀԷµǸé 4°³ÀÇ BS۸¦ º¸³» babo¸¦ Áö¿ì°í chunjae۸¦ Â÷·Ê´ë·Î ´©¸§À¸·Î½á babo¸¦ chunjae·Î ¹Ù²Ù¾î ÁØ´Ù. keybd_event ´Â ¸¶Ä¡ »ç¿ëÀÚ°¡ Űº¸µå¸¦ ´©¸¥ °Íó·³ Ű À̺¥Æ®¸¦ ¹ß»ý½ÃŰ´Â ÇÔ¼öÀÌ´Ù.
ÀÌ ¿¹Á¦´Â ¿¬¼ÓµÈ ŰÀԷ¸¸ °¨½ÃÇϱ⠶§¹®¿¡ ÇѱÛ, ´ë¼Ò¹®ÀÚ µîÀº ±¸ºÐÇÏÁö ¾ÊÀ¸¸ç Áß°£¿¡ BS³ª Ä¿¼ À̵¿Å°·Î À̵¿, ÆíÁýÇÑ °æ¿ìµµ ¿¬¼ÓµÈ ¹®ÀÚ¿·Î ÀÎÁ¤ÇÏÁö ¾Ê´Â´Ù. IME »óųª ´ë¼Ò¹®ÀÚ ±¸ºÐ µîÀ» ÆÇº°Çϰí BS, Del µîÀÇ °£´ÜÇÑ ÆíÁý۸¦ ó¸®ÇÑ´Ù¸é Á» ´õ ¿Ïº®ÇÑ µ¿ÀÛÀ» ÇÒ ¼öµµ ÀÖ´Ù. ÀÌ·± ¹æ½ÄÀ¸·Î ´Ù¸¥ ÇÁ·Î±×·¥ÀÇ Å°ÀÔ·ÂÀ» °¨½Ã, º¯°æÇÏ¸é ¹é±×¶ó¿îµå ¸ÂÃã¹ý °Ë»ç±â³ª »ó¿ë±¸ ÀԷ±⠵îÀ» ¸¸µé ¼ö ÀÖÀ» °ÍÀÌ´Ù.
´ÙÀ½ ¿¹Á¦´Â Áö¿ª ÈÅÀ» »ç¿ëÇÏ¿© ¸Þ½ÃÁö ¹Ú½º¸¦ ºÎ¸ð À©µµ¿ìÀÇ Áß¾Ó¿¡ Ãâ·ÂÇÑ´Ù. MessageBox ÇÔ¼ö´Â ÀÚ½ÅÀÇ À§Ä¡¸¦ ÁöÁ¤ÇÏ´Â Ç÷¡±×°¡ ¾øÀ¸¸ç ¹«Á¶°Ç ȸé Áß¾Ó¿¡ ³ªÅ¸³ªµµ·Ï µÇ¾î ÀÖ´Ù. ÀÌ ÇÔ¼ö´Â È£ÃâÇÏ´Â Áï½Ã ¸Þ½ÃÁö ¹Ú½º¸¦ ¶ç¿ì°í È®ÀÎ ¹öưÀ» ´©¸¦ ¶§±îÁö ¸®ÅÏÇÏÁö ¾Ê±â ¶§¹®¿¡ È£Ãâ¿ø¿¡¼ À©µµ¿ìÀÇ À§Ä¡¸¦ ¿Å±æ ¼ö ÀÖ´Â ±âȸ°¡ ¾ø´Ù. À§Ä¡¸¦ ¿Å±æ ¶§´Â MoveWindow³ª SetWindowPos ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù´Â °ÍÀº ¾Ë°í ÀÖÁö¸¸ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÒ ¸¶¶¥ÇÑ ½ÃÁ¡ÀÌ ¾ø´Â °ÍÀÌ´Ù.
¸Þ½ÃÁö ¹Ú½º°¡ »ý¼ºµÇ´Â ½ÃÁ¡, ±×·¯´Ï±î WM_CREATE ¸Þ½ÃÁö¸¦ ¹ÞÀ» ¶§ ÀÌ À©µµ¿ìÀÇ À§Ä¡¸¦ ¿Å°Ü¾ß Çϴµ¥ ±× ½ÃÁ¡ÀÌ ¿î¿µÃ¼Á¦ ³»ºÎ¿¡ Àֱ⠶§¹®¿¡ ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ÀÚ½ÅÀÇ Äڵ带 ½ÇÇàÇÒ ±âȸ°¡ ¾ø´Â °ÍÀÌ´Ù. ¸Þ½ÃÁö ¹Ú½º´Â ÀÏÁ¾ÀÇ ´ëÈ»óÀÚÀ̰í ÀÌ ´ëÈ»óÀÚÀÇ À©µµ¿ì ÇÁ·Î½ÃÀú´Â ¿î¿µÃ¼Á¦¿¡ ³»ÀåµÇ¾î ÀÖ¾î ÇÁ·Î±×·¡¹ÖÇÒ ¼ö ÀÖ´Â ´ë»óÀÌ ¾Æ´Ï´Ù. ¸Þ½ÃÁö ¹Ú½º°¡ »ý¼ºµÇ´Â ½ÃÁ¡À» ±¸Çϱâ À§ÇØ ÈÅÀ» ¼³Ä¡Çϰí À©µµ¿ì°¡ »ý¼ºµÉ ¶§ º¸³»Áö´Â ¸Þ½ÃÁö¸¦ °¡·Îä¾ß ÇÑ´Ù.
À̶§ »ç¿ëÇÏ´Â ÈÅÀÌ WH_CBTÀÌ´Ù. CBT(Computer Based Training) ÈÅÀº Ãʺ¸ÀÚµéÀÇ ÄÄÇ»ÅÍ Á¶ÀÛ ÈÆ·ÃÀ» À§ÇØ Á¦°øµÇ´Âµ¥ À©µµ¿ì°¡ »ý¼º, ÆÄ±«, À̵¿ ¹× Å©±â º¯°æ½ÃÀÇ ¸Þ½ÃÁö¸¦ °¨½ÃÇϵµ·Ï ÇÑ´Ù. CBT ÇÁ·Î±×·¥Àº »ç¿ëÀÚ¿¡°Ô À©µµ¿ì Á¶ÀÛ ¹æ¹ýÀ» ¾Ë·ÁÁÖ°í ½Ç½ÀÀ» À¯µµÇϴµ¥ À̶§ »ç¿ëÀÚµéÀÌ Áö½Ã´ë·Î À©µµ¿ìÀÇ »ý¼º, À̵¿, Á¾·á µîÀ» Á¦´ë·Î ÇÏ´ÂÁö °¨½ÃÇϱâ À§ÇØ WH_CBT ÈÅÀ» »ç¿ëÇÑ´Ù. ÀÌ ÈÅÀÇ ¿ø·¡ ¸ñÀûÀº »ç¿ëÀÚ ±³À°¿ëÀÌÁö¸¸ ÀÏ¹Ý ÀÀ¿ë ÇÁ·Î±×·¥µµ À©µµ¿ì °ü·Ã ¸Þ½ÃÁö¸¦ °¡·Îä±â À§ÇØ ÀÌ ÈÅÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
ÀÌ ÈÅÀ» »ç¿ëÇÏ¸é Æ¯Á¤ À©µµ¿ì°¡ »ý¼ºµÇ´Â ½ÃÁ¡À» ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ¾Ë ¼ö ÀÖ°í À̶§ ¿øÇϴ ó¸®, ¿¹¸¦ µé¾î À§Ä¡¸¦ ¿Å±â°Å³ª Å©±â¸¦ ¹Ù²Ù°Å³ª ½ºÅ¸ÀÏÀ» º¯°æÇÒ ¼ö ÀÖ´Ù. ¸Þ½ÃÁö ¹Ú½ºÃ³·³ »ç¿ëÀÚ°¡ Á÷Á¢ ¸¸µç À©µµ¿ì°¡ ¾Æ´ÒÁö¶óµµ ¸»ÀÌ´Ù. ´ÙÀ½ ¿¹Á¦´Â WH_CBTÈŰú ¼ºêŬ·¡½ÌÀ» »ç¿ëÇÏ¿© ¸Þ½ÃÁö ¹Ú½º¸¦ ºÎ¸ð À©µµ¿ìÀÇ Áß¾Ó¿¡ ¿Àµµ·Ï ÇÑ´Ù.
HHOOK hCbtHook;
void MoveToParentCenter(HWND hWnd)
{
RECT wrt,crt;
HWND hParent;
hParent=GetParent(hWnd);
if (IsIconic(hParent)) {
ShowWindow(hParent,SW_RESTORE);
}
GetWindowRect(hParent,&wrt);
GetWindowRect(hWnd,&crt);
SetWindowPos(hWnd,HWND_NOTOPMOST,wrt.left+(wrt.right-wrt.left)/2-(crt.right-crt.left)/2,
wrt.top+(wrt.bottom-wrt.top)/2-(crt.bottom-crt.top)/2,0,0,SWP_NOSIZE);
}
LRESULT CALLBACK NewWndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
WNDPROC OldProc;
OldProc=(WNDPROC)GetProp(hWnd,"OldProp");
switch(iMessage) {
case WM_CREATE:
MoveToParentCenter(hWnd);
break;
case WM_NCDESTROY:
SetWindowLong(hWnd,GWL_WNDPROC,(DWORD)OldProc);
RemoveProp(hWnd,"OldProp");
break;
}
return CallWindowProc(OldProc,hWnd,iMessage,wParam,lParam);
}
LRESULT CALLBACK CbtHookProc(int nCode,WPARAM wParam,LPARAM lParam)
{
CBT_CREATEWND *pCbt;
HWND hWnd;
TCHAR szClassName[32];
WNDPROC OldProc;
if (nCode == HCBT_CREATEWND) {
hWnd=(HWND)wParam;
pCbt=(CBT_CREATEWND *)lParam;
if (HIWORD(pCbt->lpcs->lpszClass)) {
lstrcpy(szClassName,pCbt->lpcs->lpszClass);
} else {
GlobalGetAtomName((ATOM)pCbt->lpcs->lpszClass,szClassName,32);
}
if (lstrcmpi(szClassName,"#32770")==0 && ((pCbt->lpcs->style & WS_CHILD)==0)) {
OldProc=(WNDPROC)GetWindowLong(hWnd,GWL_WNDPROC);
SetProp(hWnd,"OldProp",OldProc);
SetWindowLong(hWnd,GWL_WNDPROC,(DWORD)NewWndProc);
}
}
return CallNextHookEx(hCbtHook,nCode,wParam,lParam);
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
switch(iMessage) {
case WM_CREATE:
hCbtHook=SetWindowsHookEx(WH_CBT,CbtHookProc,NULL,GetCurrentThreadId());
return 0;
case WM_LBUTTONDOWN:
MessageBox(hWnd,"ÀÌ ¸Þ½ÃÁö ¹Ú½º´Â ºÎ¸ð À©µµ¿ìÀÇ Áß¾Ó¿¡ ³ªÅ¸³³´Ï´Ù","¾Ë¸²",MB_OK);
return 0;
case WM_PAINT:
hdc=BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
UnhookWindowsHookEx(hCbtHook);
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
WM_CRAETE¿¡¼ WH_CBT ÈÅÀ» ¼³Ä¡Çϴµ¥ ¸Þ½ÃÁö ¹Ú½º´Â °°Àº ½º·¹µå³»¿¡¼ »ý¼ºµÇ´Â À©µµ¿ìÀ̹ǷΠÁö¿ª ÈÅÀ» ¼³Ä¡ÇÏ¸é µÈ´Ù. WM_PAINT¿¡¼´Â °£´ÜÇÑ ¾È³» ¸Þ½ÃÁö¸¦ Ãâ·ÂÇϰí WM_DESTROY¿¡¼´Â ÈÅÀ» Á¦°ÅÇß´Ù. ¸¶¿ì½º ¿ÞÂÊ ¹öưÀ» ´©¸£¸é MessageBox ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ¸Þ½ÃÁö ¹Ú½º¸¦ ¶ç¿î´Ù. º°´Ù¸¥ 󸮸¦ ÇÏÁö ¾Ê´Â´Ù¸é ¸Þ½ÃÁö ¹Ú½º´Â Ç×»ó ȸé Áß¾Ó¿¡ ¿¸®°Ô µÉ °ÍÀÌ´Ù.
CBT ÈÅ ÇÁ·Î½ÃÀúÀÇ nCode·Î´Â À©µµ¿ì¿¡ ¾î¶² ÀÏÀÌ ¹ß»ýÇß´ÂÁö¸¦ ¾Ë·ÁÁÖ´Â ´ÙÀ½°ú °°Àº °ªÀÌ Àü´ÞµÇ¸ç À̶§ wParamÀ¸·Î´Â À©µµ¿ìÀÇ ÇÚµéÀÌ Àü´ÞµÇ¸ç lParamÀ¸·Î´Â ¸Þ½ÃÁöÀÇ ºÎ°¡ Á¤º¸°¡ Àü´ÞµÈ´Ù. ´ÙÀ½ µµÇ¥´Â CBT ÈÅÀÇ nCode°ª°ú lParam Àμö¸¦ Á¤¸®ÇÑ °ÍÀε¥ ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â ·¹ÆÛ·±½º¸¦ Âü°íÇϱ⠹ٶõ´Ù.
ÄÚµå |
¼³¸í |
lParam |
HCBT_ACTIVATE |
À©µµ¿ì Ȱ¼ºÈ |
CBTACTIVATESTRUCT ±¸Á¶Ã¼ |
HCBT_CREATEWND |
À©µµ¿ì »ý¼º |
CBT_CREATEWND ±¸Á¶Ã¼ |
HCBT_DESTROYWND |
À©µµ¿ì ÆÄ±« |
0 |
HCBT_MINMAX |
ÃÖ¼Ò ¶Ç´Â ÃÖ´ëÈ |
ÇÏÀ§ ¿öµå¿¡ ÇöÀç »óÅÂ(SW_*) |
HCBT_MOVESIZE |
À̵¿ ¶Ç´Â Å©±â º¯°æ |
À©µµ¿ìÀÇ ÇöÀç À§Ä¡°ªÀ» °¡Áö´Â RECT ±¸Á¶Ã¼ |
HCBT_SYSCOMMAND |
½Ã½ºÅÛ ¸í·É ½ÇÇà |
WM_SYSCOMMAND¿Í µ¿ÀÏ |
¸®ÅϰªÀ¸·Î´Â ÇØ´ç µ¿ÀÛÀÇ Çã°¡ ¿©ºÎ¸¦ ¸®ÅÏÇϴµ¥ 0À» ¸®ÅÏÇÏ¸é µ¿ÀÛÀ» Çã°¡ÇÏ´Â °ÍÀ̰í 1À» ¸®ÅÏÇÏ¸é ±ÝÁöÇÏ´Â °ÍÀÌ´Ù. CBT ÈÅÀº Ç×»ó ÇØ´ç µ¿ÀÛÀÌ ÀϾ±â Àü¿¡ ÈÅ ÇÁ·Î½ÃÀú¿¡°Ô ¸ÕÀú Àü´ÞµÈ´Ù. ¿¹¸¦ µé¾î À©µµ¿ì°¡ »ý¼ºµÉ ¶§ HCBT_CREATEWND Äڵ带 ¸ÕÀú º¸³½ ÈÄ ÀÌ ÈÅ ÇÁ·Î½ÃÀú°¡ 0À» ¸®ÅÏÇÏ¸é ¸ñÇ¥ À©µµ¿ì·Î WM_NCCREATE, WM_CREATE ¸Þ½ÃÁö°¡ Àü´ÞµÇ¸ç À©µµ¿ì°¡ ÆÄ±«µÉ ¶§µµ WM_DESTROY ¸Þ½ÃÁö¸¦ º¸³»±â Àü¿¡ CBTÈÅÀÇ HCBT_DESTROYWND Äڵ尡 ¸ÕÀú Àü´ÞµÈ´Ù.
ÀÌ ¿¹Á¦´Â ¸Þ½ÃÁö ¹Ú½º°¡ »ý¼ºµÉ ¶§ À©µµ¿ìÀÇ À§Ä¡¸¦ ¿Å±â°íÀÚ ÇϹǷΠnCode°¡ HCBT_CREATEWNDÀÏ ¶§ ¿øÇÏ´Â Äڵ带 ½ÇÇàÇØ¾ß ÇÑ´Ù. À̶§ lParamÀ¸·Î´Â ´ÙÀ½°ú °°ÀÌ Á¤ÀÇµÈ ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅͰ¡ Àü´ÞµÈ´Ù.
typedef struct {
LPCREATESTRUCT lpcs;
HWND hwndInsertAfter;
} CBT_CREATEWND, *LPCBT_CREATEWND;
lpcs´Â CREATESTRUCT ±¸Á¶Ã¼À̸ç hwndInsertAfter´Â ÀÌ À©µµ¿ì ¹Ù·Î ¾ÕÀÇ Z ¼ø¼¸¦ °¡Áö´Â À©µµ¿ì ÇÚµéÀÌ´Ù. ÈÅ ÇÁ·Î½ÃÀú¿¡¼ ÀÌ ±¸Á¶Ã¼ÀÇ °ªÀ» Á÷Á¢ º¯°æÇϸé À©µµ¿ìÀÇ À§Ä¡³ª Å©±â, Z ¼ø¼¸¦ ¹Ù²Ü ¼ö ÀÖ´Ù. lpcs->x, lpcs->y°ªÀ» Á¶Á¤ÇÏ¸é ¸Þ½ÃÁö ¹Ú½º°¡ »ý¼ºµÉ À§Ä¡¸¦ ÁöÁ¤ÇÒ ¼ö Àִµ¥ ¿¹Á¦¿¡¼´Â ÀÌ °ªÀ» Á÷Á¢ º¯°æÇÏÁö ¾Ê°í ¼ºêŬ·¡½Ì¸¸ Çϰí ÀÖ´Ù. ¿Ö³ÄÇÏ¸é ºÎ¸ðÀÇ Áß¾Ó ÁÂÇ¥¸¦ ±¸ÇØ¾ß Çϴµ¥ À©µµ¿ì°¡ »ý¼ºµÇ´Â ÀÌ ½ÃÁ¡¿¡´Â ¾ÆÁ÷ ºÎ¸ð°¡ ´©±¸ÀÎÁö¸¦ ¾Ë ¼ö ¾ø±â ¶§¹®ÀÌ´Ù. CBTÈÅÀº µ¿ÀÛÀÌ ÀϾ±â Á÷Àü¿¡ º¸³»Áö¹Ç·Î ¾ÆÁ÷ ÀÌ À©µµ¿ì´Â ¸¸µé¾îÁöÁö ¾Ê¾ÒÀ¸¸ç ºÎ¸ð ÀÚ½Ä °ü°èµµ ¼³Á¤µÇ¾î ÀÖÁö ¾Ê´Ù.
±×·¡¼ ÈÅ ÇÁ·Î½ÃÀú´Â ¼ºêŬ·¡½Ì¸¸ ÇØ ³õ°í ¼ºêŬ·¡½º ÇÁ·Î½ÃÀúÀÇ WM_CREATE(¶Ç´Â WM_INITDIALOG)¿¡¼ ºÎ¸ðÀÇ À§Ä¡¸¦ ÂüÁ¶ÇÏ¿© ºÎ¸ðÀÇ Áß¾Ó À§Ä¡·Î °¡µµ·Ï Çß´Ù. ¿©±â¼ WM_CREATE ¸Þ½ÃÁö´Â ºÎ¸ð¸¦ ¾Ë ¼ö ÀÖ´Â ÃÖÃÊÀÇ ½ÃÁ¡ÀÌ¸ç ¶ÇÇÑ ÀÌ À©µµ¿ì°¡ º¸À̱â ÀüÀ̹ǷΠÀ§Ä¡¸¦ ¿Å±æ ¼ö ÀÖ´Â ÃÖÀûÀÇ À§Ä¡¿¡ ÇØ´çµÈ´Ù. ¿ø·¡ À©µµ¿ì ÇÁ·Î½ÃÀúÀÇ ¹øÁö´Â º°µµÀÇ Àü¿ª º¯¼ö¿¡ ÀúÀåÇÒ ¼öµµ ÀÖÁö¸¸ À©µµ¿ì ½º½º·Î ±â¾ïÇϵµ·Ï Çϱâ À§ÇØ À©µµ¿ì ÇÁ·ÎÆÛƼ¸¦ »ç¿ëÇß´Ù. ÀÌ À©µµ¿ì´Â ÆÄ±«µÇ±â Á÷Àü¿¡ À©µµ¿ì ÇÁ·ÎÆÛƼ·ÎºÎÅÍ ¿ø·¡ À©µµ¿ì ÇÁ·Î½ÃÀú¸¦ ±¸ÇØ ÀÚ½ÅÀÇ ¼ºêŬ·¡½ÌÀ» Á÷Á¢ ÇØÁ¦ÇÑ´Ù. ¿ä¾àÇÏÀÚ¸é CBT ÈÅ ÇÁ·Î½ÃÀú´Â À©µµ¿ì°¡ »ý¼ºµÇ´Â ½ÃÁ¡À» °¡·Îä¼ ¼ºêŬ·¡½Ì¸¸ Çϰí À§Ä¡¸¦ ¿Å±â´Â ÀÛ¾÷Àº ¼ºêŬ·¡½º ÇÁ·Î½ÃÀú°¡ Çϰí ÀÖ´Â ¼ÀÀÌ´Ù.
ÈÅ ÇÁ·Î½ÃÀú´Â ¼ºêŬ·¡½ÌÇÒ À©µµ¿ì¸¦ Á¤È®ÇÏ°Ô ¼±Á¤ÇØ¾ß ÇÑ´Ù. CBT ÈÅÀº ¸ðµç À©µµ¿ìÀÇ »ý¼º, ÆÄ±«, À̵¿ ¸Þ½ÃÁö¸¦ ¹Þ±â ¶§¹®¿¡ Á¶°Ç Á¡°ËÀ» Á¤¹ÐÇÏ°Ô ÇÏÁö ¾ÊÀ¸¸é ´ëÈ»óÀÚ»Ó¸¸ ¾Æ´Ï¶ó ´ëÈ»óÀÚ¾ÈÀÇ ¹öưÀ̳ª ½ºÅÂÆ½°°Àº ÄÁÆ®·Ñ±îÁöµµ À§Ä¡ À̵¿ÀÇ ´ë»óÀÌ µÇ¾î ¹ö¸®±â ¶§¹®ÀÌ´Ù. ¿¹Á¦¿¡¼´Â À©µµ¿ì Ŭ·¡½º°¡ #32770, Áï ´ëÈ»óÀÚÀ̰í Â÷Àϵ尡 ¾Æ´ÑÁö¸¸À¸·Î ¸Þ½ÃÁö ¹Ú½ºÀÎÁö¸¦ Á¡°ËÇϰí ÀÖ´Ù. À©µµ¿ì°¡ Á» ´õ ¸¹Àº ÇÁ·ÎÁ§Æ®¿¡¼´Â À̺¸´Ù ´õ Á¤¹ÐÇÑ Á¶°Ç Á¡°ËÀ» ÇØ¾ß ÇÒ °ÍÀÌ´Ù. ±×·¸Áö ¾ÊÀ¸¸é ¿øÄ¡¾ÊÀº À©µµ¿ì±îÁö À§Ä¡°¡ À̵¿µÇ´Â ºÎÀÛ¿ëÀÌ ¹ß»ýÇÑ´Ù.
¿¹Á¦¸¦ ½ÇÇàÇÏ°í ¸¶¿ì½º ¿ÞÂÊ ¹öưÀ» ´·¯ º¸¸é ¸Þ½ÃÁö ¹Ú½º°¡ ºÎ¸ðÀÇ Áß¾Ó¿¡ ¿¸®°Ô µÉ °ÍÀÌ´Ù. Äڵ带 ÀÌÇØÇÏ´Â °ÍÀº ¾î·ÆÁö ¾ÊÀºµ¥ ±×·¸´Ù¸é ¸Þ½ÃÁö ¹Ú½ºÀÇ À§Ä¡¸¦ ¿Å±â´Âµ¥ ¿Ö ÀÌ·¸°Ô º¹ÀâÇÑ °úÁ¤À» °ÅÃÄ¾ß ÇÏ´Â °ÍÀϱî? ±× ÀÌÀ¯´Â MessageBox¶ó´Â ÇÔ¼ö°¡ ¸ð´Þ ´ëÈ»óÀÚ¸¦ ¿°í ÀÌ ´ëÈ»óÀÚÀÇ ¿î¿ë ÀÏü¸¦ °üÀåÇϰí Àֱ⠶§¹®ÀÌ´Ù. ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ¸é ´ëÈ»óÀÚ¸¦ »ý¼º, Ç¥½Ã, ÆÄ±«ÇÏ´Â µ¿ÀÛÀÌ ¸ðµÎ ÀÌ ÇÔ¼ö³»¿¡¼ ÀϾ¸ç ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ¸Þ½ÃÁö ¹Ú½º¿¡ ´ëÇØ Á¶ÀÛÀ» ÇÒ ¼ö ÀÖ´Â ±âȸ°¡ ¾ø´Ù. ±×·¡¼ ÈÅÀ» ¼³Ä¡ÇÏ°í ¼ºêŬ·¡½ÌÇØ¼ »ý¼º ½ÃÁ¡À» °¡·Îä´Â º¹ÀâÇÑ °úÁ¤À» °ÅÃÄ¾ß ÇÏ´Â °ÍÀÌ´Ù. ÀÌ ¹æ¹ýÀº ¸Þ½ÃÁö ¹Ú½º»Ó¸¸ ¾Æ´Ï¶ó °øÅë ´ëÈ»óÀÚ³ª ÇÁ·ÎÆÛƼ ½ÃÆ® µîÀÇ ÄÁÆ®·Ñ¿¡µµ µ¿ÀÏÇÏ°Ô Àû¿ëµÈ´Ù.