´Ù. À©µµ¿ì ÄÁÆ®·Ñ

À©µµ¿ì ÄÁÆ®·ÑÀ̶õ ¹öÆ°, ¿¡µðÆ® °°Àº Ç¥ÁØ ÄÁÆ®·Ñó·³ 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·Î Á¦°øµÈ´Ù´Â Á¡¸¸ ´Ù¸£´Ù.