3.»õ·Î¿î ¸®¼Ò½º

°¡.·¹Áö½ºÆ®¸® Å° º¯°æ

¹ö±× ¼öÁ¤°ú ¼Ò½º Á¤¸®´Â ´ëÃæ ¸¶¹«¸®µÇ¾ú°í ÀÌÁ¦ºÎÅÍ 1.2¹öÀüÀ» ¸¸µé¾î º¸ÀÚ. ½ºÆÑÀÌ ¸¹ÀÌ È®ÀåµÉ °ÍÀ̹ǷΠ¹öÀüÀ» ¹Ù²ÙµÇ ´Ü¼øÈ÷ ¾çÀûÀ¸·Î ±â´ÉÀÌ ´Ã¾î³¯ »ÓÀÌÁö ±Ùº»ÀûÀÎ ±¸Á¶»óÀÇ º¯È­°¡ ÀÖ´Â °ÍÀº ¾Æ´Ï¹Ç·Î ¾ÆÁ÷µµ ¸ÞÀÌÀú ¹öÀüÀº 1ÀÌ´Ù. 1.0 ´ÙÀ½Àº 1.1ÀÌ µÇ¾î¾ß°ÚÁö¸¸ Ãß°¡µÈ ±â´ÉÀÌ ¸¹À¸¹Ç·Î 1.1Àº °Ç³Ê¶Ù¾ú´Ù. ¾îÂ÷ÇÇ ¹öÀü ¹øÈ£´Â °³¹ßÀÚ°¡ ÁÖ°üÀûÀ¸·Î ºÙÀÌ´Â °ÍÀÌ´Ù. ¹öÀüÀ» º¯°æÇϱâ À§ÇØ global.h¿¡ ÀÖ´Â KEY ¸ÅÅ©·Î »ó¼ö¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÏ°í ARSIZE ¸ÅÅ©·Î ÇÔ¼öµµ Á¤ÀÇÇÑ´Ù.

 

#define KEY "Software\\Miyoungsoft\\Dangeun\\1.2\\"

#define GAP 3

#define ARSIZE(ar) (sizeof(ar)/sizeof(ar[0]))

 

¸¶ÀÌÅ©·Î¼ÒÇÁÆ®´Â °°Àº ÇÁ·Î±×·¥ÀÌ¶óµµ ¹öÀüÀÌ ´Ù¸£¸é ·¹Áö½ºÆ®¸®¸¦ µû·Î ¾²±â¸¦ ±Ç°íÇϴµ¥ ÀÌ ±Ç°í´ë·Î ·¹Áö½ºÆ®¸® ·çƮ۸¦ 1.0¿¡¼­ 1.2·Î º¯°æÇÏ¿´´Ù. 1.0¹öÀü°ú ·¹Áö½ºÆ®¸® À§Ä¡°¡ ´Ù¸£±â ¶§¹®¿¡ 1.0À» »ç¿ëÁßÀÎ ½Ã½ºÅÛ¿¡¼­ 1.2¹öÀüÀ» óÀ½ ½ÇÇàÇϸé Ãʱ⠼³Ä¡ ´ëÈ­»óÀÚ°¡ ³ªÅ¸³¯ °ÍÀÌ´Ù. Áï, ´ç±Ù 1.0°ú ´ç±Ù 1.2´Â °íÀ¯ÀÇ ¼³Á¤ »óŸ¦ °¡Áö´Â ¿ÏÀüÈ÷ ´Ù¸¥ ÇÁ·Î±×·¥À¸·Î ÀνĵȴÙ.

ARSIZE ¸ÅÅ©·Î´Â ¹è¿­ÀÇ Å©±â¸¦ °è»êÇÑ´Ù. ´ç±ÙÀº ƯÈ÷ ¹è¿­À» ¸¹ÀÌ »ç¿ëÇϹǷΠÁ¤Àû ¹è¿­ÀÇ Å©±â¸¦ ±¸ÇÏ´Â °æ¿ì°¡ ¸¹À¸¸ç ÀÌ·² ¶§´Â sizeof ¿¬»êÀÚ·Î ÄÄÆÄÀϽÿ¡ ¹è¿­ Å©±â¸¦ °è»êÇÏ´Â ¹æ¹ýÀÌ ¸¹ÀÌ »ç¿ëµÈ´Ù. ¿¹¸¦ µé¾î Dangeun.cppÀÇ TestNeedActive ÇÔ¼öÀÇ Äڵ带 º¸¸é ´ÙÀ½°ú °°´Ù.

 

for (i=0;i<sizeof(IDs)/sizeof(IDs[0]);i++) {

     ....

}

 

IDs ¹è¿­ÀÇ ³¡±îÁö ·çÇÁ¸¦ µ¹±â À§ÇØ ¹è¿­ Å©±â¸¦ °è»êÇÏ°í Àִµ¥ IDs ¹è¿­ Àüü Å©±â¸¦ ù¹ø° ¹è¿­ ¿ä¼Ò Å©±â·Î ³ª´©¸é µÈ´Ù. CApiEdit::DisplayTab¿¡µµ ºñ½ÁÇÑ Äڵ尡 ÀÖ°í Config.cpp¿¡¼­ ÇÁ·ÎÆÛƼ ÆäÀÌÁö °³¼ö¸¦ ¼¿ ¶§µµ µ¿ÀÏÇÑ ¿¬»ê½ÄÀ» »ç¿ëÇÑ´Ù. ¾ÕÀ¸·Îµµ ÀÌ·± ¹è¿­ Å©±â °è»êÀÌ ¸¹ÀÌ »ç¿ëµÇ±â ¶§¹®¿¡ ¾Æ¿¹ Àü¿ª ¸ÅÅ©·Î·Î Á¤ÀÇÇØ µÎ¾ú´Ù. sizeof ¿¬»êÀÚ¸¦ µÎ ¹ø ¾²´Â °Íº¸´Ù´Â ARSIZE ¸ÅÅ©·Î¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ÈξÀ ´õ °£´ÜÇÏ°í Äڵ带 Àб⿡µµ Æí¸®ÇÏ´Ù.

´Ü, ÀÌ¹Ì sizeof ¿¬»êÀÚ¸¦ »ç¿ëÇÏ°í ÀÖ´Â ¼Ò½º´Â ½Ç½ÀÀÇ ÆíÀÇ»ó ±»ÀÌ ARSIZE·Î ¹Ù²ÙÁö ¾Ê±â·Î ÇÑ´Ù. ÀÌ ¸ÅÅ©·Î´Â ¾îµð±îÁö³ª ¼Ò½ºÀÇ °¡µ¶¼ºÀ» ³ôÀ̱â À§ÇØ ¸¸µç °ÍÀÏ »ÓÀÌÁö ¾îÂ÷ÇÇ Ä¡È¯µÇ¸é °á°ú´Â ¶È°°¾ÆÁö¹Ç·Î ±»ÀÌ ±âÁ¸ ¼Ò½º±îÁö ¹Ù²Ü ÇÊ¿ä´Â ¾ø´Ù. ¹°·Ð ÀÏ°ü¼ºÀ» À§Çؼ­´Â ÁÁÁö ¾ÊÁö¸¸ ÀÌ·± ġȯ ÀÛ¾÷Àº Â÷ÈÄ ¼Ò½º Á¤¸®¸¦ ÇÒ ¶§ Çصµ ´ÊÁö ¾Ê´Ù.

³ª.¸®¼Ò½º Áغñ

¹öÀü ¹øÈ£¸¦ ³ôÀÌ°í ARSIZE ¸ÅÅ©·Î¸¦ Á¤ÀÇÇÏ´Â °ÍÀ¸·Î ÀÌ Ã¥ÀÇ ½Ç½ÀÀÌ ½ÃÀ۵Ǵµ¥ ¿¹ºñ µ¿ÀÛÀ» Çϳª ´õ ÃëÇØ ³õµµ·Ï ÇÏÀÚ. 1±Ç¿¡¼­¿Í ¸¶Âù°¡Áö·Î ÀÌ Ã¥¿¡¼­µµ ¸®¼Ò½º´Â ½Ç½À ´ë»ó¿¡¼­ Á¦¿ÜÇÑ´Ù. ¸®¼Ò½º¿¡ Ưº°ÇÑ ³í¸®°¡ ¼û¾î ÀÖ´Â °ÍÀÌ ¾Æ´Ï¸ç ¶ÇÇÑ ½Ç½À °úÁ¤ÀÌ ¹ø°Å·Ó±â ¶§¹®¿¡ ¸®¼Ò½º ÀÛ¼º °úÁ¤±îÁö °°ÀÌ ½Ç½ÀÇÒ ÇÊ¿ä´Â ¾ø´Ù. µ¥ÀÌÅÍ µ¢¾î¸®¿¡ ºÒ°úÇϹǷΠÁ¦ÀÛÀÚ°¡ ¸¸µé¾î ³õÀº ÃÖÁ¾ ¸®¼Ò½º¸¦ »ç¿ëÇϱ⸸ ÇÏ¸é µÈ´Ù.

¹èÆ÷ CD-ROMÀÇ Dangeun13 µð·ºÅ丮¿¡¼­ ¸®¼Ò½º¸¦ º¹»çÇÏ¿© Áö±Ý ½Ç½ÀÁßÀÎ Dangeun13 µð·ºÅ丮¿¡ ºÙ¿© ³Ö´Â´Ù. Dangeun.rc¿Í resource.h´Â ¹°·ÐÀÌ°í res µð·ºÅ丮µµ Åë°·Î º¹»çÇØ¾ß ÇÑ´Ù. ´ç¿¬ÇÑ ¾ê±â°ÚÁö¸¸ º¹»çÇÒ ¶§´Â ÇÁ·ÎÁ§Æ®¸¦ Àá½Ã ´Ý¾Æ¾ß ÇÏ¸ç ¸®¼Ò½º¸¦ ±³Ã¼ÇÑ ÈÄ ÀçÄÄÆÄÀÏÀ» ÇÏ´Â °ÍÀÌ ÁÁ´Ù. ÀÌ ÆÄÀϵéÀ» º¹»çÇÔÀ¸·Î½á ´ç±Ù 1.2ÀÇ ¸®¼Ò½º ÀÛ¾÷Àº ¸ðµÎ ¿Ï·áµÇ´Â °ÍÀÌ´Ù. ¸®¼Ò½º ºä¿¡¼­ ¸Þ´º³ª ´ëÈ­»óÀÚ µîÀÇ ¸®¼Ò½º¸¦ »ìÆì º¸¸é ¾ÕÀ¸·Î ¾î¶² ±â´ÉÀÌ Ãß°¡µÇ´ÂÁö ÇÑ´«¿¡ ¾Ë ¼ö ÀÖ´Ù.

 

ÀÌ Ã¥ÀÇ ³¡±îÁö ½Ç½ÀÀÌ ÁøÇàµÇ´Âµ¿¾È ¸®¼Ò½º´Â °è¼Ó Àбâ Àü¿ëÀÌ´Ù. ½Ç½À¿¡ ÇÊ¿äÇÑ ¸ðµç ¸®¼Ò½º°¡ ÀÌ¹Ì ÀÛ¼ºµÇ¾î ÀÖÀ¸¹Ç·Î »ç¿ëÇϱ⸸ ÇÏ¸é µÈ´Ù. Ãß°¡µÈ ¸®¼Ò½º¿Ü¿¡ º¯°æµÈ ºÎºÐµµ ÀÖÁö¸¸ »èÁ¦µÈ °ÍÀº ¾øÀ¸¹Ç·Î ¸®¼Ò½º ±³Ã¼ ÈÄ ¹Ù·Î ÄÄÆÄÀÏÇصµ ¿¡·¯´Â ³ªÁö ¾Ê´Â´Ù. º°µµÀÇ ´ÜÃàÅ° °ËÃâ ¾Ë°í¸®ÁòÀ» »ç¿ëÇÒ °èȹÀ̹ǷΠ¾×¼¿·¯·¹ÀÌÅÍ´Â ÃÖÁ¾ ¹öÀü¿¡¼­ ÇÊ¿ä¾øÁö¸¸ ½Ç½À Áß°£ ÇÁ·ÎÁ§Æ®¿¡´Â °è¼Ó ÇÊ¿äÇϹǷΠÀÏ´Ü »èÁ¦ÇÏÁö´Â ¾Ê¾Ò´Ù.

¸®¼Ò½º¸¦ ¹Ì¸® ÀÛ¼ºÇØ ³õ¾Ò´Ù ÇÏ´õ¶óµµ »ç¿ëµÇÁö ¾ÊÀº ¸®¼Ò½º´Â ±×³É Á¸ÀçÇϱ⸸ ÇÒ »ÓÀ̹ǷΠÄÚµå±îÁö ¹Ì¸® ¼öÁ¤ÇÒ ÇÊ¿ä´Â ¾ø´Ù. ÇÏÁö¸¸ ¼öÁ¤µÈ ¸®¼Ò½º¿¡ ´ëÇؼ­´Â Äڵ忡¼­µµ ¾à°£ÀÇ Á¶Á¤ÀÌ ÇÊ¿äÇϹǷΠÀÌ ÀÛ¾÷À» ¸ÕÀú ÇØ ³õµµ·Ï ÇÏÀÚ. Åø¹Ù ¸®¼Ò½º°¡ ¼öÁ¤µÇ¾úÀ¸¹Ç·Î Åø¹ÙÀÇ À̹ÌÁö°¡ Á¦´ë·Î º¸À̵µ·Ï ToolBar.cppÀÇ CreateToolBar ÇÔ¼ö¸¦ ¼öÁ¤ÇÑ´Ù. ±»ÀÌ ÀÌ ÀÛ¾÷À» ¹Ì¸® ÇÏÁö ¾Ê¾Æµµ »ó°ü¾ø±â´Â ÇÏÁö¸¸ ¾îÂ÷ÇÇ ÇØ¾ß ÇÒ ÀÛ¾÷ÀÌ´Ù.

 

void CreateToolBar(BOOL bText, BOOL bBig)

{

     TBBUTTON ToolBtn[]={

          {0,IDM_FILE_NEW,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0,0},

          {1,IDM_FILE_OPEN,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0,1},

          {2,IDM_FILE_SAVE,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0,2},

          {4,0,0,TBSTYLE_SEP,0,0},

          {3,IDM_EDIT_CUT,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0,3},

          {4,IDM_EDIT_COPY,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0,4},

          {5,IDM_EDIT_PASTE,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0,5},

          {4,0,0,TBSTYLE_SEP,0,0},

        {6,IDM_EDIT_UNDO,TBSTATE_ENABLED,TBSTYLE_DROPDOWN,0,0,0,6},

        {7,IDM_EDIT_REDO,TBSTATE_ENABLED,TBSTYLE_DROPDOWN,0,0,0,7},

          {4,0,0,TBSTYLE_SEP,0,0},

          {8,IDM_VIEW_WORDWRAP,TBSTATE_ENABLED,TBSTYLE_CHECK,0,0,0,8},

        {9,IDM_VIEW_HEXA,TBSTATE_ENABLED,TBSTYLE_CHECK,0,0,0,9},

        {10,IDM_EDIT_COLUMN,TBSTATE_ENABLED,TBSTYLE_CHECK,0,0,0,10},

        {11,IDM_EDIT_COMMODE,TBSTATE_ENABLED,TBSTYLE_CHECK,0,0,0,11},

          {12,IDM_SEARCH_FIND,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0,12},

     };

    TCHAR *szToolText="»õÆÄÀÏ\0¿­±â\0ÀúÀå\0ÀÚ¸£±â\0º¹»ç\0ºÙÀ̱â\0Ãë¼Ò\0Àç½ÇÇà"

        "\0°³Çà\0Çí»çºä\0¿­¸ðµå\0¸í·É\0ã±â\0";

     int bx,by;

     UINT_PTR wID;

    

     if (hToolBar) {

          DestroyWindow(hToolBar);

     }

 

     if (bBig) {

          wID=IDB_TOOLBARBIG;

          bx=24;

          by=22;

     } else {

          wID=IDB_TOOLBAR;

          bx=16;

          by=15;

     }

 

     hToolBar=CreateToolbarEx(g_hFrameWnd, WS_CHILD | WS_VISIBLE

          | TBSTYLE_TOOLTIPS | TBSTYLE_FLAT ,

        99, 13, g_hInst, wID, ToolBtn, 16,

          bx,by,bx,by,sizeof(TBBUTTON));

 

     if (bText) {

          SendMessage(hToolBar,TB_ADDSTRING,NULL,(LPARAM)szToolText);

     }

     SendMessage(hToolBar,TB_AUTOSIZE,0,0);

    SendMessage(hToolBar,TB_SETEXTENDEDSTYLE,0,(LPARAM)TBSTYLE_EX_DRAWDDARROWS);

}

 

±â´ÉÀÌ ´Ã¾î³ª´Â¸¸Å­ Åø¹Ù¿¡µµ Çí»çºä¿Í ¿­¸ðµå, ¸í·É¸ðµå ¹öÆ°ÀÌ ¼¼ °³ ´õ »ý¼ºµÇ¾ú°í Ãë¼Ò, Àç½ÇÇà ¹öÆ°Àº µå·Ó ´Ù¿î ½ºÅ¸ÀÏ·Î º¯°æµÇ¾ú´Ù. Ãë¼Ò ¹öÆ°À» ´©¸£¸é ÃÖ±Ù ÆíÁý µ¿ÀÛÀ» º¸¿© ÁÖ°í ÇѲ¨¹ø¿¡ Ãë¼ÒÇÒ ¼ö ÀÖ°Ô ÇÒ °ÍÀÌ´Ù. ToolBtn ¹è¿­¿¡ Ãß°¡µÈ ¹öÆ°ÀÇ Á¤º¸¸¦ Ãß°¡·Î ÀÛ¼ºÇÏ°í szToolText¿¡µµ »õ·Î Ãß°¡µÈ ¹öÆ°ÀÇ ÅؽºÆ®¸¦ ÀÛ¼ºÇÏ¿´´Ù. Åø¹Ù ÀÚü¿¡´Â DRAWDDARROWS È®Àå ½ºÅ¸ÀÏÀ» ÁÖ¾î µå·Ó ´Ù¿î ¹öÆ°À» ´©¸£¸é ÅëÁö ¸Þ½ÃÁö¸¦ º¸³»µµ·Ï ÇÏ¿´´Ù. Åø¹ÙÀÇ ÅøÆÁÀ» Ãâ·ÂÇÏ´Â OnNotify ÇÔ¼ö¿¡µµ »õ·Î Ãß°¡µÈ ¹öÆ°ÀÇ ÅøÆÁÀ» ÀÛ¼ºÇÑ´Ù.

 

void OnNotify(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     ....

     switch (hdr->code) {

     case TTN_GETDISPINFO:

          switch (wParam) {

          ....

        case IDM_VIEW_HEXA:

           disp->lpszText="Çí»çºä(Ctrl+H)";

           break;

        case IDM_EDIT_COLUMN:

           disp->lpszText="¿­¸ðµå(Alt+C)";

           break;

        case IDM_EDIT_COMMODE:

           disp->lpszText="¸í·É¸ðµå(Alt+X)";

           break;

          case IDM_SEARCH_FIND:

              disp->lpszText="ã±â(Ctrl+F)";

              break;

          }

          break;

     }

}

 

Åø¹Ù ºñÆ®¸ÊÀÇ ¸®¼Ò½º°¡ ÀÌ¹Ì ÀÛ¼ºµÇ¾î ÀÖÀ¸¹Ç·Î ÀÌ »óÅ¿¡¼­ ÄÄÆÄÀÏÇØ º¸¸é »õ·Î Ãß°¡µÈ Åø ¹öÆ°ÀÌ ³ªÅ¸³¯ °ÍÀÌ´Ù.

¹°·Ð ¾ÆÁ÷ Ãß°¡µÈ ¹öÆ°¿¡ ´ëÇÑ Äڵ带 ÀÛ¼ºÇÏÁö ¾Ê¾Ò±â ¶§¹®¿¡ µ¿ÀÛÇÏÁö´Â ¾Ê´Â´Ù. °¢ ¹öÆ°ÀÇ ÄÚµå´Â °ü·Ã ±â´ÉÀ» ÀÛ¼ºÇÒ ¶§ ±¸ÇöÇÒ °ÍÀÌ´Ù.

´Ù.¼³Á¤ ÆäÀÌÁö Àç¹èÄ¡

ÆíÁý±âÀÇ ±â´ÉÀÌ ´ëÆø È®ÀåµÊÀ¸·Î½á »ç¿ëÀÚ°¡ ÁöÁ¤ÇÒ ¼ö ÀÖ´Â ¼³Á¤°ªµéµµ ¸¹ÀÌ ´Ã¾î³µÀ¸¸ç ±×·¡¼­ ±âº» ¼³Á¤ ´ëÈ­»óÀÚµµ ´Ã¾î³­ ¿É¼ÇÀº Æ÷ÇÔÇϱâ À§ÇØ ÆäÀÌÁö¸¦ ´õ ¸¹ÀÌ ¸¸µé¾î¾ß ÇÑ´Ù. ´ÙÀ½Àº 1.2ÀÇ ÃÖÁ¾ ¼³Á¤ ´ëÈ­»óÀÚÀÌ´Ù.

1.0¿¡¼­´Â ¿©¼¸ °³ÀÇ ÆäÀÌÁö°¡ ÀÖ¾ú´Âµ¥ ´Ù¼¸ °³°¡ ´õ ´Ã¾î¼­ 11°³°¡ µÇ¾ú´Ù. ¿ÏÀüÈ÷ »õ·Î Ãß°¡µÈ ¿É¼Çµµ ÀÖÁö¸¸ ±âÁ¸ÀÇ ¿É¼ÇµéÀÌ ´Ù¸¥ ÆäÀÌÁö·Î À̵¿Çϱ⵵ Çß´Ù. ÁÖ·Î º¸±â ÆäÀÌÁöÀÇ ¿É¼ÇµéÀÌ ¸¹ÀÌ À̵¿µÇ¾ú´Ù.

 

À̵¿µÈ ÆäÀÌÁö

¿É¼Ç

¸ð¾ç

¸¶Áø ¿µ¿ª Ç¥½Ã

ÁÙ¹øÈ£ º¸±â

°³Çà ÄÚµå Ç¥½Ã

°ø¹é ÄÚµå Ç¥½Ã

Åø¹Ù

Åø¹Ù¿¡ Å« ¾ÆÀÌÄÜ »ç¿ë

Åø¹Ù¿¡ ¼³¸í Ç¥½Ã

µ¿ÀÛ

»õ·Î ¿­¸®´Â âÀº ÀÚµ¿ °³Çà »óÅ·Π½ÃÀÛÇϱâ

»õ·Î ¿­¸®´Â âÀº ÇÑ±Û ÀÔ·Â »óÅ·Π½ÃÀÛÇϱâ

 

»õ·Î Ãß°¡µÈ ÆäÀÌÁöµéÀ» ÇÁ·ÎÆÛƼ ½ÃÆ®¿¡ Æ÷ÇÔ½ÃÅ°±â À§ÇØ Config ÇÔ¼ö¸¦ ¼öÁ¤ÇÑ´Ù.

 

void Config()

{

     PROPSHEETPAGE psp[11];

     PROPSHEETHEADER psh;

 

     NewOption=Option;

 

     psp[0].dwSize=sizeof(PROPSHEETPAGE);

     psp[0].dwFlags=PSP_DEFAULT;

     psp[0].hInstance=g_hInst;

     psp[0].pszTemplate=MAKEINTRESOURCE(IDD_GENERAL);

     psp[0].pfnDlgProc=(DLGPROC)GeneralDlgProc;

     psp[0].lParam=0;

 

     psp[1].dwSize=sizeof(PROPSHEETPAGE);

     psp[1].dwFlags=PSP_DEFAULT;

     psp[1].hInstance=g_hInst;

     psp[1].pszTemplate=MAKEINTRESOURCE(IDD_VIEW);

     psp[1].pfnDlgProc=(DLGPROC)ViewDlgProc;

     psp[1].lParam=0;

 

     psp[2].dwSize=sizeof(PROPSHEETPAGE);

     psp[2].dwFlags=PSP_DEFAULT;

     psp[2].hInstance=g_hInst;

     psp[2].pszTemplate=MAKEINTRESOURCE(IDD_SHAPE);

     psp[2].pfnDlgProc=(DLGPROC)ShapeDlgProc;

     psp[2].lParam=0;

 

     psp[3].dwSize=sizeof(PROPSHEETPAGE);

     psp[3].dwFlags=PSP_DEFAULT;

     psp[3].hInstance=g_hInst;

     psp[3].pszTemplate=MAKEINTRESOURCE(IDD_TOOLBAR);

     psp[3].pfnDlgProc=(DLGPROC)ToolBarDlgProc;

     psp[3].lParam=0;

 

     psp[4].dwSize=sizeof(PROPSHEETPAGE);

     psp[4].dwFlags=PSP_DEFAULT;

     psp[4].hInstance=g_hInst;

     psp[4].pszTemplate=MAKEINTRESOURCE(IDD_COLOR);

     psp[4].pfnDlgProc=(DLGPROC)ColorDlgProc;

     psp[4].lParam=0;

 

     psp[5].dwSize=sizeof(PROPSHEETPAGE);

     psp[5].dwFlags=PSP_DEFAULT;

     psp[5].hInstance=g_hInst;

     psp[5].pszTemplate=MAKEINTRESOURCE(IDD_EDIT);

     psp[5].pfnDlgProc=(DLGPROC)EditDlgProc;

     psp[5].lParam=0;

 

     psp[6].dwSize=sizeof(PROPSHEETPAGE);

     psp[6].dwFlags=PSP_DEFAULT;

     psp[6].hInstance=g_hInst;

     psp[6].pszTemplate=MAKEINTRESOURCE(IDD_SYNTAX);

     psp[6].pfnDlgProc=(DLGPROC)SyntaxDlgProc;

     psp[6].lParam=0;

 

     psp[7].dwSize=sizeof(PROPSHEETPAGE);

     psp[7].dwFlags=PSP_DEFAULT;

     psp[7].hInstance=g_hInst;

     psp[7].pszTemplate=MAKEINTRESOURCE(IDD_PRINT);

     psp[7].pfnDlgProc=(DLGPROC)PrintDlgProc;

     psp[7].lParam=0;

 

     psp[8].dwSize=sizeof(PROPSHEETPAGE);

     psp[8].dwFlags=PSP_DEFAULT;

     psp[8].hInstance=g_hInst;

     psp[8].pszTemplate=MAKEINTRESOURCE(IDD_FILE);

     psp[8].pfnDlgProc=(DLGPROC)FileDlgProc;

     psp[8].lParam=0;

 

     psp[9].dwSize=sizeof(PROPSHEETPAGE);

     psp[9].dwFlags=PSP_DEFAULT;

     psp[9].hInstance=g_hInst;

     psp[9].pszTemplate=MAKEINTRESOURCE(IDD_ASSOCIATE);

     psp[9].pfnDlgProc=(DLGPROC)AssociateDlgProc;

     psp[9].lParam=0;

 

     psp[10].dwSize=sizeof(PROPSHEETPAGE);

     psp[10].dwFlags=PSP_DEFAULT;

     psp[10].hInstance=g_hInst;

     psp[10].pszTemplate=MAKEINTRESOURCE(IDD_OPERATION);

     psp[10].pfnDlgProc=(DLGPROC)OperationDlgProc;

     psp[10].lParam=0;

 

     psh.dwSize=sizeof(PROPSHEETHEADER);

     psh.dwFlags=PSH_PROPSHEETPAGE | PSH_USECALLBACK;

     psh.hwndParent=g_hFrameWnd;

     psh.pszCaption="¼³Á¤";

     psh.nPages=sizeof(psp)/sizeof(psp[0]);

     psh.nStartPage=g_StartPage;

     psh.ppsp=(LPCPROPSHEETPAGE)&psp;

     psh.pfnCallback=ConfigProc;

 

     if (arFont==NULL) {

          DgEnumFonts();

     }

 

     InitSysColor();

     PropertySheet(&psh);

 

     return;

}

 

»õ·Î Ãß°¡µÈ ÆäÀÌÁö·Î ÀÎÇØ ±âÁ¸ ÆäÀÌÁöÀÇ ¼ø¼­¿¡µµ º¯È­°¡ »ý°å´Ù. Config.h¿¡´Â Ãß°¡µÈ ÆäÀÌÁöÀÇ ´ëÈ­»óÀÚ ÇÁ·Î½ÃÀú ¿øÇüÀ» ¼±¾ðÇÑ´Ù.

 

BOOL CALLBACK ShapeDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam);

BOOL CALLBACK ToolBarDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam);

BOOL CALLBACK FileDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam);

BOOL CALLBACK AssociateDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam);

BOOL CALLBACK OperationDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam);

 

°¢ ÆäÀÌÁöÀÇ ´ëÈ­»óÀÚ ÇÁ·Î½ÃÀúµµ ¹Ì¸® ÀÛ¼ºÇØ µÐ´Ù. ¸ð¾ç ÆäÀÌÁö¿¡¼­ ¸¶Áø º¸±â ÀÌÇÏ ´Ù¼¸ °³ÀÇ ¿É¼ÇÀ» ó¸®Çϸç Åø¹Ù ÆäÀÌÁö¿¡¼­´Â Åø¹Ù °ü·Ã ¿É¼Ç µÎ°¡Áö¸¦ ó¸®ÇÑ´Ù. µ¿ÀÛ ÆäÀÌÁö¿¡´Â ÀÚµ¿ °³Çà ¹× Çѱ۷Π½ÃÀÛ ¿É¼ÇÀ» ó¸®Çϸç ÆÄÀÏ, ¿¬°á ÆäÀÌÁö´Â ¿ÏÀüÈ÷ ºñ¾î ÀÖ´Ù. À̵¿ÇÑ ¿É¼Çµé ¿Ü¿¡´Â ²®µ¥±â¸¸ ¸¸µé¾î µÐ ¼ÀÀÌ´Ù.

 

BOOL CALLBACK ShapeDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     switch(iMessage) {

     case WM_INITDIALOG:

          return TRUE;

     case WM_COMMAND:

          switch (LOWORD(wParam)) {

          case IDC_MARGIN:

              AdjustDlgUI(2,hDlg);

          case IDC_LINENUM:

          case IDC_SHOWENTER:

          case IDC_SHOWTAB:

          case IDC_SHOWSPACE:

              PropSheet_Changed(GetParent(hDlg),hDlg);

              return TRUE;

          }

          break;

     case WM_NOTIFY:

          LPNMHDR hdr;

          hdr=(LPNMHDR)lParam;

          switch (hdr->code) {

          case PSN_SETACTIVE:

              g_StartPage=2;

              CheckDlgButton(hDlg,IDC_MARGIN,NewOption.bShowMargin);

              CheckDlgButton(hDlg,IDC_LINENUM,NewOption.bShowLineNum);

              CheckDlgButton(hDlg,IDC_SHOWENTER,NewOption.bShowEnter);

              CheckDlgButton(hDlg,IDC_SHOWTAB,NewOption.bShowTab);

              CheckDlgButton(hDlg,IDC_SHOWSPACE,NewOption.bShowSpace);

              AdjustDlgUI(2,hDlg);

              return TRUE;

          case PSN_APPLY:

              ApplyNow();

              return TRUE;

          case PSN_KILLACTIVE:

              NewOption.bShowMargin=IsDlgButtonChecked(hDlg,IDC_MARGIN);

              NewOption.bShowLineNum=IsDlgButtonChecked(hDlg,IDC_LINENUM);

              NewOption.bShowEnter=IsDlgButtonChecked(hDlg,IDC_SHOWENTER);

              NewOption.bShowTab=IsDlgButtonChecked(hDlg,IDC_SHOWTAB);

              NewOption.bShowSpace=IsDlgButtonChecked(hDlg,IDC_SHOWSPACE);

              return TRUE;

          }

          break;

     }

     return FALSE;

}

 

BOOL CALLBACK ToolBarDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     switch(iMessage) {

     case WM_INITDIALOG:

          return TRUE;

     case WM_COMMAND:

          switch (LOWORD(wParam)) {

          case IDC_TOOLBARBIG:

          case IDC_TOOLBARTEXT:

              PropSheet_Changed(GetParent(hDlg),hDlg);

              return TRUE;

          }

          break;

     case WM_NOTIFY:

          LPNMHDR hdr;

          hdr=(LPNMHDR)lParam;

          switch (hdr->code) {

          case PSN_SETACTIVE:

              g_StartPage=3;

              CheckDlgButton(hDlg,IDC_TOOLBARBIG,NewOption.bToolBarBig);

              CheckDlgButton(hDlg,IDC_TOOLBARTEXT,NewOption.bToolBarText);

              return TRUE;

          case PSN_APPLY:

              ApplyNow();

              return TRUE;

          case PSN_KILLACTIVE:

              NewOption.bToolBarBig=IsDlgButtonChecked(hDlg,IDC_TOOLBARBIG);

              NewOption.bToolBarText=IsDlgButtonChecked(hDlg,IDC_TOOLBARTEXT);

              return TRUE;

          }

          break;

     }

     return FALSE;

}

 

BOOL CALLBACK FileDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     switch(iMessage) {

     case WM_INITDIALOG:

          return TRUE;

     case WM_COMMAND:

          return TRUE;

     case WM_NOTIFY:

          LPNMHDR hdr;

          hdr=(LPNMHDR)lParam;

          switch (hdr->code) {

          case PSN_SETACTIVE:

              g_StartPage=8;

              return TRUE;

          case PSN_APPLY:

              ApplyNow();

              return TRUE;

          case PSN_KILLACTIVE:

              return TRUE;

          }

          break;

     }

     return FALSE;

}

 

BOOL CALLBACK AssociateDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     switch(iMessage) {

     case WM_INITDIALOG:

          return TRUE;

     case WM_COMMAND:

          return TRUE;

     case WM_NOTIFY:

          LPNMHDR hdr;

          hdr=(LPNMHDR)lParam;

          switch (hdr->code) {

          case PSN_SETACTIVE:

              g_StartPage=9;

              return TRUE;

          case PSN_APPLY:

              ApplyNow();

              return TRUE;

          case PSN_KILLACTIVE:

              return TRUE;

          }

          break;

     }

     return FALSE;

}

 

BOOL CALLBACK OperationDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     switch(iMessage) {

     case WM_INITDIALOG:

          return TRUE;

     case WM_COMMAND:

          switch (LOWORD(wParam))   {

          case IDC_WORDWRAP:

          case IDC_HANGUL:

              PropSheet_Changed(GetParent(hDlg),hDlg);

              break;

          }

          return TRUE;

     case WM_NOTIFY:

          LPNMHDR hdr;

          hdr=(LPNMHDR)lParam;

          switch (hdr->code) {

          case PSN_SETACTIVE:

              g_StartPage=10;

              CheckDlgButton(hDlg,IDC_WORDWRAP,NewOption.bWrap);

              CheckDlgButton(hDlg,IDC_HANGUL,NewOption.Hangul);

              return TRUE;

          case PSN_APPLY:

              ApplyNow();

              return TRUE;

          case PSN_KILLACTIVE:

              NewOption.bWrap=IsDlgButtonChecked(hDlg,IDC_WORDWRAP);

              NewOption.Hangul=IsDlgButtonChecked(hDlg,IDC_HANGUL);

              return TRUE;

          }

          break;

     }

     return FALSE;

}

 

º¸±â ÆäÀÌÁö¿¡ ÀÖ´ø ¿É¼ÇµéÀÌ °¢°¢ÀÇ ÆäÀÌÁö·Î À̻簬À¸¹Ç·Î º¸±â ÆäÀÌÁöÀÎ ViewDlgProc¿¡´Â À̻簣 ¿É¼Çµé¿¡ ´ëÇÑ Äڵ带 Á¦°ÅÇØ¾ß ÇÑ´Ù. ´ÙÀ½ 9°³ ÄÁÆ®·ÑÀÇ °ü·Ã Äڵ带 WM_COMMAND, PSN_SETACTIVE, PSN_KILLACTIVE¿¡¼­ »èÁ¦ÇÑ´Ù.

 

IDC_MARGIN

IDC_LINENUM

IDC_WORDWRAP

IDC_HANGUL

IDC_SHOWENTER

IDC_SHOWTAB

IDC_SHOWSPACE

IDC_TOOLBARBIG

IDC_TOOLBARTEXT

 

»ö»ó ÆäÀÌÁö ÀÌÀü¿¡ ¸ð¾ç, Åø¹Ù ÆäÀÌÁö°¡ »ðÀԵǾúÀ¸¹Ç·Î »ö»ó, ÆíÁý, ¹®¹ý, Àμâ ÆäÀÌÁöÀÇ PSN_SETACTIVE¿¡ ÀÖ´Â g_StartPage¸¦ °¢°¢ 2¾¿ ´õÇØ¾ß ÇÑ´Ù. 2, 3, 4, 5 ÆäÀÌÁö¿´´ø °ÍÀ» 4, 5, 6, 7·Î º¯°æÇÑ´Ù. AdjustDlgUI ÇÔ¼öÀÇ ÆäÀÌÁö ¹øÈ£µµ ¼öÁ¤ÇÑ´Ù.

 

void AdjustDlgUI(int Page,HWND hDlg)

{

     switch (Page) {

     case 0:

          if (IsDlgButtonChecked(hDlg,IDC_WATCHCHANGE) == BST_CHECKED) {

              EnableWindow(GetDlgItem(hDlg,IDC_RELOADNOASK),TRUE);

          } else {

              EnableWindow(GetDlgItem(hDlg,IDC_RELOADNOASK),FALSE);

          }

          break;

     case 1:

          if (SendDlgItemMessage(hDlg,IDC_FONTFACE,CB_GETCURSEL,0,0)==0) {

              EnableWindow(GetDlgItem(hDlg,IDC_FONTSIZE),FALSE);

          } else {

              EnableWindow(GetDlgItem(hDlg,IDC_FONTSIZE),TRUE);

          }

        break;

    case 2:

          if (IsDlgButtonChecked(hDlg,IDC_MARGIN) == BST_CHECKED) {

              EnableWindow(GetDlgItem(hDlg,IDC_LINENUM),TRUE);

          } else {

              EnableWindow(GetDlgItem(hDlg,IDC_LINENUM),FALSE);

          }

          break;

    case 7:

          if (IsDlgButtonChecked(hDlg,IDC_PRTFONTSCREEN) == BST_CHECKED) {

          ....

 

¸¶Áø º¸±â ¿É¼ÇÀÌ 2¹ø ÆäÀÌÁö·Î À̻縦 °¬À¸¹Ç·Î case 1:ÀÇ Áß°£À» break·Î ÀÚ¸£°í case 2:À» Ãß°¡ÇÑ´Ù. Àμ⠴ëÈ­»óÀÚ´Â 5¹ø¿¡¼­ 7¹øÀ¸·Î ¹øÈ£°¡ º¯°æµÇ¾úÀ¸¹Ç·Î caseÀÇ »ó¼ö¸¸ º¯°æÇÏ¸é µÈ´Ù. °¢ ÆäÀÌÁö¿¡¼­ ÀÌ ÇÔ¼ö¸¦ ºÎ¸£´Â °÷µµ ¼öÁ¤µÇ¾î¾ß Çϴµ¥ PrintDlgProc¸¸ ¼öÁ¤ÇÏ¸é µÈ´Ù. AdjustDlgUI(5,hDlg);¸¦ AdjustDlgUI(7,hDlg);·Î¸¸ ¼öÁ¤Ç쵂 ¼¼ ±ºµ¥ ¸ðµÎ ¼öÁ¤ÇØ¾ß ÇÑ´Ù. ±âÁ¸ ¿¹Á¦¸¦ ¶â¾î °íÄ¡´Ù º¸´Ï Á¤¸» ÀܼÕÀÌ ¸¹ÀÌ °£´Ù. ÀÌ ÀÛ¾÷À» Á÷Á¢ ÇÑ´Ù¸é »ç½Ç ¹«Ã´ °£´ÜÇѵ¥ Áö¸éÀÇ ¼³¸í´ë·Î ¶È°°ÀÌ µû¶óÇϱâ´Â ¹«Ã´ ÇÇ°ïÇÑ ÀÛ¾÷ÀÌ´Ù.

¶ó.¿À³Ê µå·Î¿ì ¿É¼Ç

¿©±â±îÁö ÀÛ¾÷ÇÑ ÈÄ ½ÇÇàÇØ º¸¸é »õ·Î Ãß°¡µÈ ¿É¼Ç¿¡ ´ëÇؼ­´Â ¾ÆÁ÷ Äڵ尡 ÀÛ¼ºµÇÁö ¾Ê¾ÒÀ¸¹Ç·Î ÄÁÆ®·ÑÀÌ ¾Æ¹« ¹ÝÀÀÀ» º¸ÀÌÁö ¾ÊÁö¸¸ 1.0¿¡ ¸¸µé¾îÁ® ÀÖ´ø ¿É¼ÇµéÀº Á¦´ë·Î Á¶Á¤µÉ °ÍÀÌ´Ù. ±×·±µ¥ º¸±â ÆäÀÌÁö¿¡ ÀÖ´Â ºñÈ°¼ºÈ­½Ã ¼±Åÿµ¿ª°ú ÇöÀçÇà °­Á¶ ÄÞº¸ ¹Ú½º°¡ Á¦´ë·Î µ¿ÀÛÇÏÁö ¾Ê´Âµ¥ ÀÌ ÄÞº¸ÀÇ ½ºÅ¸ÀÏÀÌ ¿À³Ê µå·Î¿ì·Î º¯°æµÇ¾ú±â ¶§¹®ÀÌ´Ù. ±×·¡¼­ Äڵ忡¼­ Á÷Á¢ ÀÌ ¿É¼ÇÀ» ±×·Á¾ß ÇÑ´Ù. ºñÆ®¸Ê Ãâ·ÂÀ» À§ÇØ ´ÙÀ½ ÇÔ¼ö¸¦ Util.cpp¿¡ Ãß°¡ÇÑ´Ù.

 

void DrawBitmapById(HDC hdc,int x,int y,UINT bitid)

{

     HDC MemDC;

     HBITMAP hBit,OldBitmap;

     int bx,by;

     BITMAP bit;

 

     hBit=LoadBitmap(g_hInst,MAKEINTRESOURCE(bitid));

     MemDC=CreateCompatibleDC(hdc);

     OldBitmap=(HBITMAP)SelectObject(MemDC, hBit);

 

     GetObject(hBit,sizeof(BITMAP),&bit);

     bx=bit.bmWidth;

     by=bit.bmHeight;

 

     BitBlt(hdc,x,y,bx,by,MemDC,0,0,SRCCOPY);

 

     SelectObject(MemDC,OldBitmap);

     DeleteDC(MemDC);

     DeleteObject(hBit);

}

 

ºñÆ®¸ÊÀÇ ¸®¼Ò½º ID¸¦ ÁÖ¸é ÀÌ ºñÆ®¸ÊÀ» Àоî ÁöÁ¤ÇÑ À§Ä¡¿¡ Ãâ·ÂÇÑ´Ù. ¸Þ¸ð¸® DC¸¦ »ý¼ºÇÏ°í ¼±ÅÃ, Å©±â °è»ê, Ãâ·Â, ÇØÁ¦ µîÀ» Á÷Á¢ ÇÏÀÚ¸é ¹ø°Å·Ó±â ¶§¹®¿¡ µû·Î ÇÔ¼ö¸¦ ¸¸µé¾ú´Ù. ÇÔ¼ö ³»ºÎ¿¡¼­ LoadBitmapÀ̶ó´Â ´À¸° ÇÔ¼ö¸¦ È£ÃâÇÏ´Â °ÍÀº º°·Î ÁÁÁö ¾ÊÁö¸¸ ¿À³Ê µå·Î¿ì¿¡ ¾²´Â ºñÆ®¸ÊÀº À۱⠶§¹®¿¡ ¼º´É»óÀÇ ºÒÀÌÀÍÀº ¸¹Áö ¾Ê´Ù. ÇÊ¿äÇÏ´Ù¸é ¹Ì¸® Àоî³õÀº ºñÆ®¸ÊÀ» Ãâ·ÂÇÏ´Â ÇÔ¼ö¸¦ ÀÛ¼ºÇÒ ¼öµµ ÀÖ´Ù. º¸±â ÆäÀÌÁö¿¡¼­ ÄÞº¸ ¹Ú½º¿¡ ¿É¼ÇÀÇ Àǹ̸¦ Àß ¼³¸íÇÒ ¼ö ÀÖ´Â ºñÆ®¸ÊÀ» Ãâ·ÂÇÑ´Ù. ¹°·Ð ºñÆ®¸Ê ¸®¼Ò½º´Â ÀÌ¹Ì ÀÛ¼ºµÇ¾î ÀÖ´Ù.

 

BOOL CALLBACK ViewDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     HWND hCon;

     int i,idx;

     int tint;

     TCHAR szFace[32];

    LPMEASUREITEMSTRUCT lpmis;

    LPDRAWITEMSTRUCT lpdis;

    RECT rt;

    HBRUSH hBrush,OldBrush;

 

     switch(iMessage) {

     case WM_INITDIALOG:

          ....

     case WM_MEASUREITEM:

          lpmis=(LPMEASUREITEMSTRUCT)lParam;

          if (wParam==IDC_SEL) {

              lpmis->itemHeight=14;

          } else {

              lpmis->itemHeight=17;

          }

          return TRUE;

     case WM_DRAWITEM:

          lpdis=(LPDRAWITEMSTRUCT)lParam;

          rt=lpdis->rcItem;

          if (lpdis->itemState & ODS_SELECTED) {

              hBrush=CreateSolidBrush(RGB(0,0,255));

              OldBrush=(HBRUSH)SelectObject(lpdis->hDC,hBrush);

              Ellipse(lpdis->hDC,rt.left+1,rt.top+2,rt.left+12,rt.top+13);

              DeleteObject(SelectObject(lpdis->hDC,OldBrush));

          } else {

              FillRect(lpdis->hDC,&rt,GetSysColorBrush(COLOR_WINDOW));

          }

          if (wParam==IDC_SEL) {

              DrawBitmapById(lpdis->hDC,rt.left+15,rt.top+1,IDB_SEL1+lpdis->itemID);

          } else {

              DrawBitmapById(lpdis->hDC,rt.left+15,rt.top+1,IDB_CURLINE1+lpdis->itemID);

          }

          return TRUE;

 

ºñÈ°¼ºÈ­½Ã ¼±Åà ¿µ¿ª Ç¥½Ã ¿É¼ÇÀº ³ôÀÌ 14·Î ÁöÁ¤ÇßÀ¸¸ç ÇöÀçÇà Ç¥½Ã´Â ³ôÀ̸¦ 17·Î ÁöÁ¤Çß´Ù. WM_DRAWITEM¿¡¼­´Â ¼±ÅÃµÈ ¿É¼ÇÀÏ ¶§ ¿·¿¡ ÆĶõ»öÀÇ Å¸¿øÀ» ±×¸®°í ºñÆ®¸ÊÀ» Ãâ·ÂÇ쵂 ÄÞº¸ ¹Ú½º¿¡ µî·ÏµÈ ¼ø¼­´ë·Î ºñÆ®¸Ê ID¸¦ ¼³Á¤ÇØ µÎ¾úÀ¸¹Ç·Î ¼±µÎ ºñÆ®¸Ê¿¡ Ç׸ñ ID¸¦ ´õÇØ Ãâ·ÂÇÏ¸é µÈ´Ù. µÎ °³ÀÇ ¿É¼ÇÀÌ ºñÆ®¸ÊÀ¸·Î ±×·ÁÁüÀ¸·Î½á ¿É¼ÇÀÇ Àǹ̸¦ Á» ´õ ½±°Ô ÆľÇÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

 

»ö»ó ¼³Á¤ ´ëÈ­»óÀÚÀÇ ÄÞº¸ ¹Ú½º ³ôÀ̸¦ 18Çȼ¿·Î ´Ã¸°´Ù.

 

BOOL CALLBACK ColorDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     ....

     case WM_MEASUREITEM:

          lpmis=(LPMEASUREITEMSTRUCT)lParam;

        lpmis->itemHeight=18;

          return TRUE;

        break;

 

¿ø·¡ 16Çȼ¿À̾úÀ¸³ª ½Ã½ºÅÛ ±Û²ÃÀÌ È®´ëµÇ¸é ÀϺΠ¹®ÀÚ¿­ÀÌ º¸ÀÌÁö ¾Ê´Â ¹®Á¦°¡ ÀÖ¾î ±Û²ÃÀÌ Á¶±Ý Ä¿Áö´õ¶óµµ º¸ÀÏ ¼ö ÀÖµµ·Ï ¿©À¯ºÐÀ» µÎ¾ú´Ù. »ö»ó ¼³Á¤ ´ëÈ­»óÀÚÀÇ WM_MEASURITEM, WM_DRAWITEM ¸Þ½ÃÁöÀÇ ³¡ºÎºÐ¿¡ ¹«ÀǹÌÇÑ break¹®ÀÌ Àִµ¥ »èÁ¦ÇØ ¹ö¸®ÀÚ.

¸¶.¸Þ´º ¸í·É °ü¸®

¸Þ´º¿¡µµ ¸¹Àº ¸í·ÉÀÌ Ãß°¡µÇ¾ú´Ù. ¹°·Ð ÄÚµå´Â ¾ÆÁ÷ ÀÛ¼ºµÇÁö ¾Ê¾ÒÀ¸¸ç ½Ç½ÀÀ» ÁøÇàÇÏ´Â Áß¿¡ Çϳª µÑ¾¿ ä¿ö ³ª°¥ °ÍÀÌ´Ù. ¸Þ´º ¸í·Éµé Áß¿¡ È°¼ºÃ¢À» ÇÊ¿ä·Î ÇÏ´Â ¸Þ´º Ç׸ñ¿¡ ´ëÇÑ ¿¡·¯ 󸮴 TestNeedActive¶ó´Â º°µµÀÇ ÇÔ¼ö°¡ ´ã´çÇϹǷΠÀÌ ÇÔ¼ö¿¡ ¸Þ´ºÀÇ ¸ñ·ÏÀ» ¹Ì¸® ÀÛ¼ºÇØ ³õÀÚ.

 

BOOL TestNeedActive(WORD ID)

{

     static WORD IDs[]={ IDM_FILE_NEW,IDM_FILE_OPEN,IDM_FILE_EXIT,IDM_FILE_PROJECT,

          IDM_FILE_FTPOPEN, IDM_FILE_HTTPOPEN, IDM_VIEW_OUTPUT,

          IDM_VIEW_TOOLBAR,IDM_VIEW_STATUS,IDM_VIEW_FILE,IDM_VIEW_FILETAB,

          IDM_VIEW_CLIP, IDM_SEARCH_FILES,IDM_SEARCH_RFILES,IDM_TOOL_CONFIG,

          IDM_TOOL_UNINSTALL,IDM_TOOL_MACRO,IDM_TOOL_SHORTCUT,IDM_TOOL_CLIP,

          IDM_HELP_ABOUT,IDM_HELP_INDEX,IDM_HELP_HOME };

 

È°¼ºÃ¢ÀÌ ¾ø¾îµµ ½ÇÇàÇÒ ¼ö ÀÖ´Â ¸í·ÉÀÌ ¸î°¡Áö ´õ Ãß°¡µÇ¾ú´Ù. ¸¶Áö¸·À¸·Î ÀÏ°ýÀûÀÎ ÇÁ·ÎÁ§Æ® °ü¸®¸¦ À§ÇØ ¾ÕÀ¸·Î Ãß°¡ÇÒ ¸ðµâÀ» ¹Ì¸® ¸¸µé¾î ÇÁ·ÎÁ§Æ®¿¡ Æ÷ÇÔÇÑ´Ù. Çì´õ ÆÄÀÏ°ú ±¸Çö ÆÄÀÏ °¢°¢ Çϳª¾¿ ´Ù¼¸ °³ÀÇ ¸ðµâÀ» Ãß°¡ÇÑ´Ù.

 

ApiEditText.h, ApiEditText.cpp

ApiEditHexa.h, ApiEditHexa.cpp

Macro.h, Macro.cpp

ShortCut.h, ShortCut.cpp

Clip.h, Clip.cpp

 

°¢ Çì´õ ÆÄÀÏ¿¡´Â ´ÙÀ½°ú °°ÀÌ Áߺ¹ Æ÷ÇÔ ¹æÁö¸¦ À§ÇÑ Á¶°ÇºÎ ÄÄÆÄÀϹ®À» ½á ³Ö´Â´Ù. ¹°·Ð ¸ÅÅ©·Î¸íÀº ÇØ´ç ¸ðµâ¸íÀ¸·Î ÀÛ¼ºÇØ¾ß ÇÑ´Ù.

 

#ifndef __MACRO_H

#define __MACRO_H

 

#endif // __MACRO_H

 

°¢ ±¸Çö ÆÄÀÏ¿¡´Â #include "stdafx.h"¸¸ ½á ³Ö´Â´Ù. ¾ÆÁ÷Àº Äڵ带 °¡ÁöÁö ¾ÊÀ¸¸ç °ü·Ã Àå¿¡¼­ Çϳª¾¿ Äڵ带 ÀÛ¼ºÇØ ³ÖÀ» °ÍÀÌ´Ù. stdafx.h¿¡´Â »õ·Î Ãß°¡ÇÑ ¸ðµâµéÀÇ Çì´õ ÆÄÀÏÀ» Æ÷ÇÔÇÑ´Ù.

 

#include "ApiEdit.h"

#include "ApiEditText.h"

#include "ApiEditHexa.h"

....

#include "Macro.h"

#include "ShortCut.h"

#include "Clip.h"

#include "global.h"

 

°¢ ¸ðµâÀÌ Á¤ÀÇÇϴ ŸÀÔÀ̳ª º¯¼ö°¡ Àü¿ªÀÌ µÇ¾î¾ß ÇÒ °æ¿ì°¡ ÀÖÀ¸¹Ç·Î ¸ðµç Çì´õ ÆÄÀÏÀº global.hº¸´Ù´Â ´õ ¾Õ¿¡ Æ÷ÇԵǾî¾ß ÇÑ´Ù. ApiEdit.cpp ¿¡µµ ºñ·Ï ÁÖ¼®ÀÌÁö¸¸ µ¶¸³¼ºÀ» ³ôÀ̱â À§ÇØ ´ÙÀ½ include¹®ÀÌ ÇÊ¿äÇÏ´Ù. ÇÊ¿äÇÑ Çì´õ ÆÄÀÏ ¸ñ·ÏÀ» Á¤¸®ÇØ ³õ¾Æ¾ß ¹Ì¸® ÄÄÆÄÀÏµÈ Çì´õ¸¦ ¾²Áö ¾Ê´Â ÇÁ·ÎÁ§Æ®¿¡µµ ½±°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù.

 

//#include "ApiEdit.h"

//#include "ApiEditText.h"

//#include "ApiEditHexa.h"

#include "stdafx.h"

 

Parse.cpp´Â ±âº» ºä¿¡ ´ëÇؼ­¸¸ µ¿ÀÛÇϹǷΠ±âº» ºäÀÇ Å¸ÀÔ¸¸ ¾Ë°í ÀÖÀ¸¸é µÈ´Ù.

 

//#include "ApiEditText.h"

#include "stdafx.h"

 

ÇÁ·ÎÁ§Æ® ¼³Á¤ ´ëÈ­»óÀÚ¿¡¼­ »õ·Î Ãß°¡ÇÑ ¸ðµâ¿¡ ´ëÇؼ­µµ ¹Ì¸® ÄÄÆÄÀÏµÈ ¿É¼ÇÀ» Àû¿ëÇÑ´Ù. ¸Å¹ø ¸ðµâÀ» ¸¸µé ¶§¸¶´Ù ÇÁ·ÎÁ§Æ® ¼³Á¤À» Á¶Á¤Çϱ⠹ø°Å·Ó±â ¶§¹®¿¡ º»°ÝÀûÀÎ ½Ç½ÀÀ» ½ÃÀÛÇϱâ Àü¿¡ ¹Ì¸® ¸ðµâÀ» ´Ù ¸¸µé¾î ³õ´Â °ÍÀÌ´Ù.

 

¿©±â±îÁö ÀÛ¾÷ÇÏ¸é ½Ç½À Áغñ°¡ ³¡³­´Ù. ÄÄÆÄÀÏÇØ º¸°í º°´Ù¸¥ ¿¡·¯¾øÀÌ ±ò²ûÇÏ°Ô Àß ÄÄÆÄÀϵǴÂÁö Å×½ºÆ®ÇØ º¸ÀÚ. ¸¸¾à ¿¡·¯°¡ ¹ß»ýÇß´Ù¸é ÇÊ¿äÇÑ Ã³¸®¸¦ ´©¶ôÇ߰ųª ¿ÀŸÀÏ È®·üÀÌ ³ôÀ¸¹Ç·Î ¾ÕÂÊÀ¸·Î µ¹¾Æ°¡ õõÈ÷ ´Ù½Ã ½Ç½ÀÇØ º¸ÀÚ. ¸î°¡Áö ¹ö±×¸¦ ¼öÁ¤Çϱâ´Â ÇßÁö¸¸ ¾ÆÁ÷ ±â´ÉÀÌ Ãß°¡µÈ °ÍÀº ¾øÀ¸¹Ç·Î 1.0¿¡ ºñÇؼ­ °³¼±µÈ Á¡ÀÌ °ÅÀÇ ¾ø´Â ¼ÀÀÌÁö¸¸ ´ÙÀ½ ÀåºÎÅÍ Æí¾ÈÇÑ ½Ç½ÀÀ» ÇÒ Áغñ´Â ´Ù µÈ °ÍÀÌ´Ù.

Dangeun12 ÇÁ·ÎÁ§Æ®ÀÇ »çº»À¸·ÎºÎÅÍ ½ÃÀÛÇÏ¿© ½Ç½À Áغñ¸¸ Çߴµ¥ ±âÁ¸ ÇÁ·ÎÁ§Æ®¸¦ ¶â¾î °íÃÄ »õ·Î¿î ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé´Ù º¸´Ï ¹ø°Å·Ó±âµµ ÇÏ°í Á÷Á¢ ÇÏ·Á¸é ¾îµð¸¦ ¾î¶»°Ô °íÃÄ¾ß ÇÒÁö ¸·¸·Çϱ⸸ ÇÒ °ÍÀÌ´Ù. »Ó¸¸ ¾Æ´Ï¶ó ½Ã°£µµ ¸¹ÀÌ ¼Ò¸ðµÇ¹Ç·Î ¹Ù»Û »ç¶÷µéÀº ÀÌ ½Ç½ÀÀ» »ý·«ÇÏ°í Dangeun13 ÇÁ·ÎÁ§Æ®¸¦ ½ÃÀÛÁ¡À¸·Î È°¿ëÇϱ⠹ٶõ´Ù. ´ÙÀ½ Àå ºÎÅÍ ´ç±Ù 1.2 ÇÁ·ÎÁ§Æ®¸¦ º»°ÝÀûÀ¸·Î Á¦ÀÛÇÒ °ÍÀÌ´Ù.