À©µµ¿ì ÄÁÆ®·ÑÀ̶õ ¹öÆ°, ¿¡µðÆ® °°Àº Ç¥ÁØ ÄÁÆ®·Ñó·³ CreateWindow·Î »ý¼ºÇÏ´Â ÄÁÆ®·ÑÀÌ´Ù. ±× Àü¿¡ À©µµ¿ì Ŭ·¡½º´Â µî·ÏµÇ¾î ÀÖ¾î¾ß ÇÏ¸ç »ý¼ºÇÒ ¶§ ½ºÅ¸ÀÏ·Î ÄÁÆ®·ÑÀÇ ¸ð¾çÀ̳ª µ¿ÀÛÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ºÎ¸ð À©µµ¿ì°¡ ÄÁÆ®·Ñ¿¡°Ô ¸í·ÉÀ» º¸³¾ ¶§´Â SendMessage ÇÔ¼ö·Î ¹Ì¸® Á¤ÀÇµÈ ¸Þ½ÃÁö¸¦ º¸³»¸ç ¹Ý´ë·Î ÄÁÆ®·ÑÀÌ ºÎ¸ð À©µµ¿ì¿¡°Ô º¸°í¸¦ ÇÒ ¶§´Â ÅëÁö ¸Þ½ÃÁö¸¦ »ç¿ëÇÑ´Ù. ShowMsg ÄÁÆ®·ÑÀ» ÀÌ ¹æ½Ä´ë·Î »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÄÁÆ®·ÑÈ Çغ¸µµ·Ï ÇÏÀÚ.
ÄÁÆ®·ÑÀ̶õ Àç»ç¿ëÀÌ ½±µµ·Ï Çϴµ¥ ÀÏÂ÷ÀûÀÎ ¸ñÀûÀÌ ÀÖÀ¸¹Ç·Î ¾Æ¹« ÇÁ·ÎÁ§Æ®¿¡¼³ª ½±°Ô °¡Á®°¡ ¾µ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ƯÁ¤ÇÑ Á¶°ÇÀÌ ¸¸Á·µÉ ¶§¸¸ »ç¿ëÇÒ ¼ö À־ °ï¶õÇϸç ÄÁÆ®·ÑÀ» »ç¿ëÇϴµ¥ Ãß°¡ÀûÀÎ ÀÛ¾÷Àº °¡±ÞÀûÀ̸é ÃÖ¼ÒÈÇØ¾ß ÇÏ°í ¾Æ¹« Ãß°¡ ÀÛ¾÷ ¾øÀÌ ¹Ù·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù¸é ÀÌ»óÀûÀÌ´Ù.
Åë»ó ÄÁÆ®·ÑÀº LIB³ª DLL·Î ÀÛ¼ºÇÏ°í ÀÌ ¸ðµâÀ» ÇÁ·ÎÁ§Æ®¿¡ Ãß°¡ÇÔÀ¸·Î½á »ç¿ëÇϵµ·Ï ÇÏ´Â °ÍÀÌ º¸ÅëÀÌ´Ù. ±»ÀÌ ¼Ò½º¸¦ ¼û±æ ÇÊ¿ä°¡ ¾ø°í °³¹ßÀÚ°¡ ¿øÇÏ´Â ´ë·Î ¼Ò½º¸¦ ¼öÁ¤ÇØ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÏ·Á¸é ¼Ò½ºÆÄÀÏÀ» ¹èÆ÷ÇÒ ¼öµµ ÀÖ´Ù. ¼Ò½º ¹èÆ÷½Ã´Â Åë»ó .h Çì´õ ÆÄÀÏ°ú .cpp ±¸Çö ÆÄÀÏ µÑÀ» ¹èÆ÷ÇÏ°í ÇÊ¿äÇÒ °æ¿ì ¸®¼Ò½ºÆÄÀÏ(bmp, cur)ÀÌ Ãß°¡µÉ ¼ö ÀÖ´Ù. Çì´õ ÆÄÀÏ¿¡´Â ¸Þ½ÃÁö, ÅëÁö ¸Þ½ÃÁö, ½ºÅ¸ÀÏ µîÀÇ ¸ÅÅ©·Î³ª ÀÎÅÍÆäÀ̽º ÇÔ¼öÀÇ ¿øÇüÀÌ ÀÛ¼ºµÇ°í ±¸Çö ÆÄÀÏ¿¡´Â ÇÔ¼öµéÀÇ ±¸Çö ÄÚµå¿Í ¸Þ½ÃÁö ó¸® ÇÔ¼ö°¡ ÀÛ¼ºµÈ´Ù. ÀÌ ÄÁÆ®·ÑÀ» »ç¿ëÇÏ´Â °³¹ßÀÚ´Â ÄÁÆ®·Ñ ÀÛ¼ºÀÚ°¡ ¹èÆ÷ÇÑ ¸ðµâÀ» ÀÚ½ÅÀÇ ÇÁ·ÎÁ§Æ®¿¡ Æ÷ÇÔ½ÃÄÑ ÁÜÀ¸·Î½á ÄÁÆ®·ÑÀ» »ç¿ëÇÑ´Ù.
ShowMsg À©µµ¿ì¸¦ ÄÁÆ®·ÑÈÇÏ¿© ShowMsgCtrl ÇÁ·ÎÁ§Æ®¸¦ ÀÛ¼ºÇغ¸ÀÚ. »õ·Î¿î ÇÁ·ÎÁ§Æ®¸¦ ÀÛ¼ºÇÏ°í ÇÊ¿äÇÑ ±¸¼º ÆÄÀϵéÀ» Â÷·Ê´ë·Î ÀÛ¼ºÇغ¸ÀÚ. ¸ÕÀú ShowMsg.h ÆÄÀÏÀ» ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÑ´Ù.
BOOL InitShowMsg();
#define SMM_CHANGESTRING WM_USER+1
ÄÁÆ®·ÑÀÌ ¿ö³« °£´ÜÇϱ⠶§¹®¿¡ Çì´õ ÆÄÀϵµ ¾ÆÁÖ °£´ÜÇÏ´Ù. InitShowMsg ÀÎÅÍÆäÀ̽º ÇÔ¼öÀÇ ¿øÇüÀÌ Á¤ÀǵǾî ÀÖ°í SMM_CHANGESTRINGÀ̶ó´Â ¸Þ½ÃÁö »ó¼ö°¡ Á¤ÀǵǾî ÀÖ´Ù. ÀÌ ¸Þ½ÃÁö´Â ShowMsg À©µµ¿ìÀÇ ChangeString ÇÔ¼ö¸¦ È£ÃâÇϱâ À§ÇØ Á¤ÀÇµÈ °ÍÀε¥ ÀÌ ÇÔ¼ö´Â ÄÁÆ®·Ñ ³»ºÎÀÇ ÇÔ¼öÀ̹ǷΠ¸Þ½ÃÁö¸¦ ÅëÇØ °£Á¢ÀûÀ¸·Î È£ÃâÇØ¾ß ÇÑ´Ù. ¸Þ½ÃÁöÀÇ lParamÀ¸·Î ¹Ù²Ù°íÀÚ ÇÏ´Â ¹®ÀÚ¿ÀÇ Æ÷ÀÎÅ͸¦ Àü´ÞÇϵµ·Ï ÇÏ¿´´Ù. ÄÁÆ®·ÑÀÇ ½ºÅ¸ÀÏÀ̳ª ÅëÁö ¸Þ½ÃÁö°¡ ÇÊ¿äÇÏ´Ù¸é ¿ª½Ã Çì´õ ÆÄÀÏ¿¡ Á¤ÀÇÇϴµ¥ ShowMsg ÄÁÆ®·ÑÀº ½ºÅ¸ÀÏÀ» °¡ÁöÁö ¾Ê´Â´Ù.
´ÙÀ½Àº ÄÁÆ®·ÑÀÇ ±¸Çö ÆÄÀÏ ShowMsg.cpp¸¦ ÀÛ¼ºÇÑ´Ù. ÄÁÆ®·ÑÈÇϱâ ÀüÀÇ ShowMsg.cpp¿Í ¸ð¾çÀÌ Á¶±Ý ´Þ¶óÁöÁö¸¸ »ç¿ëÇÏ´Â ³í¸®´Â µ¿ÀÏÇÏ´Ù.
#include <windows.h>
#include "ShowMsg.h"
LRESULT CALLBACK ShowMsgProc(HWND,UINT,WPARAM,LPARAM);
BOOL InitShowMsg()
{
WNDCLASS WndClass;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=4;
WndClass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
WndClass.hInstance=GetModuleHandle(NULL);
WndClass.lpfnWndProc=(WNDPROC)ShowMsgProc;
WndClass.lpszClassName="ShowMsgCtrl";
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW | CS_VREDRAW;
if (RegisterClass(&WndClass) == 0) {
return FALSE;
} else {
return TRUE;
}
}
struct tagSM
{
int x;
int y;
TCHAR *str;
};
void ChangeString(HWND hWnd,TCHAR *nstr)
{
tagSM *pSM=(tagSM *)GetWindowLong(hWnd,0);
lstrcpy(pSM->str,nstr);
InvalidateRect(hWnd,NULL,TRUE);
}
LRESULT CALLBACK ShowMsgProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT crt;
tagSM *pSM;
switch(iMessage) {
case WM_CREATE:
pSM=(tagSM *)malloc(sizeof(tagSM));
pSM->x=50;
pSM->y=50;
pSM->str=(TCHAR *)malloc(128);
lstrcpy(pSM->str,"String");
SetWindowLong(hWnd,0,(LONG)pSM);
return 0;
case WM_KEYDOWN:
pSM=(tagSM *)GetWindowLong(hWnd,0);
GetClientRect(hWnd,&crt);
switch (wParam) {
case VK_LEFT:
if (pSM->x > 0)
pSM->x--;
break;
case VK_RIGHT:
if (pSM->x < crt.right-50)
pSM->x++;
break;
case VK_UP:
if (pSM->y > 0)
pSM->y--;
break;
case VK_DOWN:
if (pSM->y < crt.bottom-10)
pSM->y++;
break;
}
InvalidateRect(hWnd,NULL,TRUE);
return 0;
case SMM_CHANGESTRING:
ChangeString(hWnd,(TCHAR *)lParam);
return 0;
case WM_LBUTTONDOWN:
pSM=(tagSM *)GetWindowLong(hWnd,0);
if (lstrcmp(pSM->str,"String") == 0) {
ChangeString(hWnd,"¹®ÀÚ¿");
} else {
ChangeString(hWnd,"String");
}
SetFocus(hWnd);
return 0;
case WM_PAINT:
pSM=(tagSM *)GetWindowLong(hWnd,0);
GetClientRect(hWnd,&crt);
hdc=BeginPaint(hWnd, &ps);
Rectangle(hdc,0,0,crt.right,crt.bottom);
TextOut(hdc,pSM->x,pSM->y,pSM->str,lstrlen(pSM->str));
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
pSM=(tagSM *)GetWindowLong(hWnd,0);
free(pSM->str);
free(pSM);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
InitShowMsg¶ó´Â ÀÎÅÍÆäÀ̽º ÇÔ¼ö´Â ÀÌ ÄÁÆ®·ÑÀÇ À©µµ¿ì Ŭ·¡½º¸¦ µî·ÏÇÏ´Â ÀÛ¾÷À» Çϴµ¥ À©µµ¿ì Ŭ·¡½º°¡ µî·ÏµÇ¾î¾ß CreateWindow ÇÔ¼ö·Î ÄÁÆ®·ÑÀ» »ý¼ºÇÒ ¼ö ÀÖ´Ù. ¸®½ºÆ® ºä³ª Æ®¸® ºä¸¦ »ç¿ëÇϱâ Àü¿¡ InitCommonControls(Ex) ÇÔ¼ö¸¦ È£ÃâÇØ¾ß ÇÏ´Â °Í°ú ¸¶Âù°¡Áö·Î ShowMsg ÄÁÆ®·ÑÀ» »ç¿ëÇÏ°í ½ÍÀ¸¸é È£½ºÆ® ÇÁ·Î±×·¥ÀÇ ÃʱâÈ ·çƾ¿¡¼ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ¿© À©µµ¿ì Ŭ·¡½º¸¦ µî·ÏÇØ¾ß ÇÑ´Ù.
À©µµ¿ì Ŭ·¡½ºÀÇ À̸§Àº ShowMsgCtrl·Î Á¤ÇßÀ¸¸ç cbWndExtra¿¡ 4¸¦ ´ëÀÔÇÏ¿© 4¹ÙÀÌÆ®ÀÇ ¿©ºÐ ¸Þ¸ð¸®¸¦ ÁغñÇÏ¿´´Ù. ÇÑ À©µµ¿ì¿¡ ¿©·¯ °³ÀÇ ÄÁÆ®·ÑÀ» µ¿½Ã¿¡ »ý¼ºÇÒ ¼ö ÀÖÀ¸¸ç À̶§ °¢ ÄÁÆ®·ÑÀÇ ÀνºÅϽº º°·Î µ¥ÀÌÅ͸¦ ÀúÀåÇÒ ¼ö ÀÖ´Â °ø°£ÀÌ ÇÊ¿äÇÏ´Ù. ÄÁÆ®·ÑÀÇ Àü¿ªº¯¼ö´Â ÀνºÅϽº º°·Î °íÀ¯ÇØ¾ß ÇÑ´Ù. ShowMsg ÄÁÆ®·ÑÀº x, y, str ¼¼ °³ÀÇ Àü¿ªº¯¼ö¸¦ °¡Áö´Âµ¥ ÀÌ º¯¼öµéÀº ÀνºÅϽº³¢¸® °øÀ¯ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó °¢ ÀνºÅϽº°¡ °³º°ÀûÀ¸·Î °ªÀ» À¯ÁöÇÑ´Ù.
¿¹¸¦ µé¾î ´ÙÀ½°ú °°ÀÌ ÇÑ ´ëÈ»óÀÚ¿¡ 4°³ÀÇ ¿¡µðÆ® ÄÁÆ®·ÑÀÌ ¹èÄ¡µÇ¾î ÀÖ´Ù°í ÇÏÀÚ. °¢ ¿¡µðÆ® º°·Î ÀԷ¹޴ Á¤º¸ÀÇ Àǹ̴ ´Ù¸£´Ù.
¿¡µðÆ® ÄÁÆ®·ÑÀº ÆíÁýÁßÀÎ ÅؽºÆ®ÀÇ ¹öÆÛ, ÇöÀç ij·µ À§Ä¡, ¼±Åÿµ¿ª, ÀбâÀü¿ë ½ºÅ¸ÀÏ°ª µîÀÇ Àü¿ªº¯¼ö¸¦ ÇÊ¿ä·Î Çϴµ¥ °¢ ¿¡µðÆ®¸¶´Ù °íÀ¯ÇÑ Àü¿ªº¯¼ö ÁýÇÕÀ» °¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù. ÀÌ Á¤º¸µéÀ» °øÀ¯ÇÑ´Ù¸é °³º° ÄÁÆ®·ÑÀº µ¶¸³ÀûÀ¸·Î µ¿ÀÛÇÒ ¼ö°¡ ¾ø´Ù. ShowMsg ÄÁÆ®·Ñµµ ¸¶Âù°¡Áö·Î °¢ ÀνºÅϽº¸¶´Ù x, y, strÀ» °¡Á®¾ß Çϸç ÀÌ Á¤º¸ ÀúÀåÀ» À§ÇÑ °ø°£À¸·Î ¿©ºÐ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏ´Â °ÍÀÌ´Ù.
ShowMsg ÄÁÆ®·ÑÀÇ °æ¿ì Àü¿ªº¯¼ö°¡ ¼¼ °³¹Û¿¡ µÇÁö ¾Ê±â ¶§¹®¿¡ ¿©ºÐ ¸Þ¸ð¸®¿¡ 12¹ÙÀÌÆ®¸¦ ÇÒ´çÇÏ°í Á÷Á¢ ³ÖÀ» ¼öµµ ÀÖ´Ù. ±×·¯³ª ÀÌ·¸°Ô ÇÏ¸é °¢ º¯¼öÀÇ À̸§Àº ¾ø¾îÁ®¹ö¸®°í ¿ÀÇÁ¼ÂÀ¸·Î ¾×¼¼½ºÇØ¾ß ÇϹǷΠºÒÆíÇÒ »Ó¸¸ ¾Æ´Ï¶ó ¿©ºÐ ¸Þ¸ð¸® °ø°£ÀÌ ¹«ÇÑÇÏÁö ¾Ê´Ù´Â Á¦¾àÀÌ ÀÖ¾î Àü¿ªº¯¼ö¸¦ ¸¹ÀÌ »ç¿ëÇÒ ¼ö°¡ ¾ø´Ù. ±×·¡¼ º¸Åë ¸ðµç Àü¿ªº¯¼ö¸¦ Æ÷ÇÔÇÏ´Â ÇϳªÀÇ ±¸Á¶Ã¼¸¦ ¼±¾ðÇÏ°í ÀÌ ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅ͸¸ ¿©ºÐ ¸Þ¸ð¸®¿¡ ÀúÀåÇسõ´Â´Ù. ±×·¡¼ ShowMsgCtrl À©µµ¿ì Ŭ·¡½ºÀÇ ¿©ºÐ ¸Þ¸ð¸® Å©±â°¡ 4¹ÙÀÌÆ®·Î ÇÒ´çµÇ¾ú´Ù.
tagSM ±¸Á¶Ã¼´Â ShowMsgCtrlÀÇ °íÀ¯ µ¥ÀÌÅ͸¦ °¡Áö´Â ±¸Á¶Ã¼À̸ç Å©±â´Â 12¹ÙÀÌÆ®ÀÌ´Ù. WM_CREATE¿¡¼ ÀÌ ±¸Á¶Ã¼¸¦ À§ÇÑ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏ°í ±¸Á¶Ã¼ÀÇ ¸â¹ö¸¦ ÃʱâÈÇÑ´Ù. ±×¸®°í ¿©ºÐ ¸Þ¸ð¸®¿¡ ÀÌ ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅ͸¦ ´ëÀÔÇسõ¾Ò´Ù. ÀνºÅϽºÀÇ µ¥ÀÌÅÍ°¡ ¿©ºÐ ¸Þ¸ð¸®¿¡ µé¾î ÀÖÀ¸¹Ç·Î ÀÌ ÄÁÆ®·ÑÀÌ ÀúÀåµÈ µ¥ÀÌÅ͸¦ ¾×¼¼½ºÇÏ·Á¸é ´ÙÀ½ ¼ø¼´ë·Î ÇØ¾ß ÇÑ´Ù.
tagSM *pSM;
pSM=(tagSM *)GetWindowLong(hWnd,0);
pSM->¸â¹ö=°ª;
tagSM ±¸Á¶Ã¼ Æ÷ÀÎÅ͸¦ ¼±¾ðÇÏ°í ¿©ºÐ ¸Þ¸ð¸®¿¡¼ ÀÌ ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅ͸¦ ±¸ÇÑ´Ù. ±×¸®°í ±¸Á¶Ã¼ Æ÷ÀÎÅÍ ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¿© ±¸Á¶Ã¼ÀÇ °¢ ¸â¹ö¿¡ ¾×¼¼½ºÇÒ ¼ö ÀÖ´Ù. ¸Þ½ÃÁö ó¸® ÇÔ¼ö³ª À¯Æ¿¸®Æ¼ ÇÔ¼ö¿¡¼µµ ÀÌ ¹æ¹ý´ë·Î ÄÁÆ®·ÑÀÇ µ¥ÀÌÅ͸¦ ¾×¼¼½ºÇØ¾ß ÇÑ´Ù. ¿©ºÐ ¸Þ¸ð¸®´Â ÄÁÆ®·ÑÀÌ ½ÇÇàµÇ´Â µ¿¾È ÀνºÅϽºÀÇ °íÀ¯ µ¥ÀÌÅ͸¦ ÀúÀåÇÏ´Â ¿ªÇÒÀ» Çϸç ÄÁÆ®·ÑÀÌ Á¾·áµÉ ¶§ÀÎ WM_DESTROY¿¡¼ ÇØÁ¦µÈ´Ù.
ÀϹÝÇÔ¼ö ChangeStringÀº ù ¹ø° Àμö·Î À©µµ¿ì ÇÚµéÀ» ¹Þµµ·Ï ¿øÇüÀÌ ¼öÁ¤µÇ¾ú´Ù. ÀÌ ÇÔ¼ö´Â str Àü¿ªº¯¼öÀÇ °ªÀ» º¯°æÇϴµ¥ str¿¡ ¾×¼¼½ºÇϱâ À§Çؼ´Â ¿©ºÐ ¸Þ¸ð¸®¿¡ µé¾î ÀÖ´Â pSM ±¸Á¶Ã¼ Æ÷ÀÎÅÍ°¡ ÇÊ¿äÇÏ°í À©µµ¿ì ÇÚµéÀÌ ÀÖ¾î¾ß¸¸ ¿©ºÐ ¸Þ¸ð¸®¸¦ ÀÐÀ» ¼ö ÀÖ´Ù. ÀϹÝÇÔ¼ö´Â ÄÁÆ®·ÑÀÇ ¸ðµç ÀνºÅϽº°¡ °øÀ¯ÇÏ´Â ÇÔ¼öÀ̸ç ÀÛ¾÷ÇÒ ´ë»ó ÀνºÅϽº¸¦ ã¾Æ¾ß ÇϹǷΠÀ©µµ¿ì ÇÚµéÀÌ ¹Ýµå½Ã ÇÊ¿äÇÏ´Ù.
À©µµ¿ì ÇÁ·Î½ÃÀúÀÎ ShowMsgProc ÇÔ¼ö´Â x, y, strÀ» ¾×¼¼½ºÇÒ ¶§ Ç×»ó pSMÀ» ¸ÕÀú ±¸ÇÏ°í pSM->x, pSM->str°ú °°ÀÌ ¾×¼¼½ºÇϵµ·Ï ¼öÁ¤µÇ¾ú´Ù. µ¥ÀÌÅ͸¦ ¾×¼¼½ºÇÏ´Â ±¸¹®ÀÌ Á¶±Ý º¹ÀâÇØÁ³À» »ÓÀÌÁö ³í¸®°¡ º¯ÇÑ °ÍÀº Çϳªµµ ¾ø´Ù. ´Ù¸¸ ÄÁÆ®·ÑÀÌ µÊÀ¸·Î½á µÎ °¡Áö ºÎºÐ¿¡ º¯È°¡ »ý°å´Âµ¥ WM_LBUTTONDOWN¿¡¼ SetFocus¸¦ È£ÃâÇÏ¿© °Á¦·Î Æ÷Ä¿½º¸¦ °¡Á®¿Í¾ß ÇÑ´Ù´Â Á¡°ú WM_DESTROY¿¡¼ PostQuitMessage(0) ÇÔ¼ö¸¦ È£ÃâÇÏÁö ¾Ê´Â´Ù´Â Á¡ÀÌ ¹Ù²î¾ú´Ù. ÄÁÆ®·ÑÀº ¸ÞÀÎ À©µµ¿ì°¡ ¾Æ´Ï±â ¶§¹®¿¡ ÀÀ¿ë ÇÁ·Î±×·¥À» Á¾·áÇÒ ±ÇÇÑÀÌ ¾ø´Ù.
ShowMsg ÄÁÆ®·ÑÀº ´Ù ÀÛ¼ºÇßÀ¸¸ç ÀÌÁ¦ ÀÌ ÄÁÆ®·ÑÀ» »ç¿ëÇÒ ¸ÞÀÎ À©µµ¿ì¸¦ ÀÛ¼ºÇϵµ·Ï ÇÏÀÚ. È£½ºÆ® ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â °ÍÀÌ´Ù. ÇÁ·ÎÁ§Æ®¿¡ ShowMsgTest.cpp ÆÄÀÏÀ» Ãß°¡ÇÏ°í ´ÙÀ½°ú °°ÀÌ Äڵ带 ÀÛ¼ºÇÑ´Ù.
#include <windows.h>
#include "ShowMsg.h"
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
HWND hWndMain;
LPCTSTR lpszClass=TEXT("ShowMsgTest");
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
,LPSTR lpszCmdParam,int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst=hInstance;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=(WNDPROC)WndProc;
WndClass.lpszClassName=lpszClass;
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&WndClass);
hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL,(HMENU)NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdShow);
hWndMain=hWnd;
while(GetMessage(&Message,0,0,0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return (int)Message.wParam;
}
HWND hMsg1, hMsg2;
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
switch(iMessage) {
case WM_CREATE:
if (InitShowMsg() == FALSE) {
return -1;
}
hMsg1=CreateWindow("ShowMsgCtrl",NULL, WS_CHILD | WS_VISIBLE,
10,10,100,100,hWnd,NULL,g_hInst,NULL);
hMsg2=CreateWindow("ShowMsgCtrl",NULL, WS_CHILD | WS_VISIBLE,
210,10,100,100,hWnd,NULL,g_hInst,NULL);
return 0;
case WM_LBUTTONDOWN:
SendMessage(hMsg1,SMM_CHANGESTRING,0,(LPARAM)"test");
return 0;
case WM_PAINT:
hdc=BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
¾ÆÁÖ ÀϹÝÀûÀÎ API ¼Ò½ºÀÌ´Ù. ShowMsg.h¸¦ ÀÎŬ·çµåÇÏ¿© ShowMsg ÄÁÆ®·ÑÀÇ ½ºÅ¸ÀÏ, ¸Þ½ÃÁö, ÀÎÅÍÆäÀ̽º ÇÔ¼ö µî¿¡ ´ëÇÑ Á¤º¸¸¦ ¸ÕÀú ±¸Çß´Ù. Àü¿ªº¯¼ö·Î µÎ °³ÀÇ À©µµ¿ì ÇÚµéÀ» Á¤ÀÇÇߴµ¥ ÀÌ ÇÚµé·Î ÄÁÆ®·ÑÀ» Á¶ÀÛÇÏ°Ô µÈ´Ù.
WM_CREATE¿¡¼´Â ¸ÕÀú InitShowMsg ÀÎÅÍÆäÀ̽º ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ÄÁÆ®·Ñ¿¡°Ô À©µµ¿ì Ŭ·¡½º¸¦ µî·ÏÇÒ ±âȸ¸¦ Á¦°øÇÑ´Ù. ¸¸¾à ¾î¶² ÀÌÀ¯·Î À©µµ¿ì Ŭ·¡½º µî·Ï¿¡ ½ÇÆÐÇϸé ÇÁ·Î±×·¥ÀÌ Á¦´ë·Î ½ÇÇàµÉ ¼ö ¾ø´Â »óȲÀ̹ǷΠÇÁ·Î±×·¥À» Á¾·áÇØ¾ß ÇÑ´Ù. ShowMsg ÄÁÆ®·ÑÀ» »ç¿ëÇϴ ȣ½ºÆ® ÇÁ·Î±×·¥Àº InitShowMsg ÇÔ¼ö¸¦ ¸ÕÀú È£ÃâÇØ¾ß ÇÒ Àǹ«°¡ ÀÖ´Ù.
À©µµ¿ì Ŭ·¡½º¸¦ µî·ÏÇÑ ÈÄ CreateWindow ÇÔ¼ö·Î Ç¥ÁØ ÄÁÆ®·ÑÀ» »ý¼ºÇϵíÀÌ µÎ °³ÀÇ ÄÁÆ®·ÑÀ» »ý¼ºÇÏ¿´´Ù. ¸¶Ä¡ ¡®button¡¯ Ŭ·¡½º·ÎºÎÅÍ ¹öÆ°À» ¸¸µéµíÀÌ ¡®ShowMsgCtrl¡¯ Ŭ·¡½º·ÎºÎÅÍ ShowMsg ÄÁÆ®·ÑÀ» ¸¸µé¾ú´Ù. ½ºÅ¸ÀÏÀº Á¤ÀǵǾî ÀÖÁö ¾ÊÀ¸¹Ç·Î º°µµ·Î ÁÖÁö ¾Ê¾Ò´Âµ¥ ¸¸¾à ÀÖ´Ù¸é SMS_·Î ½ÃÀ۵Ǵ »ó¼ö°¡ Á¤ÀÇµÉ °ÍÀÌ´Ù. ÄÁÆ®·ÑÀÇ ¹®ÀÚ¿À» ºÎ¸ð À©µµ¿ì°¡ Á÷Á¢ º¯°æÇÏ·Á¸é lParam¿¡ ¿øÇÏ´Â ¹®ÀÚ¿ Æ÷ÀÎÅ͸¦ ´ëÀÔÇÏ¿© SMM_CHANGESTRING ¸Þ½ÃÁö¸¦ º¸³»¸é µÈ´Ù. ½ÇÇàÇغ¸ÀÚ.
µÎ °³ÀÇ ÄÁÆ®·ÑÀÌ »ý¼ºµÇ¾úÀ¸¸ç °¢°¢ÀÌ ¼·Î¿¡°Ô ¿µÇâÀ» ¹ÌÄ¡Áö ¾Ê°í µ¶¸³ÀûÀ¸·Î Àß µ¿ÀÛÇÏ°í ÀÖ´Ù. °¢ À©µµ¿ì º°·Î ¿©ºÐ ¸Þ¸ð¸®¿¡ °íÀ¯ÀÇ tagSM ±¸Á¶Ã¼¸¦ ÇÒ´çÇÏ¿© »ç¿ëÇÏ°í Àֱ⠶§¹®ÀÌ´Ù. ¿øÇÑ´Ù¸é ¼ö½Ê, ¼ö¹é °³ÀÇ ÄÁÆ®·ÑÀ» »ý¼ºÇÒ ¼öµµ ÀÖ´Ù.
ÀÌ ÄÁÆ®·ÑÀ» ´Ù¸¥ ÇÁ·ÎÁ§Æ®¿¡¼ »ç¿ëÇÏ°í ½Í´Ù¸é ShowMsg.h¿Í ShowMsg.cpp¸¦ º¹»çÇÑ ÈÄ ÇÁ·ÎÁ§Æ®¿¡ Æ÷ÇÔ½ÃÅ°°í Ç¥ÁØ ÄÁÆ®·ÑÀ» »ç¿ëÇÏ´Â ¹æ¹ý°ú µ¿ÀÏÇÏ°Ô »ç¿ëÇÏ¸é µÈ´Ù. InitShowMsg ÇÔ¼ö¸¦ È£ÃâÇÏ´Â Ãß°¡ ÀÛ¾÷ÀÌ ÇÊ¿äÇÑ °ÍÀÌ Á¶±Ý ÈìÀ̱â´Â ÇÏÁö¸¸ »ç¿ëÇϱ⿡ Ưº°È÷ ¾î·Á¿î Á¡Àº ¾ø´Ù. Ç¥ÁØ ÄÁÆ®·ÑµéÀº ¸ðµÎ ÀÌ ¹æ½Ä´ë·Î ÀÛ¼ºµÇ¾î ÀÖ°í, ¿î¿µÃ¼Á¦°¡ ÇÁ·Î¼¼½º ½ÃÀÛ°ú µ¿½Ã¿¡ À©µµ¿ì Ŭ·¡½ºÀÇ »çº»À» º¹»çÇϱ⠶§¹®¿¡ À©µµ¿ì Ŭ·¡½º¸¦ µî·ÏÇÏÁö ¾Ê¾Æµµ µÈ´Ù´Â Á¡¸¸ ´Ù¸¦ »ÓÀÌ´Ù. °øÅë ÄÁÆ®·ÑµéÀº ÀÌ ¹æ½Ä°ú ¿ÏÀüÈ÷ µ¿ÀÏÇÏ°Ô ÀÛ¼ºµÇ¾î ÀÖÀ¸¸ç, ¼Ò½º°¡ Á¦°øµÇÁö ¾Ê°í comctl32.dll·Î Á¦°øµÈ´Ù´Â Á¡¸¸ ´Ù¸£´Ù.