1.ÇÁ·¹ÀÓ/ºä ±¸Á¶

°¡.ºÐÇÒÀÇ Çʿ伺

Áö±Ý±îÁö ApiEdit ÄÁÆ®·ÑÀº CApiEdit Ŭ·¡½º ´Ü Çϳª·Î Ç¥ÇöµÇ¸ç CApiEdit ÀÇ ÀνºÅϽº Çϳª¸¦ »ý¼ºÇÏ¸é °ð ÄÁÆ®·ÑÀ» ¸¸µå´Â °ÍÀ̾ú´Ù. °´Ã¼¸¦ ¼±¾ðÇϰí Create ¸â¹ö ÇÔ¼ö¸¸ ºÎ¸£¸é ¹Ù·Î ¾µ ¼ö ÀÖÀ¸¸ç Æ÷ÀÎÅ͸¦ »ç¿ëÇÒ °æ¿ì new ¿¬»êÀÚ·Î µ¿Àû »ý¼ºÇÏ¿© Create¸¦ È£ÃâÇÏ°í ½ÇÄÆ »ç¿ëÇÑ ÈÄ deleteÇÏ¸é µÈ´Ù. ¸ðµç ÃʱâÈ­, Á¾·á ó¸® ¹× ºÐ¼®±â °ü¸® µîÀ» »ý¼ºÀÚ¿Í ÆÄ±«ÀÚ, OnCreate, OnDestroy µî¿¡¼­ ÀÚµ¿À¸·Î ¼öÇàÇϹǷΠȣ½ºÆ®°¡ º°·Î ½Å°æ¾µ °ÍÀÌ ¾ø´Ù. ¿ÜºÎ ÀÎÅÍÆäÀ̽º°¡ ÀÌ·¸°Ô °£´ÜÇϱ⠶§¹®¿¡ ÄÁÆ®·Ñ »ç¿ëÀÚ°¡ ApiEdit ÄÁÆ®·ÑÀ» Ȱ¿ëÇϱ⠽±°í ³»ºÎÀûÀÎ ÀÚ¿ø °ü¸®µµ ´Ü¼øÇÑ ÆíÀÌ´Ù.

±×·¯³ª ÀÌ·± ´Ü¼øÇÔÀ¸·Î ÀÎÇØ ±â´É»óÀÇ Á¦¾àÀÌ ÀÖ°í È®Àå¿¡µµ ºÒ¸®ÇÏ´Ù. ±×·¡¼­ Åë°·Î µÇ¾î ÀÖ´Â CApiEdit °´Ã¼¸¦ Àü¹® ±â´ÉÀ» ´ã´çÇÏ´Â ¸î°³ÀÇ ÀÛÀº °´Ã¼·Î ºÐÇÒÇÒ °ÍÀÌ´Ù. °´Ã¼¸¦ Á» ´õ ÀÛÀº ºÎǰÀ¸·Î ºÐÇÒÇÏ¸é ¸î°¡Áö ÀÌÁ¡ÀÌ »ý±â´Âµ¥ ´ç±Ù 1.0¿¡ ºÐÇÒµÈ ÁÁÀº ¿¹°¡ ÀÌ¹Ì ÀÖ´Ù. ±¸¹® ºÐ¼®À» ÇÏ´Â CParse¿Í ±× ÆÄ»ý Ŭ·¡½º(CParseCpp, CParseHtml,...)µéÀÌ ÁÁÀº ¿¹Àε¥ ÀÌ·± ºÐ¼®±âµéÀº CApiEdit¿¡ ÅëÇյǾî ÀÖÁö ¾Ê°í º°µµÀÇ °´Ã¼·Î ÀÛ¼ºµÇ¾î ÀÖ´Ù. ±×·¡¼­ Á¶°Ç¿¡ µû¶ó ºÐ¼®±â¸¦ ¹Ù²ã °¡¸ç »ç¿ëÇÒ ¼ö ÀÖ¾î ±â´É¸é¿¡¼­ ÁÁ°í »õ·Î¿î ºÐ¼®±â¸¦ Ãß°¡ÇÏ´Â È®À强µµ ÁÁ´Ù.

ApiEdit´Â CParseÀÇ Æ÷ÀÎÅÍ Parser¸¸ °¡Áö¸ç ±¸¹® ºÐ¼®À» ÇÒ Çʿ䰡 ÀÖÀ» ¶§ ÀÌ °´Ã¼¿¡°Ô ¸ðµç ÀÛ¾÷À» À§ÀÓÇÏ°í ±× °á°ú¸¸À» ÃëÇÑ´Ù. »ç½Ç ApiEdit´Â °¢ ±¸¹®ÀÌ ¾î¶² Àǹ̸¦ °¡Áö´ÂÁö, ¾î¶² ½ÄÀ¸·Î ±¸¹® ºÐ¼®À» ÇÒ Áö ÀüÇô ¾ËÁö ¸øÇÏÁö¸¸ ºÐ¼®±âµéÀÇ µµ¿òÀ» ¹Þ¾Æ ¹®¹ý °­Á¶ ±â´ÉÀ» ÈǸ¢ÇÏ°Ô Á¦°øÇÑ´Ù. ÀÌ·± ±¸Á¶¸¦ ¸¸µé¸é À¯Áö, º¸¼ö, È®Àå¿¡ À¯¸®ÇÏ´Ù´Â °ÍÀ» ÀÌ¹Ì °æÇèÇØ º¸¾Ò´Âµ¥ ±¸¹® ºÐ¼®¿¡ ¹ö±×°¡ ÀÖÀ» °æ¿ì ºÐ¼®±â¸¸ µð¹ö±ëÇÏ¸é µÇ°í Ãß°¡ ºÐ¼®±â°¡ ÇÊ¿äÇϸé CParseÀÇ ÆÄ»ý Ŭ·¡½º¸¸ ´Ã¸®¸é µÈ´Ù.

°´Ã¼ ºÐÇÒÀÇ ´õ ¸¹Àº ÀÌÁ¡À» ¾ò±â À§ÇØ ¿©±â¼­´Â CApiEdit Ŭ·¡½º¸¦ ´õ Àß°Ô ºÐÇÒÇÒ °ÍÀÌ´Ù. ºÐÇÒÀ» ÇÏ´Â ÀÌÀ¯´Â ¿©·¯ °¡Áö ÀÌÀ¯°¡ ÀÖ°ÚÁö¸¸ ÁÖ·Î ´ÙÀ½ µÎ°¡Áö ±â´ÉÀ» À§Çؼ­ÀÌ´Ù. Â÷ÈÄ¿¡ ´õ ¸¹Àº ±â´ÉÀ» ±¸ÇöÇÏ°í ½Í´Ù¸é °´Ã¼¸¦ ´Ù¸¥ ¹æ½ÄÀ¸·Î ºÐÇÒÇÒ Çʿ䰡 ÀÖÀ» ¼öµµ Àִµ¥ 1.2 ¹öÀü¿¡¼­´Â ´ÙÀ½ µÎ ±â´ÉÀ» À§ÇÑ ºÐÇÒ¸¸ Çϱâ·Î ÇÑ´Ù.

ºÐÇÒâ(Split Window)

ºÐÇÒâÀ̶õ ÇÑ ¹®¼­ÀÇ ´Ù¸¥ µÎ ºÎºÐÀ» µ¿½Ã¿¡ º¸¿©ÁÖ´Â ±â´ÉÀÌ¸ç ºñÁÖ¾ó ½ºÆ©µð¿À°¡ ÀÌ ±â´ÉÀ» Á¦°øÇÑ´Ù. ¼öÁ÷ ½ºÅ©·Ñ ¹Ù À§ÀÇ Á¶±×¸¸ ½ºÇø´ ¹Ú½º(Split Box)¸¦ µå·¡±×ÇÏ¸é ¹®¼­Ã¢ÀÌ ´ÙÀ½°ú °°ÀÌ µÑ·Î °¥¶óÁö¸ç °¢ âÀº °³º°ÀûÀ¸·Î ½ºÅ©·Ñ °¡´ÉÇϹǷΠ¸Ö¸® ¶³¾îÁø µÎ ÇÔ¼ö¸¦ ¿Ô´Ù °¬´Ù ÇÒ ÇÊ¿ä¾øÀÌ µ¿½Ã¿¡ º¸¸é¼­ ÆíÁýÇÒ ¼ö ÀÖ´Ù.

 

¼Ò½º ÀÛ¼º½Ã ÀÌ¹Ì ¿Ï¼ºµÈ ÇÔ¼ö¸¦ ÂüÁ¶Çϸ鼭 »õ·Î¿î ÇÔ¼ö¸¦ ÀÛ¼ºÇÒ °æ¿ì°¡ ¾ÆÁÖ ¸¹Àºµ¥ ÆíÁýâÀÌ ºÐÇҵǸé ÀÌ·² ¶§ ¾ÆÁÖ Æí¸®ÇÏ´Ù. ÆíÁý⸸ ºÐÇҵǾî ÀÖÀ» »Ó ÆíÁý ´ë»ó ¹®¼­´Â ¿©ÀüÈ÷ Çϳª¿©¾ß ÇÏ¸ç µÎ °³ÀÇ ÄÁÆ®·ÑÀÌ »ý¼ºµÇ´Â °ÍÀÌ ¾Æ´Ï´Ù. ÄÁÆ®·ÑÀº ÇϳªÀÌµÇ ³»ºÎ¿¡ µÎ °³ÀÇ ºä¸¦ °Å´À¸®°í ÀÖ´Â »óÅÂÀÌ´Ù. CApiEdit´Â ÄÁÆ®·ÑÀÌ Åë°·Î ÇϳªÀÇ °´Ã¼À̱⠶§¹®¿¡ ÇöÀç ±¸Á¶·Î´Â âºÐÇÒ ±â´ÉÀ» ¸¸µé ¼ö ¾øÀ¸¸ç ÀÌ·± ±â´É»óÀÇ Á¦¾àÀ» ±Øº¹Çϱâ À§ÇØ °´Ã¼ ºÐÇÒÀÌ ÇÊ¿äÇÑ °ÍÀÌ´Ù.

ºÐÇÒâ ±â´ÉÀ» ±¸ÇöÇϱâ À§ÇØ µÎ °³ÀÇ ApiEdit ÄÁÆ®·ÑÀ» »ý¼ºÇÏ¿© ¾Æ·¡ À§¿¡ ¹èÄ¡ÇØ ³õÀ¸¸é µÇÁö ¾ÊÀ»±î ÇÏ´Â »ý°¢ÀÌ µé ¼öµµ ÀÖ´Ù. ±×·¯³ª ÀÌ·± ½ÄÀ̶ó¸é ÄÁÆ®·ÑÀÇ µÎ ÀνºÅϽº°¡ °°Àº ¹®¼­¸¦ µ¿½Ã¿¡ ¿­¾î¾ß ÇÏ¸ç »óÈ£ ÆíÁý ³»¿ëÀ» ½Ç½Ã°£À¸·Î µ¿±âÈ­ÇØ¾ß Çϴµ¥´Ù ÆíÁý ¹öÆÛ, Ãë¼Ò ·¹ÄÚµå, °¢Á¾ ¼³Á¤°ª µîÀÌ ÀÌÁßÀ¸·Î ³¶ºñµÇ´Â ¹®Á¦°¡ ÀÖ´Ù. ¶ÇÇÑ ÀÌ·¸°Ô µÇ¸é ºÐÇÒâ ±â´ÉÀº ÄÁÆ®·ÑÀÇ °íÀ¯ ±â´ÉÀÌ ¾Æ´Ï¶ó È£½ºÆ®ÀÇ ±â´ÉÀ¸·Î ³Ñ¾î°¡°Ô µÇ¾î ÄÁÆ®·Ñ »ç¿ëÀÚ¿¡°Ô ºÎ´ãÀ» ÁÖ°Ô µÈ´Ù. ¾ïÁö·Î ÀÛ¼ºÇÑ´Ù¸é °¡´ÉÀº ÇϰÚÁö¸¸ ÀáÀçÀûÀ¸·Î ¸¹Àº ¹®Á¦¸¦ À¯¹ßÇÒ °ÍÀÓÀº ¾î·ÆÁö ¾Ê°Ô ÁüÀÛÇÒ ¼ö ÀÖ´Ù. ¾î¶µç âÀ» ºÐÇÒÇÏ·Á¸é °´Ã¼¸¦ ºÐÇÒÇÏ´Â °ÍÀÌ °¡Àå ÃÖ¼±ÀÇ ¼±ÅÃÀÌ´Ù.

º¸±â ¸ðµå

ÅØ½ºÆ® ÆÄÀÏÀ» ²À ÅØ½ºÆ® ÇüÅ·θ¸ º¸¶ó´Â ¹ýÀº ¾ø´Ù. HTML ÆÄÀÏÀº ¼­½ÄÀ» Àû¿ëÇÏ¿© À¥ ÆäÀÌÁö¿¡ ³ªÅ¸³ª´Â ¸ð¾ç ±×´ë·Î º¸¿©ÁÙ ¼öµµ ÀÖ°í XML ÆÄÀÏÀº °èÃþÀûÀÎ Æ®¸® ÇüÅ·Πº¸¿©ÁÙ ¼öµµ ÀÖ´Ù. ÅØ½ºÆ® Æ÷¸Ë ÀÚü´Â ¼­½ÄÀÌ ¾øÁö¸¸ ű׳ª ±âŸ ´Ù¸¥ ¹æ¹ýÀ¸·Î ³í¸®ÀûÀÎ ¼­½ÄÀ» Á¤ÀÇÇÒ ¼ö Àִµ¥ ÀÌ·± ¼­½ÄÀ» Àû¿ëÇÏ¿© º¸¿©ÁÙ ¼öµµ ÀÖ´Ù. ¶ÇÇÑ ÀÌÁø ÆÄÀÏÀº ÅØ½ºÆ® Çüź¸´Ù´Â 16Áø¼ö·Î ´ýÇÁÇÏ´Â °ÍÀÌ ÈξÀ ´õ È¿À²ÀûÀÌ°í °°Àº ÅØ½ºÆ®¶óµµ ¼¼·Î·Î Ãâ·ÂÇÏ´Â °ÍÀÌ ´õ ¸Ú½º·¯¿ö º¸À̱⵵ ÇÑ´Ù. º¸±â ¸ðµåº°·Î °´Ã¼¸¦ µû·Î ¸¸µé¸é ¶È°°Àº ¹®¼­¶óµµ ³»¿ëÀ» ´õ ½±°Ô ÆÄ¾ÇÇÒ ¼ö ÀÖ´Â °´Ã¼·Î ±³Ã¼ÇØ °¡¸ç ¾µ ¼ö ÀÖ´Ù.

µ¿ÀÏÇÑ ¹®¼­¸¦ ¿©·¯ °¡Áö ´Ù¸¥ ¹æ½ÄÀ¸·Î º¼ ¼ö ÀÖ´Ù´Â °ÍÀº ±²ÀåÈ÷ °­·ÂÇÏ°í Æí¸®ÇÑ ±â´ÉÀÌ´Ù. HTML ÆÄÀÏÀ» ÆíÁýÇÏ´Â Áß¿¡ ÆíÁý±â¸¦ ¶°³ªÁö ¾Ê°íµµ ÀÌ ÆÄÀÏÀÌ À¥¿¡¼­ ¾î¶»°Ô º¸ÀÏ °ÍÀΰ¡¸¦ ½Ç½Ã°£À¸·Î È®ÀÎÇÒ ¼ö ÀÖ´Ù¸é, ´õ ³ª¾Æ°¡ À¥¿¡ º¸ÀÌ´Â ¸ð¾ç ±×´ë·Î ÆíÁýÇÒ ¼ö ÀÖ´Ù¸é ¾ó¸¶³ª Æí¸®Çϰڴ°¡? ÀÌ·¸°Ô µÇ¸é ÅØ½ºÆ® ÆíÁý±â´Â ¹®¼­ÀÇ ³í¸®ÀûÀÎ ±¸Á¶¸¦ º¸¿©ÁÖ´Â ºä¾î°¡ µÈ´Ù. ´ëºÎºÐÀÇ À¥ ÆíÁý±âµéÀº ÀÌ·± º¸±â ¸ðµå º¯°æ ±â´ÉÀÌ ÀÖ´Ù.

¿öµå ÇÁ·Î¼¼¼­µéµµ ÀÌ·± ´Ù¾çÇÑ º¸±â ¸ðµå¸¦ Áö¿øÇϴµ¥ ¾Æ·¡ÇѱÛÀ̳ª ¿öµå, ÈÆ¹ÎÁ¤À½ µîÀÇ Á¦´ë·Î ¸¸µç ÇÁ·Î±×·¥Àº ±âº» º¸±â, ÆäÀÌÁö ·¹À̾ƿô º¸±â, °³¿ä º¸±â, À¥ º¸±â µîÀÇ ¸ðµå°¡ ÀÖ¾î °°Àº ¹®¼­¸¦ ´Ù¾çÇÑ ¹æ½ÄÀ¸·Î »ìÆìº¼ ¼ö ÀÖ´Ù. ÅØ½ºÆ® ÆíÁý±âÁß¿¡µµ ÅØ½ºÆ® ¸ðµå¿Í 16Áø ¸ðµå¸¦ ±¸ºÐÇÏ´Â ÇÁ·Î±×·¥µéÀÌ ÀÖ´Ù.

 

ÀÌ·± º¸±â ¸ðµåÀÇ º¯°æÀ» À§ÇØ ÇϳªÀÇ °´Ã¼°¡ Á¶°Ç¿¡ µû¶ó Ãâ·ÂÀ» ´Ù¸£°Ô ÇÏ´Â ¹æ¹ýÀ» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î ViewMode¶ó´Â º¯¼ö¸¦ µÎ°í ÀÌ º¯¼öÀÇ °ª¿¡ µû¶ó OnPaintÀÇ Ãâ·Â¹®À» ½ºÀ§ÄªÇÏ¸é µÈ´Ù.

 

switch (ViewMode) {

     case 0:

          ÀÌ·¸°Ô Ãâ·Â;

     case 1:

          ¿ä·¸°Ô Ãâ·Â;

     case 2:

          Àú·¸°Ô Ãâ·Â;

     ....

}

 

±×·¯³ª º¸±â ¸ðµå¶õ ´Ü¼øÈ÷ Ãâ·ÂÀ» ´Ù¸£°Ô ÇÏ´Â °Í»Ó¸¸ ¾Æ´Ï¶ó ÆíÁý, ij·µ ó¸®, ¼±Åà ¿µ¿ª, Á¤·Ä »óÅ µî¿¡ ±¤¹üÀ§ÇÑ ¿µÇâÀ» ¹ÌÄ¡±â ¶§¹®¿¡ ÄÚµåÀÇ °÷°÷¿¡¼­ ÀÌ °ª¿¡ µû¶ó ´Ù¸¥ µ¿ÀÛÀ» ÇØ¾ß ÇÑ´Ù. ´Ü¼øÈ÷ µ¿ÀÛ¸¸ ´Þ¶óÁö´Â Á¤µµ°¡ ¾Æ´Ï¶ó ¾Æ¿¹ ÁúÀûÀ¸·Î ´Ù¸¥ ÇÔ¼ö ÁýÇÕÀÌ ÇÊ¿äÇϰųª »õ·Î¿î °³³äÀÌ µµÀԵǾî¾ß ÇÒ °æ¿ìµµ ÀÖ´Ù. ¿¹¸¦ µé¾î ÇÑ ÁÙ´ç ÀÏÁ¤ °³¼öÀÇ ¹ÙÀÌÆ®¸¦ Ãâ·ÂÇÏ´Â 16Áø ¸ðµå¿¡¼­´Â Á¤·ÄÀ̶ó´Â °³³äÀÌ ÇÊ¿ä¾ø°í HTML ¸ðµå´Â ³í¸®Àû ¼­½Ä¿¡ µû¶ó ±Û²ÃÀ» °ü¸®ÇØ¾ß ÇÑ´Ù.

¿äÄÁµ¥ º¸±â ¸ðµå¶õ º¯¼ö Çϳª·Î ÅëÁ¦ÇÒ¸¸Å­ °£´ÜÇÑ °³³äÀÌ ¾Æ´Ï´Ù. ¶ÇÇÑ º¸±â ¸ðµå°¡ ´õ ´Ã¾î³¯ °æ¿ì ¸ðµç Äڵ尡 ¼öÁ¤µÇ¾î¾ß ÇÏ°í ¾î¶² °æ¿ì´Â ÄÚµåÀÇ ±¸Á¶°¡ ¹Ù²î¾î¾ß ÇÒ °æ¿ìµµ Àֱ⠶§¹®¿¡ È®Àå¿¡ ¾ÆÁÖ ºÒ¸®ÇÏ´Ù. ±×·¡¼­ °¢ º¸±â ¸ðµåº°·Î º¸±â °´Ã¼¸¦ ¸¸µé°í ¸ðµå¿¡ µû¶ó °´Ã¼¸¦ ¹Ù²Ù´Â °ÍÀÌ ´õ ÁÁ´Ù.

½ÇÇàÁß¿¡ º¸±â °´Ã¼¸¦ ¹Ù²Ù´Â ¹æ½ÄÀº ÇöÀç ¹öÀüÀÇ CApiEdit°¡ ½ÇÇàÁß¿¡ ºÐ¼®±â °´Ã¼¸¦ ¹Ù²Ù´Â ¹æ½Ä°ú µ¿ÀÏÇÏ´Ù. È£½ºÆ®³ª »ç¿ëÀÚÀÇ ¸í½ÃÀûÀÎ ¸í·É¿¡ µû¶ó ºÐ¼®±â¸¸ ±³Ã¼ÇÏ¸é ±¸¹® ºÐ¼®À» ¿ÏÀüÈ÷ ´Ù¸£°Ô ÇÒ ¼ö ÀÖ´Â °Íó·³ º¸±â °´Ã¼¸¸ ±³Ã¼ÇÏ¸é ¹®¼­¸¦ Ãâ·ÂÇÏ°í ÆíÁýÇÏ´Â ¹æ½ÄÀ» »õ·Ó°Ô Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. ÀÏ´Ü °´Ã¼°¡ ºÐÇÒµÇ¸é ´õ ÇÊ¿äÇÑ º¸±â ¸ðµå¸¦ ½±°Ô Ãß°¡ÇÒ ¼ö ÀÖÀ¸¹Ç·Î È®À强ÀÇ Á¦¾àµµ ½±°Ô ±Øº¹µÈ´Ù.

 

¼ÒÇÁÆ®¿þ¾î»Ó¸¸ ¾Æ´Ï¶ó ¹«¾ùÀ̵çÁö ºÐ¸® °¡´ÉÇÏ°í ±³Ã¼ °¡´ÉÇÑ °ÍÀÌ ¸¸µé±â´Â ¾î·Æ°í ºñ¿ëÀÌ ´õ µé±â ¶§¹®¿¡ ºñ½ÎÁö¸¸ ±×¸¸Å­ ´õ ÁÁ´Ù. ¸ÞÀÎ º¸µå¿¡ »ç¿îµå Ä«µå, ºñµð¿À Ä«µå, ½ÉÁö¾î ¸ðµ©±îÁö °°ÀÌ ºÙ¾î ÀÖ´Â ÅëÇÕÇü ¾ö¸¶ÆÇ(Mother Board)Àº ÇѸ¶µð·Î ½Î±¸·Á·Î Ãë±ÞµÇ¸ç ½ÇÁ¦·Îµµ ½Î´Ù. °í±ÞÇü µðÁöÅ» Ä«¸Þ¶ó´Â ´Ù¾çÇÑ Á¾·ùÀÇ ¸Þ¸ð¸®¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç ¹åµ¥¸®µµ ¿©·¯ Á¾·ù¸¦ Áö¿øÇÏ°í ½ÉÁö¾î ·»Áî±îÁöµµ ±³Ã¼Çذ¡¸ç ¾µ ¼ö ÀÖ´Ù. ÀÌ·± Á¦Ç°Àº °¡°ÝÀÌ ºñ½Ñ ´ë½Å¿¡ ±â´É¼º°ú È®À强Àº Ź¿ùÇÏ´Ù.

ApiEditµµ ´õ ¸¹Àº ±â´ÉÀ» Á¦°øÇϰí Â÷ÈÄÀÇ È®À强À» È®º¸Çϱâ À§ÇØ °´Ã¼¸¦ ºÐÇÒÇÒ °ÍÀ̸ç ÀÌ °ÍÀÌ ÀÌ ÀåÀÇ ÁÖ¿ä ¸ñÇ¥ÀÌ´Ù. CApiEdit Ŭ·¡½º¸¦ µÎ °³ÀÇ Å¬·¡½º·Î ºÐÇÒÇÑ ÈÄ¿¡ ºÐÇÒâ ±â´ÉÀ» ¸¸µé¾î º¼ °ÍÀ̸ç Â÷ÈÄ¿¡ Çí»ç ÆíÁý ¸ðµå Áö¿øÀ» ÁغñÇÒ °ÍÀÌ´Ù. âºÐÇÒ°ú Çí»ç ºä ÀÌ µÎ °¡Áö°¡ ´ç±Ù 1.2ÀÇ °¡´É ÇÙ½ÉÀûÀÎ °³¼± »çÇ×ÀÌ¸ç µû¶ó¼­ ±×¸¸Å­ ºÎÇǰ¡ Å©´Ù.

³ª.ÇÁ·¹ÀÓ°ú ºä

±×·¸´Ù¸é Çϳª·Î µÇ¾î ÀÖ´Â CApiEdit °´Ã¼¸¦ ¾î¶² ½ÄÀ¸·Î ºÐÇÒÇÒ °ÍÀÎÁö °èȹÀ» ¼¼¿ö º¸ÀÚ. ÀÌ¹Ì ³ª´©¾îÁ® ÀÖ´Â ºÐ¼®±â °´Ã¼´Â ±×´ë·Î µÎ°í CApiEdit °´Ã¼¸¸ ºÐÇÒÇÒ °ÍÀÌ´Ù. °´Ã¼¸¦ ºÐÇÒÇÏ´Â ¹æ½ÄÀº ºÐÇÒÀÇ ¸ñÀûÀÌ ¹«¾ùÀΰ¡¿¡ µû¶ó ´Þ¶óÁö°ÚÁö¸¸ ºÐÇÒâ ±â´É°ú º¸±â ¸ðµå Áö¿øÀ» À§Çؼ­´Â ´ÙÀ½ µÎ °³ÀÇ Å¬·¡½º·Î ºÐÇÒÇÏ´Â °ÍÀÌ ÇÕ¸®ÀûÀÌ´Ù.

 

¡á ³»ºÎ °´Ã¼ : ¹®¼­ ÀÚü¸¦ °ü¸®ÇÏ´Â °ÍÀÌ ÁÖµÈ ±â´ÉÀÌ¸ç ¹®¼­¿¡ ´ëÇÑ ÆíÁý ±â·ÏÀÎ Ãë¼Ò ·¹ÄÚµå, ¹®¼­ÀÇ ¼öÁ¤ ¿©ºÎ µîÀÇ Á¤º¸¸¦ °ü¸®ÇÑ´Ù. ³»ºÎÀûÀÎ ÀÛ¾÷À» ó¸®Çϱ⠶§¹®¿¡ ´ëºÎºÐÀÇ °æ¿ì »ç¿ëÀÚ¿¡°Ô´Â Á÷Á¢ º¸ÀÌÁö ¾Ê´Â´Ù. ´ë½Å »ç¿ëÀÚ¿Í »óÈ£ ÀÛ¿ëÀ» ÇÒ ¼ö ÀÖ´Â º¹¼ö °³ÀÇ ¿ÜºÎ °´Ã¼¸¦ Â÷Àϵå·Î °Å´À¸± ¼ö ÀÖÀ¸¸ç ÀÌ Â÷Àϵ带 °ü¸®ÇÑ´Ù.

¡á ¿ÜºÎ °´Ã¼ : »ç¿ëÀÚ¿ÍÀÇ Åë½ÅÀ» ´ã´çÇÑ´Ù. ³»ºÎ °´Ã¼¿¡ ÀúÀåµÇ¾î ÀÖ´Â ¹®¼­ ³»¿ëÀ» È­¸éÀ¸·Î Ãâ·ÂÇÏ¸ç »ç¿ëÀÚÀÇ ÆíÁý µ¿ÀÛÀ» ÀÔ·Â ¹Þ¾Æ ¹®¼­¸¦ º¯°æÇÑ´Ù. Ãâ·ÂÀ» À§ÇØ Á¤·Ä Á¤º¸, ±¸¹® ºÐ¼® µîÀ» ó¸®ÇÏ°í ¿©·¯ °¡Áö ¼³Á¤°ªµéÀ» Àû¿ëÇÑ´Ù.

 

ÀÌ·¸°Ô µÎ °³ÀÇ °´Ã¼·Î ³ª´©¸é ºÐÇÒâ°ú ´Ù¾çÇÑ º¸±â ¸ðµå°¡ °¡´ÉÇØÁø´Ù. ÇϳªÀÇ ³»ºÎ °´Ã¼¿¡ º¹¼ö°³ÀÇ ¿ÜºÎ °´Ã¼¸¦ ºÙ¿©¼­ ¹èÄ¡Çϸé âÀ» ºÐÇÒÇÏ´Â °ÍÀÌ µÇ°í ¸ðµå¿¡ µû¶ó ¿ÜºÎ °´Ã¼¸¦ ±³Ã¼ÇÏ¸é ´Ù¾çÇÑ º¸±â ¸ðµå¸¦ ¸¸µé ¼ö ÀÖ´Ù.

ºñ½ÁÇÑ ¹æ½ÄÀ¸·Î °´Ã¼¸¦ ºÐÇÒÇÏ´Â MFC ÇÁ·¹ÀÓ¿öÅ©ÀÇ ¿¹¸¦ º¸¸é ¹®¼­Ã¢ Çϳª¸¦ µµÅ¥¸àÆ®, ºä, ÇÁ·¹ÀÓÀ¸·Î ºÐÇÒÇϸç ÀÌ ¼¼ °´Ã¼¸¦ ÇÕÃÄ µµÅ¥¸àÆ® ÅÛÇø´À̶ó°í ÇÑ´Ù. ¹®¼­¸¦ °ü¸®ÇÏ´Â ³»ºÎ °´Ã¼¸¦ µµÅ¥¸àÆ®¶ó°í ºÎ¸£¸ç »ç¿ëÀÚ¿Í »óÈ£ÀÛ¿ëÀ» ÇÏ´Â ¿ÜºÎ °´Ã¼¸¦ ºä¶ó°í ºÎ¸¥´Ù. ÇÁ·¹ÀÓÀº ÀÌ µÑÀ» °¨½Î¼­ °ü¸®ÇÏ´Â ²®µ¥±â À©µµ¿ìÀε¥ º°·Î ÇÏ´Â ÀÏÀº ¾ø´Ù. MFCÀÇ ÀÌ·± ±¸Á¶´Â ÈçÈ÷ µµÅ¥¸àÆ®/ºä ±¸Á¶¶ó°í ÇÏ¸ç µµÅ¥¸àÆ®¿Í ºä°¡ °¢°¢ÀÇ ¿ªÇÒ¿¡ µû¶ó Äڵ带 ³ª´©¾î °¡Áø´Ù. MFCÀÇ ÇÙ½É ±¸Á¶ Áß ÇϳªÀ̸ç MFC ÄÚµùÀ» ÇØ º» »ç¶÷µéÀº ¾ÆÁÖ Àͼ÷ÇÒ °ÍÀÌ´Ù.

ApiEditÀÇ °æ¿ì MFCÀÇ ÇÁ·¹ÀÓ¿¡ ÇØ´çÇÏ´Â ²®µ¥±â À©µµ¿ì´Â È£½ºÆ®°¡ Á¦°øÇÏ´Â DGChild À©µµ¿ìÀ̸ç ÀÌ À©µµ¿ì¾È¿¡ ApiEdit °´Ã¼°¡ ¹èÄ¡µÈ´Ù. DGChild´Â ÄÁÆ®·ÑÀÇ ÀϺΰ¡ ¾Æ´Ï¸ç È£½ºÆ®¿¡ ÀÇÇØ ÁÖ¾îÁö´Â °ÍÀ̱⠶§¹®¿¡ ApiEdit´Â ²®µ¥±â À©µµ¿ì¸¦ Á÷Á¢ Á¦°øÇÒ Çʿ䰡 ¾ø´Ù. ApiEditÀÇ ¿ÜºÎ °´Ã¼´Â MFC¿Í ¸¶Âù°¡Áö·Î ºä¶ó´Â À̸§À» °¡Áö¸ç ¿ªÇÒ(»ç¿ëÀÚ¿Í »óÈ£ÀÛ¿ë)Àº µ¿ÀÏÇÏ´Ù. ApiEditÀÇ ³»ºÎ °´Ã¼´Â MFCÀÇ µµÅ¥¸àÆ®¿Í ÇÁ·¹ÀÓÀÇ ÅëÇÕüÀ̸ç ÇÁ·¹ÀÓÀ̶ó°í ºÎ¸£±â·Î ÇÑ´Ù. DGChild À©µµ¿ì¾È¿¡ ApiEditÀÇ ÇÁ·¹ÀÓÀÌ ¹èÄ¡µÇ¸ç ÀÌ ÇÁ·¹ÀӾȿ¡ ºä°¡ ¹èÄ¡µÈ´Ù. Áï, ApiEdit´Â ÇÁ·¹ÀÓ/ºä ±¸Á¶·Î ÀÛ¼ºµÈ´Ù.

ApiEditÀÇ ³»ºÎ °´Ã¼´Â »ç½Ç µµÅ¥¸àÆ®ÀÇ ¿ªÇÒÀ» ´õ ¸¹ÀÌ ÇÏÁö¸¸ µµÅ¥¸àÆ®¶ó°í ºÎ¸£Áö ¾Ê°í ÇÁ·¹ÀÓÀ̶ó°í ºÎ¸£´Â ÀÌÀ¯´Â À©µµ¿ì ÇÚµéÀ» °¡Áö¸ç ºä¸¦ Â÷Àϵå·Î °Å´À¸®±â ¶§¹®ÀÌ´Ù. ¶ÇÇÑ ÄÁÆ®·Ñ ¿ÜºÎ¿¡¼­ º¼ ¶§ ApiEditÀÇ ³»ºÎ °´Ã¼°¡ °ð ÄÁÆ®·Ñ ±× ÀÚüÀÎ °Íó·³ º¸À̹ǷΠÇÁ·¹ÀÓÀ̶ó´Â À̸§ÀÌ ´õ ¾î¿ï¸°´Ù. MFCÀÇ µµÅ¥¸àÆ®´Â ºä¿Í ¿¬°áµÇ¾î ÀÖÀ» »Ó ºä¸¦ Æ÷ÇÔÇÏÁöµµ ¾ÊÀ¸¸ç À©µµ¿ìµµ ¾Æ´Ï¹Ç·Î ApiEditÀÇ ³»ºÎ °´Ã¼ °³³ä°ú´Â »ó´çÇÑ °Å¸®°¡ ÀÖ´Ù.

ApiEdit´Â ÇÁ·¹ÀÓ°ú ºä·Î ºÐÇҵǴµ¥ ÇÁ·¹ÀÓÀÌ µµÅ¥¸àÆ®¸¦ Æ÷ÇÔÇϰí ÀÖÀ¸¹Ç·Î µµÅ¥¸àÆ®¶ó´Â ¿ë¾î¸¦ µû·Î ¾²Áö´Â ¾ÊÀ» °ÍÀÌ´Ù. °´Ã¼ÀÇ À̸§À» ¾î¶»°Ô ºÙÀÏ °ÍÀΰ¡´Â ±×¸® Áß¿äÇÑ ¹®Á¦°¡ ¾Æ´Ï¹Ç·Î ApiEditÀÇ ÇÁ·¹ÀÓÀ» µµÅ¥¸àÆ®¶ó°í »ý°¢Çصµ ¹«¹æÇÏ´Ù. ºÐÇÒµÈ °á°ú¸¦ º¸¸é ³»ºÎ °´Ã¼ÀÇ À̸§À» ÇÁ·¹ÀÓÀ̶ó°í º¸´Â °ÍÀÌ ´õ Ÿ´çÇÏ´Ù´Â »ý°¢ÀÌ µé °ÍÀÌ´Ù.

CApiEdit Ŭ·¡½º°¡ ¿ø·¡ °¡Áö°í ÀÖ´ø ¸â¹öµéÀº ÇÁ·¹ÀÓ°ú ºä µÎ Ŭ·¡½º°¡ ³ª´©¾î °¡Áö°Ô µÈ´Ù. À̶§ ¾î¶² ¸â¹ö°¡ ¾îµð·Î À̵¿ÇÒ °ÍÀΰ¡´Â º¸±â »óÅ¿¡ µû¶ó ´Ù¸¥ °ªÀ» °¡Áö´Â ¸â¹öÀΰ¡ ¾Æ´Ñ°¡¸¦ ±âÁØÀ¸·Î ÇÑ´Ù. º¸±â »óÅÂ¿Í ¹«°üÇÑ ¸â¹ö´Â ÇÁ·¹ÀÓÀÌ °¡Áö¸ç º¸±â¿¡ µû¶ó ´Þ¶óÁú ¼ö ÀÖ´Â ¸â¹ö´Â ºä°¡ °¡Á®¾ß ÇÑ´Ù. ¸î°¡Áö ¿¹¸¦ º¸ÀÚ.

 

¸â¹ö

¼Ò¼Ó

buf

¹®¼­ÀÇ ³»¿ë ÀÚüÀÌ¸ç º¸±â »óÅÂ¿Í ¹«°üÇϹǷΠÇÁ·¹ÀÓ¿¡ ¼ÓÇÑ´Ù.

off

°¢ ºä°¡ ´Ù¸¥ À§Ä¡¸¦ ÆíÁýÇÒ ¼ö ÀÖÀ¸¹Ç·Î ºä¿¡ ¼ÓÇÑ´Ù.

ypos, xpos

½ºÅ©·Ñ À§Ä¡µµ ºä¿¡ µû¶ó ´Þ¶óÁú ¼ö ÀÖÀ¸¹Ç·Î ºä¿¡ ¼ÓÇÑ´Ù.

pUR

ÆíÁý ±â·ÏÀº ¹®¼­ÀÇ º¯È­¿¡ ´ëÇÑ ±â·ÏÀ̹ǷΠÇÁ·¹ÀÓ¿¡ ¼ÓÇÑ´Ù.

pLine

Á¤·Ä Á¤º¸´Â ¹®¼­¸¦ º¸¿©ÁÖ´Â ¹æ½Ä¿¡ ´ëÇÑ Á¤º¸À̹ǷΠºä¿¡ ¼ÓÇÑ´Ù.

 

¸ðµç ¸â¹öµéÀÌ ÀÌ µµÇ¥Ã³·³ ÇÁ·¹ÀÓ ¶Ç´Â ºä ÇÑ ÂÊÀ¸·Î ¼Ò¼ÓÀ» ¸íÈ®ÇÏ°Ô Á¤ÇÒ ¼ö ÀÖ´Â °ÍÀº ¾Æ´Ï´Ù. ¾îµð¿¡ µÎ¾îµµ »ó°ü¾ø´Â ¸â¹öµµ Àִµ¥ ¿¹¸¦ µé¾î ¼³Á¤ º¯¼öµéÀº ÇÁ·¹ÀÓ¿¡ µÎ°í ºä°¡ ÂüÁ¶ÇÒ ¼öµµ ÀÖ°í ºä¿¡ µÎ°í ºä°¡ Á÷Á¢ ¾µ ¼öµµ ÀÖ´Ù. ¶ÇÇÑ ÇÁ·¹ÀÓÀ̳ª ºä³ª µÑ ´Ù À©µµ¿ìÀ̹ǷΠhWnd ÇÚµéÀº ¾çÂÊ¿¡ ´Ù ÀÖ¾î¾ß Çϸç Çʿ信 µû¶ó »õ·Î Ãß°¡µÇ´Â ¸â¹öµµ ´ç¿¬È÷ ÀÖ´Ù.

¸â¹ö ÇÔ¼öµéÀÇ °æ¿ì´Â ´õ ¾Ö¸ÅÇØÁö´Âµ¥ ¹®¼­¸¸ ´Ù·ç´Â ÇÔ¼ö(¿¹:Undo, Redo)µéÀº ÇÁ·¹ÀÓÀ¸·Î °¡°í º¸±â »óŸ¸ °ü¸®ÇÏ´Â ÇÔ¼ö(¿¹:DrawLine, SetCaret)´Â ºä·Î °¡Áö¸¸ µÑ ´Ù ´Ù·ç´Â ÇÔ¼ö(¿¹:Insert, Delete)µéÀº ¾çÂÊ¿¡ Äڵ带 ³ª´©¾î °¡Á®¾ß ÇÑ´Ù. ¶ÇÇÑ ¿ÜºÎ¿¡¼­ º¼ ¶§ ÇÁ·¹ÀÓÀÌ ApiEdit ÄÁÆ®·ÑÀ̹ǷΠȣ½ºÆ®¿Í ÀÎÅÍÆäÀ̽ºÇÏ´Â ¸ðµç ÇÔ¼öµéÀº ÀÏ´Ü ÇÁ·¹ÀÓ¿¡ ¼Ò¼ÓµÇ¾î¾ß ÇÑ´Ù. °¢ ¸â¹öµéÀÌ ¾îµð·Î À̵¿µÇ´ÂÁö´Â ½Ç½ÀÀ» Çϸ鼭 »ìÆì º¸±â ¹Ù¶õ´Ù. ´ëÃæ °¨ÀÌ ¿À°ÚÁö¸¸ ÀÌ ½Ç½ÀÀ» ÇÏ·Á¸é Áö±Ý±îÁö ¸¸µé¾ú´ø ¸ðµç Äڵ带 ÇѹÙÅÁ µÚÁý¾î ¾þ´Â ´ë°ø»ç¸¦ ¹ú·Á¾ß ÇÑ´Ù.

ÈçÈ÷ Àü¹® ¿ë¾î·Î "°¥¾Æ ¾þ´Â´Ù"¶ó°í Ç¥ÇöÇϴµ¥ ¸ðµç Äڵ带 ¿ÏÀüÈ÷ Àç¹èÄ¡ÇØ¾ß ÇϹǷΠ¸¸¸¸ÇÑ ÀÛ¾÷ÀÌ ¾Æ´Ï¸ç ½Ç¼öÇÒ ¿©Áöµµ ¸¹°í ½Ã°£µµ ¸¹ÀÌ °É¸°´Ù. óÀ½ ±âȹÇÒ ¶§ºÎÅÍ °´Ã¼ ºÐÇÒÀ» ¿°µÎ¿¡ µÎ¾ú´õ¶ó¸é Áß°£¿¡ ÀÌ·± ±ÍÂúÀº ÀÛ¾÷À» ÇÏÁö ¾Ê¾Æµµ µÉ °ÍÀÌ´Ù. ±×·¯³ª À¢¸¸Å­ °æÇèÀÌ ¸¹Áö ¾Ê°í¼­´Â ¹Ì·¡¸¦ ¿¹ÃøÇÑ´Ù´Â °Í ¶ÇÇÑ ½±Áö ¾Ê±â ¶§¹®¿¡ °¥¾Æ ¾þ±â´Â ¾î¼¸é °³¹ß °úÁ¤¿¡¼­ ÇÇÇÒ ¼ö ¾ø´Â ÇÑ °úÁ¤ÀÌ¸ç °³¹ßÀÚ¿¡°Ô´Â ¼÷¸í°úµµ °°Àº ÀÛ¾÷ÀÌ´Ù. ÀÌ·± ÀÛ¾÷À» ÃÖ¼ÒÈ­ÇÏ·Á¸é óÀ½ºÎÅÍ ±âȹÀ» Ä¡¹ÐÇÏ°Ô ÇØ¾ß ÇÏ¸ç ±×·¯±â À§ÇØ ÇÊ¿äÇÑ ´ö¸ñÀº ¹Ù·Î dzºÎÇÑ °æÇèÀÌ´Ù.

´Ù. CWindow

°´Ã¼ ºÐÇÒÀÇ Çʿ伺°ú ÀÌÁ¡, ±×¸®°í ºÐÇÒ ¹æ½Ä¿¡ ´ëÇÑ Á¤Ã¥ ¼ö¸³À» ¿Ï·áÇßÀ¸¹Ç·Î ÀÌÁ¦ Á÷Á¢ °´Ã¼¸¦ ºÐÇÒÇØ º¸ÀÚ. ±×·±µ¥ CApiEdit´Â ½Ç½À¿ëÀ¸·Î »ç¿ëÇϱ⿡´Â ÀÌÁ¦ µ¢Ä¡°¡ ³Ê¹« Ä¿Á® ¹ö·È°í ÀÌ·± º¹ÀâÇÑ ½Ç½À °úÁ¤À» ¼³¸íÇϱ⿡´Â ºÎÀûÇÕÇÏ´Ù. ¿ö³« ¸â¹ö°¡ ¸¹´Ù º¸´Ï ºÐÇÒÇÏ´Â °úÁ¤ÀÌ Áö³ªÄ¡°Ô ±äµ¥´Ù°¡ °ü·Ã À̷еµ º¹ÀâÇϱ⠶§¹®¿¡ CApiEdit·Î ºÐÇÒ ½Ç½ÀÀ» ÇØ º¸±â´Â ¹ø°Å·Ó´Ù.

±×·¡¼­ ÈξÀ ´õ ÀÛÀº ¿¹Á¦·Î ½Ç½ÀÀ» ¸ÕÀú ÇØº¸¸é¼­ ÁÖ¿ä ºÐÇÒ °úÁ¤À» »ìÆì º¸±â·Î ÇÏÀÚ. ¿©±â¼­´Â 1±Ç¿¡¼­ ÄÁÆ®·ÑÀ» °´Ã¼È­ÇÒ¶§ ÀÛ¼ºÇß´ø CShowMsg Ŭ·¡½º¸¦ ¸ÕÀú ºÐÇÒÇØ º¸°í ºÐÇÒâ°ú º¸±â ¸ðµå º¯°æÀ» ¸ðµÎ ÇØ º¼ °ÍÀÌ´Ù. ShowMsgObj ¿¹Á¦¸¦ º¹»çÇÏ¿© SplitView ¿¹Á¦¸¦ ¸¸µé°í ºÐÇÒ ½Ç½ÀÀ» ÇØ º¸ÀÚ. ÀÌ ¿¹Á¦¿¡¼­ ÀÛ¼ºÇÑ ÇÔ¼ö¿Í ±¸Á¶´Â ¾à°£ÀÇ º¯ÇüÀ» °ÅÃÄ CApiEdit¿¡ Àû¿ëµÉ °ÍÀÌ´Ù. ½Ç½À¾çÀÌ ¸¹Áö´Â ¾ÊÁö¸¸ ÀÌ·ÐÀº ±²ÀåÈ÷ º¹ÀâÇÑ ÆíÀ̵¥ C++¿¡ ´ëÇØ À¢¸¸Å­ ÀÚ½ÅÀÖ´Â »ç¶÷µµ ÀÌ ½Ç½ÀÀ» ÀÌÇØÇϱâ´Â ½±Áö ¾ÊÀ¸¸®¶ó Àü¸ÁµÈ´Ù. C++ ¹®¹ý¼­¸¦ ¿·¿¡ µÎ°í ¹®¹ý °øºÎµµ º´ÇàÇØ¾ß ÇÒ Á¤µµ·Î ³­À̵µ°¡ ³ôÀ¸¹Ç·Î ¾à°£ÀÇ ±äÀåÀÌ ÇÊ¿äÇÏ´Ù.

ShowMsgObj ¿¹Á¦¿¡¼­ µµ¿ì¹Ì Ŭ·¡½ºÀÎ RegisterHelper´Â CShowMsg ÄÁÆ®·ÑÀÇ À©µµ¿ì Ŭ·¡½º µî·Ï, °´Ã¼¿Í À©µµ¿ìÀÇ ¸Ê °ü¸®¸¦ ´ã´çÇÏ¿´´Ù. ÀÌÁ¦ CShowMsg°¡ ¿©·¯ °³ÀÇ Å¬·¡½º·Î ºÐÇÒµÇ¸é µµ¿ì¹Ìµµ ºÐÇÒµÈ °¢ Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ °ü¸®ÇÒ ¼ö ÀÖµµ·Ï ¼öÁ¤µÇ¾î¾ß Çϴµ¥ °´Ã¼ ¸Ê¿¡ CShowMsgÀÇ Æ÷ÀÎÅÍ¿Í À©µµ¿ì ÇÚµéÀÇ ´ëÀÀ°ü°è¸¦ ±â·ÏÇÏ´Â ´ë½Å »ý¼ºµÇ´Â ¸ðµç °´Ã¼¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ À©µµ¿ì ÇÚµé°ú ´ëÀÀ½Ãų ¼ö ÀÖ¾î¾ß ÇÑ´Ù.

ÀÌ·¸°Ô µÇ·Á¸é ºÐÇҵǴ ¸ðµç °´Ã¼¸¦ Æ÷°ýÇÒ ¼ö Àִ ŸÀÔ, Áï °øÅëÀÇ Á¶»ó Ŭ·¡½º°¡ ÇÊ¿äÇÏ´Ù. ºÎ¸ð Ŭ·¡½ºÇüÀÇ Æ÷ÀÎÅÍ´Â ÀÚ½Ä °´Ã¼¸¦ °¡¸®Å³ ¼ö ÀÖÀ¸¹Ç·Î °øÅëÀÇ Á¶»ó Ŭ·¡½ºÇüÀÇ Æ÷ÀÎÅÍ¿Í À©µµ¿ì ÇÚµéÀÇ ´ëÀÀ °ü°è¸¦ ¸ÊÀ¸·Î ÀÛ¼ºÇÏ¸é µÈ´Ù. ÀÌ·± ¸ñÀûÀ¸·Î ·çÆ® Ŭ·¡½º CWindow¸¦ ShowMsg.hÀÇ ¼±µÎ¿¡ ´ÙÀ½°ú °°ÀÌ ¼±¾ðÇÑ´Ù.

 

class CWindow

{

public:

     HWND hWnd;

     ~CWindow();

     virtual LRESULT OnMessage(UINT iMessage,WPARAM wParam,LPARAM lParam)=0;

};

 

CWindow´Â À©µµ¿ì ÇüÅ·ΠǥÇöµÇ´Â ¸ðµç °´Ã¼¿¡ ´ëÇÑ ÃÖ¼ÒÇÑÀÇ Á¶°Ç¸¸À» °¡Áø´Ù. À©µµ¿ìÀ̹ǷΠ´ç¿¬È÷ À©µµ¿ì ÇÚµé(hWnd)À» °¡Á®¾ß Çϸç ÀÌ À©µµ¿ì·Î Àü´ÞµÇ´Â ¸Þ½ÃÁö¸¦ ó¸®ÇÏ´Â OnMessage °¡»ó ÇÔ¼ö¸¦ °¡Áø´Ù. ¸Þ½ÃÁö ó¸®ÇÔ¼ö¿¡¼­ ½ÇÁ¦ ¸Þ½ÃÁö¸¦ ¹ÞÀ» °´Ã¼ÀÇ Å¸ÀÔ¿¡ µû¶ó(Æ÷ÀÎÅÍ Å¸ÀÔÀÌ ¾Æ´Ï¶ó) ÀûÀýÇÑ OnMessage ÇÔ¼ö°¡ È£ÃâµÇ¾î¾ß ÇϹǷΠÀÌ ÇÔ¼ö´Â ¹Ýµå½Ã °¡»ó ÇÔ¼ö¿©¾ß ÇÑ´Ù. ¶ÇÇÑ CWindow ÀÚü´Â ¸Þ½ÃÁö¸¦ ó¸®ÇÏÁö ¾ÊÀ¸¹Ç·Î ¼ø¼ö °¡»ó ÇÔ¼ö·Î ¼±¾ðÇßÀ¸¸ç ÀÌ Å¬·¡½º·ÎºÎÅÍ ÆÄ»ýµÇ´Â Ŭ·¡½º´Â ¹Ýµå½Ã OnMessage ÇÔ¼ö¸¦ ÀçÁ¤ÀÇÇØ¾ß ÇÑ´Ù.

CWindow´Â ¼ø¼ö °¡»ó ÇÔ¼ö¸¦ °¡Áö¹Ç·Î ÀϹÝÀûÀÎ À©µµ¿ì¸¦ Ç¥ÇöÇÏ´Â Ãß»ó Ŭ·¡½º°¡ µÇ°í ÀνºÅϽº¸¦ »ý¼ºÇÒ ¼ö ¾ø´Ù. CWindow Ŭ·¡½ºÀÇ ÆÄ±«ÀÚ´Â ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÑ´Ù. ShowMsg.cpp¿¡ ÀÛ¼ºÇ쵂 _RegisterHelper Àü¿ª °´Ã¼¸¦ ÂüÁ¶ÇϹǷΠÀÌ °´Ã¼ ¼±¾ð¹®º¸´Ù µÚ¿¡ ÀÛ¼ºÇØ¾ß ÇÑ´Ù.

 

CWindow::~CWindow()

{

     if (_RegisterHelper.arObj)

          _RegisterHelper.RemoveObject(hWnd);

}

 

ÆÄ±«ÀÚ´Â µµ¿ì¹ÌÀÇ °´Ã¼ ¸ÊÀÌ ¾ÆÁ÷ À¯È¿ÇÏ¸é °´Ã¼ ¸Ê¿¡¼­ ÀÚ½ÅÀ» Á¦°ÅÇÑ´Ù. CWindowÀÇ ÆÄ±«ÀÚ°¡ °´Ã¼ Á¦°Å¸¦ ÇϹǷΠÆÄ»ý Ŭ·¡½ºµéÀº °´Ã¼ ¸Ê¿¡¼­ ÀÚ½ÅÀ» Á¦°ÅÇÏ´Â ÀÛ¾÷¿¡ ´ëÇØ¼­´Â ´õ ÀÌ»ó ½Å°æ ¾µ Çʿ䰡 ¾ø´Ù. µµ¿ì¹Ì Ŭ·¡½º´Â »õ·Î Á¤ÀÇµÈ CWindowÀÇ °´Ã¼¿¡ ´ëÇÑ ¸ÊÀ» °ü¸®ÇÒ ¼ö ÀÖµµ·Ï ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.

 

class CRegisterHelper

{

public:

     CRegisterHelper();

     ~CRegisterHelper();

 

     struct _arObj

     {

        CWindow *pObj;

          HWND hWnd;

     } *arObj;

     int arSize;

     int nReg;

 

    CWindow *FindObject(HWND hWnd);

    void AddObject(HWND hWnd, CWindow *pObj);

     void RemoveObject(HWND hWnd);

};

 

CRegisterHelper::CRegisterHelper()

{

     WNDCLASS WndClass;

 

     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=GetModuleHandle(NULL);

     WndClass.lpfnWndProc=(WNDPROC)ShowMsgProc;

     WndClass.lpszClassName="ShowMsgCtrl";

     WndClass.lpszMenuName=NULL;

     WndClass.style=CS_HREDRAW | CS_VREDRAW;

     RegisterClass(&WndClass);

 

    WndClass.hbrBackground=(HBRUSH)NULL;

    WndClass.hCursor=LoadCursor(NULL,IDC_IBEAM);

    WndClass.lpszClassName="ShowMsgView";

    RegisterClass(&WndClass);

    

     nReg=0;

     arSize=10;

     arObj=(_arObj *)malloc(arSize*sizeof(_arObj));

     memset(arObj,0,arSize*sizeof(_arObj));

}

 

CWindow *CRegisterHelper::FindObject(HWND hWnd)

{

     ....

}

 

void CRegisterHelper::AddObject(HWND hWnd, CWindow *pObj)

{

     ....

}

 

void CRegisterHelper::RemoveObject(HWND hWnd)

{

     int i,j;

 

    if (IsWindow(hWnd)) {

        DestroyWindow(hWnd);

    }

     for (i=0;i<nReg;i++) {

          if (arObj[i].hWnd == hWnd)

              break;

     }

     for (j=i+1;j<arSize;j++) {

          arObj[j-1].hWnd=arObj[j].hWnd;

          arObj[j-1].pObj=arObj[j].pObj;

     }

     nReg--;

}

 

CRegisterHelper _RegisterHelper;

 

LRESULT CALLBACK ShowMsgProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

    CWindow *pSM;

 

     pSM=_RegisterHelper.FindObject(hWnd);

     if (pSM == NULL) {

        pSM=(CWindow *)((LPCREATESTRUCT)lParam)->lpCreateParams;

          _RegisterHelper.AddObject(hWnd,pSM);

     }

 

     return pSM->OnMessage(iMessage, wParam, lParam);

}

 

ÀÏ´Ü »ý¼ºÀÚ¿¡¼­´Â ºäÀÇ À©µµ¿ì Ŭ·¡½º¸¦ ShowMsgView¶ó´Â À̸§À¸·Î µî·ÏÇÏ¿´´Ù. ºäµµ º°µµÀÇ À©µµ¿ìÀ̹ǷΠÀ©µµ¿ì Ŭ·¡½º°¡ ÇÊ¿äÇÏ´Ù. ¹è°æ ºê·¯½Ã´Â °¡ÁöÁö ¾ÊÀ¸¸ç Ä¿¼­¸¦ IÀÚ ¸ð¾çÀ¸·Î Á¤ÀÇÇÏ¿´´Ù. À©µµ¿ì ÇÁ·Î½ÃÀú´Â ÇÁ·¹ÀÓ°ú ¸¶Âù°¡Áö·Î ShowMsgProcÀε¥ ¾îÂ÷ÇÇ À©µµ¿ì ÇÁ·Î½ÃÀú´Â OnMessage °¡»ó ÇÔ¼ö¸¦ ã¾Æ ¸Þ½ÃÁö¸¦ Àü´ÞÇϱ⸸ ÇϹǷΠCWindowÀÇ ÆÄ»ý Ŭ·¡½ºµéÀº °°Àº À©µµ¿ì ÇÁ·Î½ÃÀú¸¦ °øÀ¯Çصµ ¹«°üÇÏ´Ù.

arObjÀÇ pObj ¸â¹ö°¡ CShowMsg *Çü¿¡¼­ CWindow *ÇüÀ¸·Î º¯°æµÇ¾úÀ¸¸ç ¸â¹ö ÇÔ¼öµéÀÇ Àμö ŸÀÔµµ CWindow *ÇüÀ¸·Î º¯°æµÇ¾ú´Ù. µû¶ó¼­ µµ¿ì¹Ì´Â CWindow ·ÎºÎÅÍ ÆÄ»ýµÇ´Â ¸ðµç Ŭ·¡½ºÀÇ °´Ã¼ ¸ÊÀ» °ü¸®ÇÒ ¼ö ÀÖ´Ù. ¸â¹ö ÇÔ¼öÀÇ ÄÚµå´Â º¯°æµÇÁö ¾Ê¾Ò´Âµ¥ ´Ù¸¸ RemoveObject ÇÔ¼ö´Â Å« º¯È­°¡ »ý°å´Ù. ÀÌ ÇÔ¼ö¿¡ ÀÛ¼ºµÇ¾î ÀÖ´ø DestroyWindow È£Ãâ¹®ÀÌ »èÁ¦µÇ¾úÀ¸¸ç °´Ã¼°¡ °ü¸®ÇÏ´ø À©µµ¿ì¸¦ ÀÚµ¿À¸·Î ÆÄ±«ÇÏÁö ¾Ê´Â´Ù. Áï RemoveObject ÇÔ¼ö´Â °´Ã¼ ¸Ê¿¡¼­ °´Ã¼¸¸ Á¦°ÅÇÒ »ÓÀÌ´Ù. ÀÌ ¹®Á¦´Â °´Ã¼ ºÐÇÒÀÇ °¡Àå ¾î·Á¿î Á¡ÀÌ¸ç ´Ù¾çÇÑ º¯È­¸¦ ÁÙ ¼ö ÀÖ´Â ºÎºÐÀ̹ǷΠ´ÙÀ½ Ç׿¡¼­ ÀÚ¼¼ÇÏ°Ô µû·Î ¿¬±¸ÇØ º¼ °ÍÀÌ´Ù.

¸Þ½ÃÁö ÇÁ·Î½ÃÀúÀÇ CShowMsg *µµ CWindow *·Î º¯°æÇÏ¿© ¸ðµç CWindow ÆÄ»ý Ŭ·¡½ºÀÇ ¸Þ½ÃÁö¸¦ ó¸®Çϵµ·Ï ÇÏ¿´´Ù. ÀÌÁ¦ºÎÅÍ ÀÛ¼ºµÇ´Â ¸ðµç Ŭ·¡½ºµéÀº µµ¿ì¹ÌÀÇ Áö¿øÀ» ¹Þ±â À§ÇØ CWindow·ÎºÎÅÍ »ó¼Ó¹Þ¾Æ¾ß ÇÑ´Ù.

¶ó.ÇÁ·¹ÀÓ

¿ø·¡ÀÇ CShowMsg Ŭ·¡½º´Â CShowMsg ÇÁ·¹ÀÓ Å¬·¡½º¿Í CShowMsgView ºä Ŭ·¡½º·Î ºÐÇҵȴÙ. È£½ºÆ®ÀÇ ÀÔÀå¿¡¼­ º¼ ¶§ ÇÁ·¹ÀÓÀÌ ÄÁÆ®·ÑÀ̹ǷΠ¿ø·¡ ÄÁÆ®·ÑÀÇ Å¬·¡½º À̸§À» ÇÁ·¹ÀÓÀÌ ´ë½Å »ç¿ëÇÏ°Ô µÈ´Ù. ShowMsg.h Çì´õ ÆÄÀÏ¿¡ ÇÁ·¹ÀÓ Å¬·¡½º¸¦ »õ·Î ¼±¾ðÇÑ´Ù.

 

enum {VIEW1,VIEW2};

 

class CShowMsgView;

class CShowMsg : public CWindow

{

     friend class CShowMsgView;

private:

     int x;

     int y;

     TCHAR *str;

 

public:

     CShowMsg();

     CShowMsgView *arView[2];

 

     BOOL Create(int x,int y,int w,int h,DWORD style,UINT id,HWND hParent);

     LRESULT OnMessage(UINT iMessage,WPARAM wParam,LPARAM lParam);

     void ChangeString(TCHAR *nstr);

     CShowMsgView *CreateView(int Type);

     void DeleteView(int nView);

     void SplitView();

     void UpdateViews(CShowMsgView *pView);

};

 

ÇÁ·¹ÀÓÀº ÄÁÆ®·Ñ ±× ÀÚüÀ̹ǷΠŬ·¡½º Çϳª·Î Ç¥ÇöµÇÁö¸¸ ºä´Â Çʿ信 µû¶ó ¾ó¸¶µçÁö ¸¸µé ¼ö ÀÖ´Ù. ±×·¡¼­ ÇÊ¿äÇÑ ºäÀÇ Å¸ÀÔÀ» ¿­°ÅÇüÀ¸·Î ¼±¾ðÇßÀ¸¸ç ÀÌ ¹øÈ£·Î ºäÀÇ Å¸ÀÔÀ» °ü¸®ÇÒ °ÍÀÌ´Ù. ÀÌ ¿¹Á¦´Â ´Ù¸¥ Á¾·ùÀÇ ºä¸¦ ¸¸µé ¼ö ÀÖ´Ù´Â °ÍÀ» º¸¿© ÁÖ±â À§ÇØ VIEW1, VIEW2 µÎ Á¾·ùÀÇ ºä¸¸ °¡Áú °èȹÀε¥ ÇÊ¿äÇѸ¸Å­ ºäÀÇ Å¸ÀÔÀ» ´õ ´Ã¸± ¼ö ÀÖ´Ù.

»õ·Î¿î ÇÁ·¹ÀÓ Å¬·¡½ºÀÎ CShowMsg´Â CWindow·ÎºÎÅÍ »ó¼Ó¹Þ¾ÒÀ¸¹Ç·Î ÀÏÁ¾ÀÇ À©µµ¿ìÀÌ¸ç µµ¿ì¹Ì Ŭ·¡½º¿¡ ÀÇÇØ °ü¸®µÈ´Ù. ¿ø·¡ÀÇ CShowMsg°¡ °¡Áö°í ÀÖ´ø x,y,str ¸â¹ö´Â ´Ù ÇÁ·¹ÀÓ¿¡ ¼ÓÇϹǷΠº°µµ·Î ºä¿¡ ³ª´©¾î ÁÙ °ÍÀº ¾ø´Ù. Àڱ⿡°Ô ¿¬°áµÈ ºäÀÇ ¸ñ·ÏÀ» °ü¸®Çϱâ À§ÇØ CShowMsgView* ÇüÀÇ ¹è¿­ arView¸¦ »õ·Î ¼±¾ðÇßÀ¸¸ç ÃÖ´ë 2°³±îÁöÀÇ ºä¸¦ ¿¬°áÇÒ ¼ö ÀÖµµ·Ï ¹è¿­ Å©±â´Â 2·Î Á¤Çß´Ù.

ÇÁ·¹ÀÓÀÌ ºäÀÇ Æ÷ÀÎÅÍ ¹è¿­À» °¡Áö¹Ç·Î ºä Ŭ·¡½º¿¡ ´ëÇÑ Àü¹æ ¼±¾ðÀÌ ÇÊ¿äÇÏ´Ù. ±×¸®°í ºä°¡ ÇÁ·¹ÀÓÀÇ ¸ðµç ¸â¹ö¸¦ ÀÚÀ¯·Ó°Ô ¾×¼¼½ºÇϱâ À§ÇØ ÇÁ·£µå·Î ÁöÁ¤Çß´Ù. À̵éÀº ´Ù¸¥ °´Ã¼Áö¸¸ ÇϳªÀÇ ÄÁÆ®·ÑÀ» ±¸¼ºÇÏ´Â ºÎǰµéÀ̹ǷΠÀÚ±âµé³¢¸®´Â ±»ÀÌ ¸â¹ö¸¦ ¼û±æ Çʿ䰡 ¾ø´Ù. ±× ¿Ü ºä¸¦ °ü¸®ÇÏ´Â ¸î °³ÀÇ ÇÔ¼öµéÀÌ Ãß°¡µÇ¾ú´Âµ¥ ÀÌ ÇÔ¼öµéÀº µû·Î »ó¼¼È÷ ºÐ¼®ÇØ º¼ °ÍÀÌ´Ù. CShowMsg ÀÇ ÄÚµå´Â ´ÙÀ½°ú °°ÀÌ Àü¸é ¼öÁ¤µÈ´Ù.

 

CShowMsg::CShowMsg()

{

     arView[0]=NULL;

     arView[1]=NULL;

}

 

BOOL CShowMsg::Create(int x,int y,int w,int h,DWORD style,UINT id,HWND hParent)

{

     CreateWindow("ShowMsgCtrl",NULL, style,

          x,y,w,h,hParent,(HMENU)id,GetModuleHandle(NULL),this);

     return TRUE;

}

 

void CShowMsg::ChangeString(TCHAR *nstr)

{

     lstrcpy(str,nstr);

     UpdateViews(NULL);

}

 

LRESULT CShowMsg::OnMessage(UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     RECT crt;

     int i;

 

     switch(iMessage) {

     case WM_CREATE:

          x=50;

          y=50;

          str=(TCHAR *)malloc(128);

          lstrcpy(str,"String");

          arView[0]=CreateView(VIEW1);

          return 0;

     case WM_DESTROY:

          free(str);

          for (i=0;i<2 && arView[i];i++) {

              DeleteView(i);

          }

          return 0;

     case WM_SIZE:

          GetClientRect(hWnd,&crt);

          if (arView[1]==NULL) {

              MoveWindow(arView[0]->hWnd,0,0,crt.right,crt.bottom,TRUE);

          } else {

              MoveWindow(arView[0]->hWnd,0,0,crt.right,crt.bottom/2-2,TRUE);

              MoveWindow(arView[1]->hWnd,0,crt.bottom/2+2,crt.right,crt.bottom/2-2,TRUE);

          }

          return 0;

     }

     return(DefWindowProc(hWnd,iMessage,wParam,lParam));

}

 

CShowMsgView *CShowMsg::CreateView(int Type)

{

     CShowMsgView *pView;

     switch (Type) {

     case VIEW1:

          pView=new CShowMsgView;

          break;

     }

 

     pView->pFrame=this;

     pView->Create(0,0,0,0,WS_CHILD | WS_VISIBLE,0,hWnd);

     return pView;

}

 

void CShowMsg::DeleteView(int nView)

{

     DestroyWindow(arView[nView]->hWnd);

     delete arView[nView];

     arView[nView]=NULL;

}

 

void CShowMsg::SplitView()

{

     if (arView[1]==NULL) {

          arView[1]=CreateView(VIEW1);

     } else {

          DeleteView(1);

     }

     SetFocus(arView[0]->hWnd);

     SendMessage(hWnd,WM_SIZE,0,0);

}

 

void CShowMsg::UpdateViews(CShowMsgView *pView)

{

     if (arView[0] != pView) {

          InvalidateRect(arView[0]->hWnd,NULL,TRUE);

     }

     if (arView[1] && arView[1] != pView) {

          InvalidateRect(arView[1]->hWnd,NULL,TRUE);

     }

}

 

»ý¼ºÀÚ¿¡¼­´Â µÎ °³ÀÇ ºä Æ÷ÀÎÅ͸¦ ¸ðµÎ NULL·Î ÃʱâÈ­ÇÏ¿© ÀÏ´Ü ºä°¡ ¾ø´Â »óÅ·ΠÄÁÆ®·ÑÀ» »ý¼ºÇß´Ù. WM_CREATE¿¡¼­ ÇÁ·¹ÀÓÀÇ ¸â¹öµéÀ» ÃʱâÈ­Çϰí CreateVeiw ÇÔ¼ö¸¦ È£ÃâÇÏ¿© VIEW1 ŸÀÔÀÇ ±âº» ºä¸¦ »ý¼ºÇÏ¿´´Ù. »ý¼ºÀÚ´Â ´Ü¼øÈ÷ Æ÷ÀÎÅÍ ¹è¿­À» ÃʱâÈ­ÇÑ °Í »ÓÀ̰í WM_CREATE¿¡¼­ ±âº» ºä¸¦ Çϳª¸¸ »ý¼ºÇϹǷΠ¿©±â±îÁöÀÇ µ¿ÀÛ¸¸ º¸¸é ¿ø·¡ÀÇ ShowMsg ÄÁÆ®·Ñ°ú µ¿ÀÏÇÏ°Ô ÃʱâÈ­µÈ °ÍÀÌ´Ù. ÇÏÁö¸¸ ½ÇÇàÁß¿¡ ºä¸¦ Ãß°¡·Î ´õ ¸¸µé ¼ö ÀÖ°í ´Ù¸¥ ŸÀÔÀÇ ºä·Î ±³Ã¼ °¡´ÉÇÏ´Ù´Â Â÷ÀÌÁ¡ÀÌ ÀÖ´Ù.

WM_DESTROY¿¡¼­´Â ÄÁÆ®·ÑÀÌ µ¿ÀûÀ¸·Î ÇÒ´çÇØ¼­ »ç¿ëÇÏ´ø str ¹öÆÛ¸¦ Á¤¸®ÇÏ°í »ý¼ºµÇ¾î ÀÖ´Â ¸ðµç ºä¿¡ ´ëÇØ DeleteView ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ºä¸¦ ÆÄ±«ÇÑ´Ù. Åë»ó arView[0]¿¡ ±âº» ºä¸¸ »ý¼ºµÇ¾î ÀÖ°ÚÁö¸¸ ½ÇÇàÁß¿¡ ºä¸¦ ´õ ¸¸µé¾ú´Ù¸é Ãß°¡·Î ¸¸µç ºä±îÁöµµ °°ÀÌ ÆÄ±«ÇÔÀ¸·Î½á ÇÁ·¹ÀÓÀÌ °Å´À¸®°í ÀÖ´Â ¸ðµç ºä¸¦ Á¦°ÅÇÏ´Â °ÍÀÌ´Ù.

WM_SIZE¿¡¼­´Â ºä¸¦ ÀÚ½ÅÀÇ ÀÛ¾÷ ¿µ¿ª¿¡ ÀûÀýÈ÷ ¹èÄ¡Çϴµ¥ ºä°¡ Çϳª¹Û¿¡ ¾øÀ¸¸é ÀÛ¾÷ ¿µ¿ª Àüü¸¦ ºä·Î °¡µæ ä¿î´Ù. ÀÌ·¸°Ô µÇ¸é ÇÁ·¹ÀÓÀº ºä¿¡ ÀÇÇØ ¿ÏÀüÈ÷ µ¤¿©Áö¹Ç·Î »ç¿ëÀÚ¿¡°Ô´Â ÀüÇô º¸ÀÌÁö ¾Ê´Â »óŰ¡ µÉ °ÍÀÌ´Ù. ¸¸¾à µÎ °³ÀÇ ºä°¡ ÀÖÀ¸¸é µÎ ºä°¡ ÀÛ¾÷ ¿µ¿ªÀÇ Àý¹Ý¾¿À» ³ª´©¾î °¡Áö´Âµ¥ À̶§ µÎ ºä »çÀÌ·Î ¾à°£ÀÇ ¿©¹éÀ» µÎ¸é ÇÁ·¹ÀÓÀÇ ÀÛ¾÷ ¿µ¿ªÀÌ »ì¦ µå·¯³­´Ù. ÀÌ ¿©¹éÀº ºäÀÇ ºÐÇÒ ºñÀ²À» Á¶Á¤ÇÏ´Â À¯Àú ÀÎÅÍÆäÀ̽º·Î Ȱ¿ëµÈ´Ù. »ý¼ºµÇ¾î ÀÖ´Â ºäÀÇ °³¼ö´Â 1 ¶Ç´Â 2Àε¥ arView[1]ÀÌ NULLÀΰ¡ ¾Æ´Ñ°¡¸¦ º¸¸é ½±°Ô ¾Ë ¼ö ÀÖ´Ù.

ÆÄ±«ÀÚ´Â µû·Î Á¤ÀÇÇÏÁö ¾ÊÀ¸¹Ç·Î CWindowÀÇ ÆÄ±«ÀÚ¸¦ »ó¼Ó ¹Þ¾Æ °´Ã¼°¡ ÆÄ±«µÉ ¶§ ¸Ê¿¡¼­ ÀÚ½ÅÀ» Á¦°ÅÇÒ °ÍÀÌ´Ù. CShowMsgÇÁ·¹ÀÓÀº ¾îµð±îÁö³ª ºä¸¦ ´ã±â À§ÇÑ ²®µ¥±âÀ̱⠶§¹®¿¡ È­¸é Ãâ·ÂÀ» ÇÏÁö ¾ÊÀ¸¸ç Űº¸µå¿Í ¸¶¿ì½º °ü·Ã ¸Þ½ÃÁöµµ ó¸®ÇÏÁö ¾Ê´Â´Ù. ÇÁ·¹ÀÓÀÇ OnMessage ÇÔ¼ö´Â ÃʱâÈ­, Á¾·á ó¸®, ºä ¹èÄ¡¸¸À» ´ã´çÇÒ »ÓÀÌ¸ç »ç¿ëÀÚ¿ÍÀÇ »óÈ£ ÀÛ¿ëÀº ÀÌÁ¦ °¢°¢ÀÇ ºä·Î ¿Å°ÜÁú °ÍÀÌ´Ù.

¹Ù.ºä

ºä Ŭ·¡½º´Â ´ÙÀ½°ú °°ÀÌ ¼±¾ðÇÑ´Ù. ShowMsg.h Çì´õ ÆÄÀÏÀÇ ÇÁ·¹ÀÓ Å¬·¡½º ¼±¾ðºÎ ´ÙÀ½¿¡ ÀÌ Å¬·¡½º¸¦ ¼±¾ðÇÏ¸é µÈ´Ù.

 

class CShowMsgView : public CWindow

{

public:

     CShowMsgView() { ViewType=VIEW1; }

     CShowMsg *pFrame;

     int ViewType;

 

     BOOL Create(int x,int y,int w,int h,DWORD style,UINT id,HWND hParent);

     LRESULT OnMessage(UINT iMessage,WPARAM wParam,LPARAM lParam);

};

 

ºäµµ CWindow·ÎºÎÅÍ »ó¼Ó¹ÞÀ¸¹Ç·Î ÀÏÁ¾ÀÇ À©µµ¿ìÀÌ¸ç µ¿ÀÏÇÑ °´Ã¼ ¸Ê¿¡ µî·ÏµÇ°í °ü¸®µÈ´Ù. »ý¼ºÀÚ¿¡¼­ ºäÀÇ Å¸ÀÔÀ» VIEW1(=0)·Î ÃʱâÈ­ÇÏ¿© ÀÚ½ÅÀÌ 0¹ø ŸÀÔÀÇ ºä¶ó´Â °ÍÀ» ±â·ÏÇØ ³õ´Â´Ù. pFrameÀº ÀڽŰú ¿¬°áµÈ ÇÁ·¹ÀÓ °´Ã¼ÀÇ Æ÷ÀÎÅÍÀε¥ ÀÌ Æ÷ÀÎÅ͸¦ »ç¿ëÇÏ¿© ÇÁ·¹ÀÓÀÇ ¸â¹ö¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù. ÀÚ½ÅÀ» »ý¼ºÇÏ´Â Create ¸â¹ö ÇÔ¼ö¿Í ¸Þ½ÃÁö¸¦ ó¸®ÇÏ´Â OnMessage °¡»ó ÇÔ¼ö¸¦ °¡Áö´Âµ¥ ÀÌ ÇÔ¼öµéÀº ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÑ´Ù.

 

BOOL CShowMsgView::Create(int x,int y,int w,int h,DWORD style,UINT id,HWND hParent)

{

     CreateWindow("ShowMsgView",NULL, style | WS_CLIPCHILDREN,

          x,y,w,h,hParent,(HMENU)id,GetModuleHandle(NULL),this);

     return TRUE;

}

 

LRESULT CShowMsgView::OnMessage(UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     HDC hdc;

     PAINTSTRUCT ps;

     RECT crt;

 

     switch(iMessage) {

     case WM_KEYDOWN:

          GetClientRect(hWnd,&crt);

          switch (wParam) {

          case VK_LEFT:

              if (pFrame->x > 0)

                   pFrame->x--;

              break;

          case VK_RIGHT:

              if (pFrame->x < crt.right-50)

                   pFrame->x++;

              break;

          case VK_UP:

              if (pFrame->y > 0)

                   pFrame->y--;

              break;

          case VK_DOWN:

              if (pFrame->y < crt.bottom-10)

                   pFrame->y++;

              break;

          }

          InvalidateRect(hWnd,NULL,TRUE);

          pFrame->UpdateViews(this);

          return 0;

     case WM_LBUTTONDOWN:

          if (lstrcmp(pFrame->str,"String") == 0) {

              pFrame->ChangeString("¹®ÀÚ¿­");

          } else {

              pFrame->ChangeString("String");

          }

          SetFocus(hWnd);

          return 0;

     case WM_PAINT:

          GetClientRect(hWnd,&crt);

          hdc=BeginPaint(hWnd, &ps);

          Rectangle(hdc,0,0,crt.right,crt.bottom);

          TextOut(hdc,pFrame->x,pFrame->y,pFrame->str,lstrlen(pFrame->str));

          EndPaint(hWnd, &ps);

          return 0;

     case WM_DESTROY:

          return 0;

     }

     return(DefWindowProc(hWnd,iMessage,wParam,lParam));

}

 

Create ÇÔ¼ö´Â "ShowMsgView" À©µµ¿ì Ŭ·¡½º·ÎºÎÅÍ ÀÚ½ÅÀ» »ý¼ºÇ쵂 À̶§ »ç¿ëÀÚ Á¤ÀÇ µ¥ÀÌÅÍ·Î this¸¦ Àü´ÞÇÏ¿© °´Ã¼ ¸Ê¿¡ ÀÚ½ÅÀ» µî·ÏÇÑ´Ù. ºäÀÇ È­¸é Ãâ·Â ¹× Űº¸µå, ¸¶¿ì½º 󸮴 ¿ø·¡ÀÇ ShowMsg ÄÁÆ®·ÑÀÇ µ¿ÀÛ ¹æ½Ä°ú µ¿ÀÏÇÏ´Ù. Áï, Ä¿¼­ À̵¿Å°·Î ¸Þ½ÃÁöÀÇ ÁÂÇ¥¸¦ À̵¿ÇÏ°í ¸¶¿ì½º ¿ÞÂÊ ¹öưÀ¸·Î ¹®ÀÚ¿­À» º¯°æÇϸç ÁÂÇ¥ À§Ä¡¿¡ ¹®ÀÚ¿­À» Ãâ·ÂÇÑ´Ù. À̶§ È­¸é Ãâ·Â¿¡ ÂüÁ¶ÇÒ x,y,str µîÀÇ º¯¼ö´Â ÇÁ·¹ÀÓÀÌ °¡Áö°í ÀÖÀ¸¹Ç·Î pFrame Æ÷ÀÎÅͷκÎÅÍ ¾ò¾î¾ß ÇÑ´Ù.

ÀÌ·Î½á ±âÁ¸ÀÇ ShowMsg ÄÁÆ®·ÑÀÌ ÇÁ·¹ÀÓ°ú ºä·Î ºÐÇҵǾú´Ù. ³»ºÎ °´Ã¼ÀÎ ÇÁ·¹ÀÓÀº x,y,str º¯¼ö¸¦ °¡Áö¸ç Àڽſ¡°Ô ¿¬°áµÈ Â÷ÀÏµå ºä¸¦ °ü¸®ÇÏ°í ºä´Â ÀÌ º¯¼öµéÀÇ ³»¿ëÀ» È­¸é¿¡ Ãâ·ÂÇÏ°í »ç¿ëÀڷκÎÅÍ ÀÔ·Â¹Þ¾Æ º¯¼öµéÀ» Á¶ÀÛÇÑ´Ù. Á¦´ë·Î ºÐÇÒÀÌ µÇ¾ú´ÂÁö Á¡°ËÇØ º¸±â À§ÇØ ShowMsgTest.cppÀÇ Å×½ºÆ® Äڵ带 ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇØ º¸ÀÚ.

 

CShowMsg msg;

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     switch(iMessage) {

     case WM_CREATE:

          msg.Create(0,0,0,0,WS_CHILD | WS_VISIBLE,1,hWnd);

          CreateWindow("button","â ºÐÇÒ",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,

              10,10,100,25,hWnd,(HMENU)1,g_hInst,NULL);

          return 0;

     case WM_COMMAND:

          switch (LOWORD(wParam)) {

          case 1:

              msg.SplitView();

              break;

          }

          return 0;

     case WM_SIZE:

          MoveWindow(msg.hWnd,0,50,LOWORD(lParam),HIWORD(lParam)-50,TRUE);

          return 0;

     case WM_DESTROY:

          PostQuitMessage(0);

          return 0;

     }

     return(DefWindowProc(hWnd,iMessage,wParam,lParam));

}

 

ÀÛ¾÷ ¿µ¿ª »ó´Ü¿¡ "â ºÐÇÒ"¹öưÀ» ¹èÄ¡ÇßÀ¸¸ç ÀÌ ¹öưÀ» ´©¸£¸é ÇÁ·¹ÀÓÀÇ SplitView ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ÄÁÆ®·ÑÀÇ ÀÛ¾÷ ¿µ¿ªÀ» ´ÙÀ½°ú °°ÀÌ ºÐÇÒÇÒ °ÍÀÌ´Ù. ¸¸¾à ÀÌ¹Ì ºÐÇҵǾî ÀÖ´Ù¸é ºÐÇÒÀ» Ãë¼ÒÇÑ´Ù. ÇϳªÀÇ ÇÁ·¹ÀÓ¿¡ µÎ °³ÀÇ ºä°¡ »ý¼ºµÈ´Ù.

 

ShowMsg ÄÁÆ®·ÑÀÇ ºä´Â ½ºÅ©·ÑÀ» ÇÏÁö ¾Ê±â ¶§¹®¿¡ ´çÀå ºÐÇÒÀÇ ÀÌÁ¡À» ´À³¢±â ¾î·ÆÁö¸¸ ÀÏ´Ü ºÐÇÒÀÌ µÇ¾úÀ¸¹Ç·Î Â÷ÈÄ¿¡ ½ºÅ©·ÑÀ̳ª ÆíÁý ±â´ÉÀÌ µé¾î°¡¸é µÎ °³ÀÇ ºä°¡ ¹®¼­ÀÇ ´Ù¸¥ ºÎºÐÀ» º¸¿©Áְųª ÆíÁýÇÒ ¼ö ÀÖ´Ù. ÀÏ´Ü ½ÇÇà °á°ú¸¸ º¸°í ºÐ¼®Àº ´ÙÀ½ Ç׿¡¼­ »ó¼¼ÇÏ°Ô ÇØ º¸ÀÚ.

¶ó.â ºÐÇÒ

ShowMsg ÄÁÆ®·ÑÀÌ ÇÁ·¹ÀÓ°ú ºä·Î ºÐÇҵǾúÀ¸¹Ç·Î »ý¼ºµÇ´Â ÀýÂ÷¿¡µµ ¾à°£ÀÇ º¯È­°¡ »ý±ä´Ù. ÇÁ·¹ÀÓÀº ÀÌ ÄÁÆ®·ÑÀ» ÇÊ¿ä·ÎÇϴ ȣ½ºÆ® ÄÁÆ®·Ñ¿¡ ÀÇÇØ »ý¼ºµÇ´Âµ¥ ¿¹Á¦ÀÇ °æ¿ì ShowMsgTest ÀÇ WM_CREATE¿¡¼­ msg °´Ã¼ÀÇ Create ¸â¹ö ÇÔ¼ö¸¦ È£ÃâÇÔÀ¸·Î½á ÇÁ·¹ÀÓÀ» »ý¼ºÇÑ´Ù. ÇÁ·¹ÀÓÀÇ »ý¼ºÀÚ´Â ºä¸¦ »ý¼ºÇÏÁö ¾ÊÀ¸¹Ç·Î ÇÁ·¹ÀÓÀº ÀϽÃÀûÀ¸·Î ºä°¡ ¾ø´Â ºó »óÅ·Π»ý¼ºµÇ¾ú´Ù°¡ WM_CREATE ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§ ±âº» ºä¸¦ »ý¼ºÇÑ´Ù. ºä´Â ÇÁ·¹ÀÓ¿¡ ÀÇÇØ °ü¸®µÇ´Âµ¥ ÇÑ ¹ø »ý¼ºµÇ¾î °è¼Ó »ç¿ëµÇ´Â °ÍÀÌ ¾Æ´Ï¶ó ¼ö½Ã·Î »ý¼º ¹× ÆÄ±«µÉ ¼ö ÀÖ´Ù. ±×·¡¼­ ÇÁ·¹ÀÓÀº ºä¸¦ °ü¸®ÇÏ´Â º°µµÀÇ ¸â¹ö ÇÔ¼öµéÀ» °¡Áø´Ù.

CreateView

CreateView ÇÔ¼ö´Â »ý¼ºÇÒ ºäÀÇ Å¸ÀÔÀ» Type Àμö·Î Àü´Þ¹ÞÀ¸¸ç ÀÌ Àμö¿¡ µû¶ó ´Ù¸¥ Á¾·ùÀÇ ºä¸¦ »ý¼ºÇÒ ¼ö ÀÖ´Ù. Type ÀμöÀÇ °ª¿¡ µû¶ó new ¿¬»êÀÚ·Î »õ·Î¿î ºä °´Ã¼¸¦ »ý¼ºÇϴµ¥ ÇöÀç ÀÌ ÄÁÆ®·ÑÀÌ Áö¿øÇÏ´Â ºäÀÇ Å¸ÀÔÀº VIEW1 Çϳª»ÓÀÌÁö¸¸ ¾ó¸¶µçÁö ´Ã¾î³¯ ¼ö ÀÖ´Â ±¸Á¶¸¦ °¡Áö°í ÀÖ´Ù. Àá½Ã Èĸé VIEW2¸¦ ¸¸µå´Â ½Ç½ÀÀ» ÇÏ°Ô µÉ °ÍÀÌ´Ù.

°´Ã¼¸¦ »ý¼ºÇÑ ÈÄ ºäÀÇ Create ÇÔ¼ö¸¦ È£ÃâÇÏ¿© À©µµ¿ì¸¦ »ý¼ºÇÑ´Ù. º¸´Ù½ÃÇÇ °´Ã¼ ÀÚü¸¦ »ý¼ºÇÏ´Â °Í°ú À©µµ¿ì¸¦ »ý¼ºÇÏ´Â °ÍÀÌ ºÐ¸®µÇ¾î Àִµ¥ ÀÌ Á¡¿¡ ´ëÇØ¼­´Â 1±Ç¿¡¼­µµ ´Ù·é ¹Ù ÀÖ´Ù. Create ÇÔ¼öÀÇ ¸¶Áö¸· Àμö·Î ÇÁ·¹ÀÓÀÇ ÇÚµé hWnd¸¦ Àü´ÞÇÏ¿´À¸¹Ç·Î ºä´Â ÇÁ·¹ÀÓÀÇ ÀÚ½Ä À©µµ¿ì·Î »ý¼ºµÈ´Ù. »ý¼ºÇÒ ¶§ ºäÀÇ ÁÂÇ¥¿Í Å©±â´Â Àǹ̰¡ ¾øÀ¸¹Ç·Î ¸ðµÎ 0À¸·Î ÁÖ¾ú´Ù. ¾îÂ÷ÇÇ ºä´Â ÇÁ·¹ÀÓÀÇ WM_SIZE¿¡¼­ Àç¹èÄ¡µÈ´Ù. Create°¡ È£ÃâµÉ ¶§ ºä°¡ °´Ã¼ ¸Ê¿¡ µî·ÏµÉ °ÍÀÌ´Ù.

ºä °´Ã¼¸¦ »ý¼ºÇϱâ Á÷Àü¿¡ ºäÀÇ pFrame ¸â¹ö¿¡ ÇÁ·¹ÀÓ ÀÚ½ÅÀÇ Æ÷ÀÎÅÍÀÎ this¸¦ ´ëÀÔÇÏ¿© »õ·Î »ý¼ºµÈ ºä°¡ ºÎ¸ð ÇÁ·¹ÀÓÀÇ ¸â¹ö¸¦ ÂüÁ¶ÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. ºäÀÇ WM_CREATE¿¡¼­ºÎÅÍ ÇÁ·¹ÀÓÀ» ÂüÁ¶ÇÒ ¼ö ÀÖÀ¸¹Ç·Î ÀÌ ´ëÀÔ¹®Àº ºäÀÇ CreateÈ£Ã⺸´Ù ¸ÕÀú ¿Í¾ß ÇÑ´Ù. pView->pFrame¿¡ this¸¦ ´ëÀÔÇÏ´Â °ÍÀº "³Ê´Â ÀÌÁ¦ºÎÅÍ ³ªÀÇ Á¹º´ÀÌ´Ù. ¾ÕÀ¸·Î ³ªÀÇ ¸â¹öÀÎ x,y,strÀ» ÂüÁ¶Ç϶ó"´Â Áö½Ã¸¦ ³»¸®´Â °ÍÀÌ´Ù. CreateView ÇÔ¼ö´Â ŸÀÔ¿¡ ¸Â´Â ºä °´Ã¼, ºä À©µµ¿ì¸¦ »ý¼ºÇÏ°í ºä¿¡°Ô ºÎ¸ð Æ÷ÀÎÅ͸¦ °¡¸£ÃÄ ÁØ ÈÄ »ý¼ºµÈ ºäÀÇ Æ÷ÀÎÅ͸¦ ¸®ÅÏÇÑ´Ù.

DeleteView

DeleteView ÇÔ¼ö´Â ÆÄ±«ÇÒ ºäÀÇ Ã·ÀÚ¸¦ nView Àμö·Î ¹Þ¾ÆµéÀ̴µ¥ ShowMsg ÄÁÆ®·ÑÀº ÃÖ´ë µÎ °³±îÁöÀÇ ºä¸¸ °¡Áú ¼ö ÀÖÀ¸¹Ç·Î nView´Â 0 ¶Ç´Â 1 µÑ Áß ÇϳªÀÌ´Ù. Àμö·Î Àü´ÞµÈ nView°ª¿¡ µû¶ó arView[nView] °´Ã¼°¡ ÆÄ±« ´ë»óÀÌ µÈ´Ù. »ý¼ºÇÒ ¶§ °´Ã¼¿Í À©µµ¿ì¸¦ µû·Î ¸¸µé¾úÀ¸¹Ç·Î ÆÄ±«ÇÒ ¶§µµ À©µµ¿ì¿Í °´Ã¼¸¦ °¢°¢ ÆÄ±«ÇØ¾ß ÇÑ´Ù.

DestroyWindow ÇÔ¼ö·Î ºäÀÇ À©µµ¿ì¸¦ ÆÄ±«ÇÒ ¶§ WM_DESTROY ¸Þ½ÃÁö°¡ Àü´ÞµÇ¸ç ÀÌ ´Ü°è¿¡¼­ ºä°¡ ½º½º·Î Á¾·á 󸮸¦ ÇÒ ¼ö ÀÖ´Â ±âȸ°¡ Á¦°øµÈ´Ù. ShowMsgViewÀÇ °æ¿ì º°µµÀÇ ¸â¹ö°¡ ¾øÀ¸¹Ç·Î Ưº°È÷ Á¤¸®ÇÒ ³»¿ëÀÌ ¾øÁö¸¸ ApiEditÀÇ ºä´Â Á¤·Ä ¹öÆÛ, ´õºí ¹öÆÛ¸µ ºñÆ®¸Ê, ºÐ¼®±â Á¦°Å µî ÇÒ ÀÏÀÌ ¸¹±â ¶§¹®¿¡ WM_DESTROY ¸Þ½ÃÁö¸¦ ¹Ýµå½Ã ¹Þ¾Æ¾ß ÇÑ´Ù. ¸¸¾à ÀÌ ¸Þ½ÃÁö°¡ Á¦´ë·Î Àü´ÞµÇÁö ¾ÊÀ¸¸é ´çÀåÀº ÀÌ»óÀÌ ¾ø´Â °Íó·³ º¸À̰ÚÁö¸¸ ½É°¢ÇÑ ¸®¼Ò½º ´©ÃâÀÌ ¹ß»ýÇÒ °ÍÀÌ´Ù.

À©µµ¿ì¸¦ ÆÄ±«ÇÑ ÈÄ delete ¿¬»êÀÚ·Î ºä °´Ã¼¸¦ ÆÄ±«Çϴµ¥ ÀÌ ´Ü°è¿¡¼­ ºäÀÇ ÆÄ±«ÀÚ°¡ È£ÃâµÈ´Ù. CShowMsgView Ŭ·¡½º´Â ÆÄ±«ÀÚ¸¦ °¡ÁöÁö ¾ÊÀ¸¹Ç·Î CWindow·ÎºÎÅÍ »ó¼Ó¹ÞÀº ~CWindow°¡ È£ÃâµÉ °ÍÀ̸ç ÀÌ ÇÔ¼ö¿¡¼­ RemoveObject ÇÔ¼ö¸¦ È£ÃâÇÏ¿© °´Ã¼ ¸Ê¿¡¼­ ÀÚ½ÅÀ» Á¦°ÅÇÑ´Ù. °´Ã¼±îÁö Á¦°ÅÇÑ ÈÄ arView[nView]¿¡ NULLÀ» ¸í½ÃÀûÀ¸·Î ´ëÀÔÇÔÀ¸·Î½á ÀÌ ºä°¡ ÆÄ±«µÇ¾úÀ½À» Ç¥½ÃÇØ µÎ´Âµ¥ ±×·¡¾ß ´ÙÀ½ WM_SIZE ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§ ÆÄ±«µÈ ºä¸¦ »©°í ³ª¸ÓÁö ºä¸¦ Á¦´ë·Î ¹èÄ¡ÇÒ ¼ö ÀÖ´Ù.

ÇÁ·¹ÀÓÀº ÀÌ µÎ ÇÔ¼ö·Î ±âº»ÀûÀÎ ºä °ü¸®¸¦ Çϴµ¥ ¿¹Á¦¿¡¼­ ±× °úÁ¤À» Á¡°ËÇØ º¸ÀÚ. È£½ºÆ®¿¡ ÀÇÇØ ÇÁ·¹ÀÓÀÌ »ý¼ºµÉ ¶§ WM_CREATE ¸Þ½ÃÁö°¡ Àü´ÞµÇ¸ç ÀÌ ¸Þ½ÃÁö¿¡¼­ CreateView ÇÔ¼ö·Î VIEW1 ŸÀÔÀÇ ºä¸¦ »ý¼ºÇÑ ÈÄ arView[0]¿¡ ±× Æ÷ÀÎÅ͸¦ ÀúÀåÇÑ´Ù. WM_SIZE¿¡¼­ ÀÌ ºä¸¦ ÀÛ¾÷ ¿µ¿ª¿¡ °¡µæ ä¿ì¹Ç·Î ÇÁ·¹ÀÓÀÌ ¸¶Ä¡ ºäÀÎ °Í ó·³ º¸ÀÏ °ÍÀÌ´Ù. ÇÁ·¹ÀÓÀÌ ÆÄ±«µÉ ¶§ WM_DESTROY ¸Þ½ÃÁö°¡ Àü´ÞµÇ°í ÀÌ ¸Þ½ÃÁö¿¡¼­ »ý¼ºµÇ¾î ÀÖ´Â ¸ðµç ºä¸¦ Á¦°ÅÇÑ´Ù.

À̰ÍÀÌ ShowMsg ÄÁÆ®·ÑÀÇ ÀϹÝÀûÀÎ ÀÏ»ýÀÌ´Ù. ShowMsgTest ¿¹Á¦°¡ ½ÇÇàµÉ ¶§ È£½ºÆ®, ÇÁ·¹ÀÓ, ºä ¼øÀ¸·Î »ý¼ºµÇ¾ú´Ù°¡ Á¾·áµÉ ¶§´Â Á¤È®ÇÏ°Ô ¿ª¼øÀ¸·Î ºä, ÇÁ·¹ÀÓ, È£½ºÆ® ¼øÀ¸·Î ÆÄ±«µÈ´Ù. âÀ» ºÐÇÒÇÒ ¶§´Â ÀÌ·± ÀÏ»óÀûÀÎ ¼ø¼­¸¦ ¹þ¾î³ª ½Ç½Ã°£À¸·Î ºä°¡ »ý¼ºµÇ¾ú´Ù°¡ ÆÄ±«µÉ ¼ö Àִµ¥ ÀÌÁ¦ âÀÌ ºÐÇҵǴ °úÁ¤À» ºÐ¼®ÇØ º¸ÀÚ.

SplitView

âÀ» ºÐÇÒÇÏ´Â ÇÔ¼ö´Â SplitViewÀε¥ ÀÌ ÇÔ¼öÀÇ Á¤È®ÇÑ µ¿ÀÛÀº ºÐÇÒ »óŸ¦ Åä±ÛÇÏ´Â °ÍÀÌ´Ù. Áï, ºä°¡ Çϳª¹Û¿¡ ¾øÀ¸¸é µÑ·Î ºÐÇÒÇϰí ÀÌ¹Ì ºÐÇÒµÇ¾î ºä°¡ µÑÀ̸é Çϳª¸¦ ÆÄ±«ÇÏ¿© ºÐÇÒÀ» Ãë¼ÒÇÑ´Ù. ºÐÇÒÀÌ µÇ¾î Àִ°¡ ¾Æ´Ñ°¡´Â arView[1]¿¡ ºäÀÇ Æ÷ÀÎÅͰ¡ ´ëÀԵǾî ÀÖ´ÂÁö ¾Æ´ÑÁö·Î ÆÇ´ÜÇÑ´Ù. ¸¸¾à arView[1]ÀÌ NULLÀ̸é ÇöÀç arView[0] ºä Çϳª¹Û¿¡ ¾ø´Ù´Â ¶æÀ̹ǷΠarView[1]¿¡µµ »õ·Î¿î ºä¸¦ »ý¼ºÇÑ´Ù. À̶§´Â ¹°·Ð CreateView ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù.

arView[0]´Â Ç×»ó Á¸ÀçÇϸç arView[1]ÀÌ ÀÖÀ¸¸é ºä°¡ µÑÀÌ°í ¾øÀ¸¸é ºä°¡ Çϳª»ÓÀÌ´Ù. ¸¸¾à arView[1]ÀÌ NULLÀÌ ¾Æ´Ï¶ó¸é µÎ °³ÀÇ ºä·Î ÀÌ¹Ì ºÐÇҵǾî ÀÖ´Â »óÅÂÀ̹ǷΠarView[1]À» ÆÄ±«Çϸç À̶§´Â DeleteView ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù. Áï, ÀÌ ÇÔ¼ö°¡ È£ÃâµÉ ¶§¸¶´Ù ºä°¡ Çϳª, µÑÀÎ »óŸ¦ ¹Ýº¹ÇÏ´Â °ÍÀÌ´Ù. ºÐÇÒ »óŰ¡ ¹Ù²ð ¶§¸¶´Ù ÇÁ·¹ÀÓÀ¸·Î WM_SIZE ¸Þ½ÃÁö¸¦ º¸³» ºä¸¦ Àç¹èÄ¡ÇÏ¿´´Ù.

ÀÌ ¿¹Á¦ÀÇ °æ¿ì SplitView ÇÔ¼ö´Â È£½ºÆ®ÀÇ "â ºÐÇÒ"¹öư¿¡ ÀÇÇØ È£ÃâµÇ´Âµ¥ ÀÌ ¹æ¹ýº¸´Ù´Â ÄÁÆ®·Ñ ½º½º·Î ºÐÇÒÀ» ó¸®ÇÏ´Â °ÍÀÌ ÁÁ´Ù. ÄÁÆ®·ÑÀÌ ½º½º·Î âÀ» ºÐÇÒÇÏ·Á¸é È­¸é¿¡ â ºÐÇÒÀ» ½ÃÀÛÇÒ ¼ö ÀÖ´Â À¯Àú ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇØ¾ß Çϴµ¥ º¸Åë ¼öÁ÷ ½ºÅ©·Ñ ¹Ù À§¿¡ Á¶±×¸¸ »ç°¢ ¿µ¿ª(Split Box)À» µå·¡±×ÇÏ´Â °ÍÀ¸·Î â ºÐÇÒÀ» ½ÃÀÛÇÑ´Ù. ÀÌ ¿¹Á¦´Â ½ºÅ©·Ñ ¹Ù°¡ ¾ø±â ¶§¹®¿¡ ÄÁÆ®·Ñ ½º½º·Î ºÐÇÒÀ» ½ÃÀÛÇÒ ¼ö ¾øÀ¸¸ç ¿ÜºÎ¿¡¼­ ¸í·ÉÀ» Àü´ÞÇÏ´Â ¹æ¹ýÀ» »ç¿ëÇß´Ù.

¸¸¾à ½ºÅ©·Ñ ¹Ù À§¿¡ ½ºÇø´ ¹Ú½º¸¦ ¸¸µç´Ù¸é ÀÌ ¹Ú½º¸¦ µå·¡±×ÇÏ¿© âÀ» ºÐÇÒÇÑ´Ù. °´Ã¼ ºÐÇÒ½ÃÀÇ ¿ªÇÒ ºÐ´ã ¿øÄ¢¿¡ µû¶ó »ç¿ëÀÚ¿ÍÀÇ »óÈ£ ÀÛ¿ëÀº ºäÀÇ ¸òÀ̹ǷΠâºÐÇÒ ¸í·ÉÀ» ¹Þ´Â ÁÖüµµ ºäÀÌ´Ù. ±×·¯³ª ºä°¡ ºÐÇÒ ¸í·ÉÀ» ¹Þ¾ÆµéÀÌ´õ¶óµµ ºÐÇÒÀÇ ÁÖü´Â Ç×»ó ÇÁ·¹ÀÓÀ̾î¾ß ÇÏ¸ç ºä´Â ´ÜÁö »ç¿ëÀÚÀÇ ºÐÇÒ ¿äûÀ» ÇÁ·¹ÀÓÀ¸·Î Àü´ÞÇÒ ¼ö¸¸ ÀÖ´Ù. ºä°¡ ½º½º·Î ÇüÁ¦ ºä¸¦ ¸¸µé ¼ö´Â ¾ø´Ù.

UpdateViews

âÀÌ ºÐÇÒµÈ »óÅ¿¡¼­´Â ÇϳªÀÇ ÇÁ·¹ÀÓ¿¡ º¹¼ö °³ÀÇ ºä°¡ Á¸ÀçÇϴµ¥ À̶§ ÇÑÂÊ ºä¿¡¼­ º¯È­°¡ ¹ß»ýÇÏ¸é ºÐÇÒµÈ ¸ðµç ºäµµ Áï½Ã º¯È­¸¦ ¹Ý¿µÇØ¾ß ÇÑ´Ù. ¿Ö³ÄÇÏ¸é ºÐÇÒµÈ ¸ðµç ºä´Â °°Àº ÇÁ·¹ÀÓ¿¡ ¼ÓÇÑ µ¥ÀÌÅ͸¦ ´Ù¸¥ ¹æ½ÄÀ¸·Î ¶Ç´Â ´Ù¸¥ ºÎºÐÀ» º¸¿©ÁÖ´Â °Í »ÓÀ̱⠶§¹®ÀÌ´Ù. ÇÁ·¹ÀÓ¿¡ Á¶±ÝÀÌ¶óµµ º¯È­°¡ »ý±â¸é ÀÌ ÇÁ·¹ÀÓ°ú ¿¬°áµÈ ¸ðµç ºä´Â °»½ÅµÇ¾î¾ß ÇÑ´Ù.

ÀÌ·± 󸮴 ºñÁÖ¾ó ½ºÆ©µð¿ÀÀÇ ÆíÁý±â·Îµµ ½±°Ô È®ÀÎÇÒ ¼ö Àִµ¥ âÀ» ºÐÇÒÇÑ »óÅ¿¡¼­ ÇÑÂÊ¿¡ ÅØ½ºÆ®¸¦ ÀÔ·ÂÇÏ¸é ¹Ý´ëÂÊ ºäµµ °»½ÅµÇ¾î »õ·Î ÀÔ·ÂµÈ ÅØ½ºÆ®°¡ º¸ÀÏ °ÍÀÌ´Ù. ¸¸¾à ÀÌ·± °»½ÅÀÌ Á¦´ë·Î µÇÁö ¾Ê´Â´Ù¸é âºÐÇÒÀº ¿ÀÈ÷·Á È¥¶õ¸¸ ÃÊ·¡ÇÏ°Ô µÈ´Ù.

»ç¿ëÀÚ¿ÍÀÇ »óÈ£ ÀÛ¿ëÀº ºÐÇÒ ±¸Á¶»ó ºä°¡ ´ã´çÇϴµ¥ ±× Áß¿¡¼­ ÇöÀç Æ÷Ä¿½º¸¦ °¡Áø Ȱ¼º ºä°¡ »ç¿ëÀڷκÎÅÍ ÀÔ·ÂÀ» ¹Þ¾ÆµéÀδÙ. ¸¸¾à »ç¿ëÀÚ°¡ ºä1¿¡¼­ ¾î¶² ÆíÁýÀ» Çß´Ù°í ÇÑ´Ù¸é ºä1Àº ÀÌ ÀÔ·ÂÀ» ¹Þ¾Æµé¿© ÇÁ·¹ÀÓÀÇ µ¥ÀÌÅ͸¦ º¯°æÇÒ °ÍÀÌ´Ù. À̶§ ³ª¸ÓÁö ºä¿¡°Ôµµ º¯°æ »ç½ÇÀ» ¾Ë·Á¾ß Çϳª ºä1Àº ³ª¸ÓÁö ºä¿¡°Ô ¾Ë·ÁÁÙ ¼ö°¡ ¾ø´Ù. ºä³¢¸®´Â ¼­·Î ÇüÁ¦ÀÌÁö¸¸ ¼­·ÎÀÇ Á¸Àç¿¡ ´ëÇØ¼­ ¾ËÁö ¸øÇϱ⠶§¹®ÀÌ´Ù.

±×·¡¼­ ºä´Â »ç¿ëÀÚ¿¡ ÀÇÇØ ÆíÁýÀÌ ¹ß»ýÇßÀ» ¶§ ÇÁ·¹ÀÓ¿¡°Ô ÀÚ½ÅÀÌ µ¥ÀÌÅ͸¦ º¯°æÇßÀ½À» ¾Ë¸®´Âµ¥ À̶§ È£ÃâÇÏ´Â ÇÔ¼ö°¡ ¹Ù·Î UpdateViews ÇÔ¼öÀÌ´Ù. ÀÌ ÇÔ¼öÀÇ Àμö·Î´Â º¯È­¸¦ À¯¹ßÇÑ ºäÀÇ Æ÷ÀÎÅͰ¡ Àü´ÞµÇ´Âµ¥ ÀÌ ºä´Â °»½Å ´ë»ó¿¡¼­ Á¦¿ÜµÇ´Â °ÍÀÌ ÇÕ¸®ÀûÀÌ´Ù. ºä1ÀÌ µ¥ÀÌÅ͸¦ ¹Ù²Û ÈÄ ´õ ÀÖÀ»Áöµµ ¸ð¸£´Â ºä2, ºä3 µîµµ °°ÀÌ °»½ÅÇϱâ À§ÇØ ÇÁ·¹ÀÓÀÇ UpdateViews ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ÀÌ ÇÔ¼ö È£ÃâÀº °ð "À÷µéµµ Á» ¹Ù²ã ÁÖ¼¼¿ä"¶ó´Â ¿äûÀε¥ À̶§ ºä1Àº ÀÚ½ÅÀÌ Á÷Á¢ ÀÔ·ÂÀ» ¹Þ¾Ò±â ¶§¹®¿¡ ÇÁ·¹ÀÓÀÌ µû·Î °»½ÅÇÒ Çʿ䰡 ¾ø´Ù.

UpdateViews ÇÔ¼öÀÇ ÄÚµå ÀÚü´Â ¹«Ã´ °£´ÜÇÑ´Ù. ºä°¡ ÃÖ´ë 2°³ ¹Û¿¡ ¾øÀ¸¹Ç·Î arView[0]¿Í arView[1]¿¡ ´ëÇØ °»½ÅÀ» Ç쵂 NULLÀÌ ¾Æ´Ï°í pView°¡ ¾Æ´Ñ ¸ðµç ºä¸¦ °»½ÅÇÏ¸é µÈ´Ù. °£´ÜÇÑ ¿¹Á¦À̱⠶§¹®¿¡ ºäÀÇ ÀÛ¾÷ ¿µ¿ª Àüü¸¦ ¹«È¿È­ÇÏ¿© ´Ù½Ã ±×¸®´Â °ÍÀ¸·Î ºä¸¦ °»½ÅÇÒ ¼ö ÀÖ´Ù.

¿¹Á¦¿¡¼­´Â WM_KEYDOWN, ChangeString¿¡¼­ UpdateViews ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ±×·¡¼­ âÀ» ºÐÇÒÇÑ »óÅ¿¡¼­ Ä¿¼­ À̵¿Å°·Î ¸Þ½ÃÁö¸¦ À̵¿½ÃŰ¸é ¾çÂÊ ºäÀÇ ¸Þ½ÃÁö°¡ ¸ðµÎ À̵¿ÇÏ¸ç ¸¶¿ì½º ¹öưÀ» ´©¸£¸é ¹®ÀÚ¿­ÀÌ °°ÀÌ ¹Ù²ï´Ù. WM_KEYDOWNÀº InvalidateRect¸¦ Á÷Á¢ È£ÃâÇßÀ¸¹Ç·Î ÀÚ½ÅÀº Á¦¿ÜÇÑ ºä¸¦ ¸ðµÎ °»½ÅÇÏÁö¸¸ ChangeString ÇÔ¼ö´Â ÀÚ±â Àڽŵµ °°ÀÌ °»½ÅÇϱâ À§ÇØ UpdateViews(NULL)À» È£ÃâÇÏ¿´´Ù.

¸¶.ÆÄ±«ÀÚ¿Í °¡»ó ÇÔ¼ö

¿©±â±îÁö ÀÛ¼ºµÈ ¿¹Á¦¸¦ º¸¸é °´Ã¼ ºÐÇÒµµ Àß µÇ¾ú°í ´öºÐ¿¡ â ºÐÇÒ¿¡µµ ¾Æ¹« ¹«¸®°¡ ¾ø´Ù. °á°ú¸¦ º¸¸é ±×·¸Áö¸¸ Äڵ带 Á» ´õ »ìÆì º¸¸é ¾à°£ ¸¶À½¿¡ ¾Èµå´Â Á¡ÀÌ Àִµ¥ °´Ã¼°¡ ÆÄ±«µÉ ¶§ À©µµ¿ì¸¦ ÀÚµ¿À¸·Î ÆÄ±«ÇÏÁö ¾Ê´Â´Ù´Â Á¡ÀÌ´Ù. ¿Ö ÀÌ·¸°Ô µÇ¾î¾ß¸¸ ÇÏ´ÂÁö, ´Ù¸¥ ¹æ¹ýÀº ¾ø´ÂÁö ÀÌ·ÐÀûÀÎ Á¡°ËÀ» ÇØ º¸ÀÚ.

°´Ã¼°¡ ºÐÇÒµÊÀ¸·Î½á »ý±ä °¡Àå Å« º¯È­´Â µµ¿ì¹Ì°¡ ¿©·¯ Á¾·ùÀÇ °´Ã¼, Áï CWindow·ÎºÎÅÍ ÆÄ»ýµÇ´Â ¸ðµç °´Ã¼¸¦ °ü¸®ÇØ¾ß ÇÑ´Ù´Â Á¡ÀÌ´Ù. °´Ã¼°£ÀÇ °èÃþÀÌ »ý°å±â ¶§¹®¿¡ ¸ðµç °´Ã¼¿¡ ´ëÇØ À©µµ¿ì¸¦ ÀÚµ¿À¸·Î ÆÄ±«ÇÏ´Â °ÍÀÌ ¾î·Æ°Ô µÇ¾ú°í ±×·¡¼­ RemoveObject¿¡ À©µµ¿ì¸¦ ÆÄ±«ÇÏ´Â Äڵ尡 »èÁ¦µÇ¾úÀ¸¸ç ´ë½Å ÇÁ·¹ÀÓÀÇ DeleteView ¸â¹ö ÇÔ¼ö¿¡¼­ ¸í½ÃÀûÀ¸·Î DestroyWindow¸¦ È£ÃâÇÑ´Ù. Áï °´Ã¼ÀÇ À©µµ¿ì ÆÄ±«°¡ ÀÚµ¿¿¡¼­ ¼öµ¿À¸·Î ¹Ù²ï °ÍÀÌ´Ù.

±×·¸´Ù ÇÏ´õ¶óµµ ÄÁÆ®·ÑÀ» Ȱ¿ëÇϴµ¥ Ưº°È÷ ¹®Á¦°¡ ÀÖ´Â °ÍÀº ¾Æ´ÏÁö¸¸ ÆÄ±«ÀÚ¿¡¼­ °´Ã¼ÀÇ À©µµ¿ì¸¦ ÀÚµ¿À¸·Î Á¦°ÅÇÑ´Ù¸é °´Ã¼ ½º½º·Î ÅëÇÕµÈ ÀÚ¿ø °ü¸®¸¦ ÇÑ´Ù´Â Á¡¿¡¼­ ¿Ï¼ºµµ°¡ ³ô¾ÆÁö°í ÀÌ ÄÁÆ®·ÑÀ» »ç¿ëÇÏ´Â °³¹ßÀÚ´Â º° ÁÖÀÇ »çÇ×¾øÀÌ ÄÁÆ®·ÑÀ» ¾µ ¼ö ÀÖÀ¸¹Ç·Î ´õ Æí¸®ÇÒÅÙµ¥ ¸»ÀÌ´Ù. ¿äÄÁµ¥ ÀÚµ¿ÀÌ ¾Æ´Ï¶ó ¼öµ¿À̶ó´Â Á¡ÀÌ ±âºÐ ³ª»Ú°í ¹º°¡ ¾û¼ºÇÑ °Í °°¾Æ ºÒ¾ÈÇØ º¸Àδٴ °ÍÀÌ ºÒ¸¸ÀÌ´Ù. ÀÌ ºÒ¸¸ »çÇ׿¡ ´ëÇØ ÀÌ·ÐÀû Á¡°ËÀ» ÇØ º¸ÀÚ.

ÆÄ±«ÀÚ¿¡¼­ °¡»ó ÇÔ¼ö¸¦ È£ÃâÇϸé ÀÌ °¡»ó ÇÔ¼ö´Â ÆÄ±«ÀÚ¸¦ È£ÃâÇÏ´Â °´Ã¼ÀÇ Å¸ÀÔ¿¡ µû¶ó Á¦´ë·Î È£ÃâµÈ´Ù. ÆÄ±«ÀÚ°¡ È£ÃâµÉ ½ÃÁ¡Àº ¾ÆÁ÷ °´Ã¼°¡ ÆÄ±«µÇ±â ÀüÀ̱⠶§¹®¿¡ vtable(°¡»ó ÇÔ¼ö Å×À̺í)ÀÌ ¿ÂÀüÇÏ°Ô ³²¾Æ ÀÖ°í µû¶ó¼­ ÆÄ±«ÀÚ¿¡¼­ °¡»ó ÇÔ¼ö¸¦ È£ÃâÇÏ´õ¶óµµ Á¤È®ÇÑ ¹øÁö¸¦ ã¾Æ°¥ ¼ö ÀÖ´Ù. ±×·¯³ª »ó¼Ó¹ÞÀº ÆÄ±«ÀÚ¿¡¼­ °¡»ó ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§´Â ±×·¸Áö ¸øÇѵ¥ °´Ã¼ ŸÀÔ°ú´Â ¹«°üÇÏ°Ô ÆÄ±«ÀÚ¸¦ Á¤ÀÇÇϴ Ŭ·¡½ºÀÇ °¡»ó ÇÔ¼ö°¡ È£ÃâµÈ´Ù. À̰ÍÀÌ À©µµ¿ì ÆÄ±«¸¦ ¼öµ¿À¸·Î ÇÒ ¼ö¹Û¿¡ ¾ø´Â ±Ùº»ÀûÀÎ ÀÌÀ¯ÀÌ´Ù. ´ÙÀ½ VirtTest ¿¹Á¦·Î °ú¿¬ ±×·±Áö Å×½ºÆ®ÇØ º¸ÀÚ.

 

class CSuper

{

public:

     ~CSuper() { func(); }

     virtual void func () { MessageBox(hWndMain,"CSuperÀÇ func","È£Ãâ",MB_OK); }

};

 

class CSub : public CSuper

{

public:

     void func() { MessageBox(hWndMain,"CSubÀÇ func","È£Ãâ",MB_OK); }

};

 

CSuper *p1=NULL;

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     switch(iMessage) {

     case WM_LBUTTONDOWN:

          if (p1==NULL) {

              p1=new CSub;

              p1->func();

          }

          return 0;

     case WM_RBUTTONDOWN:

          if (p1) {

              delete (CSub *)p1;

              p1=NULL;

          }

          return 0;

     case WM_DESTROY:

          PostQuitMessage(0);

          return 0;

     }

     return(DefWindowProc(hWnd,iMessage,wParam,lParam));

}

 

CSuper¿Í CSub µÎ °³ÀÇ Å¬·¡½º°¡ ¼±¾ðµÇ¾î ÀÖ´Ù. CSuper´Â °¡»ó ÇÔ¼ö func¸¦ Á¤ÀÇÇϸç ÀÌ ÇÔ¼ö´Â È£Ãâ È®ÀοëÀ¸·Î ¸Þ½ÃÁö ¹Ú½º¸¸À» ¶ç¿ì´Âµ¥ MessagBox È£Ãâ¹®À» °´Ã¼¸¦ ÆÄ±«½Ã۱â À§ÇÑ Áß¿äÇÑ Á¾·á 󸮶ó°í °¡Á¤ÇÏÀÚ. CSuperÀÇ ÆÄ±«ÀÚ´Â ÆÄ±«µÇ±â Á÷Àü¿¡ func ÇÔ¼ö¸¦ È£ÃâÇÏ¸ç µû¶ó¼­ CSuperÇüÀÇ °´Ã¼¸¦ ¸¸µé¾ú´Ù ÆÄ±«ÇÏ¸é ´ÙÀ½ ¸Þ½ÃÁö ¹Ú½º°¡ ³ªÅ¸³¯ °ÍÀÌ´Ù.

CSub´Â CSuper·ÎºÎÅÍ »ó¼Ó¹Þ¾ÒÀ¸¸ç ÆÄ±«ÀÚ´Â CSuperÀÇ °ÍÀ» ±×´ë·Î ¾²°í func °¡»ó ÇÔ¼ö´Â ÀçÁ¤ÀÇÇÏ¿´´Ù. CSub::funcµµ È£Ãâ È®ÀÎ¿ë ¸Þ½ÃÁö ¹Ú½º¸¸ ¶ç¿ì´Âµ¥ ¸Þ½ÃÁö ³»¿ë¸¸ ´Ù¸¦ »ÓÀÌ´Ù. ¿¹Á¦¿¡¼­´Â CSuperÇüÀÇ Æ÷ÀÎÅÍ p1 Àü¿ª º¯¼ö¸¦ ¼±¾ðÇϰí ÀÖÀ¸¸ç ¸¶¿ì½º ¿ÞÂÊ ¹öưÀ» ´©¸¦ ¶§ p1¿¡ CSubÇüÀÇ °´Ã¼¸¦ »ý¼ºÇϰí p1->func¸¦ È£ÃâÇÑ´Ù. ºñ·Ï p1ÀÌ CSuperÇüÀÇ Æ÷ÀÎÅÍÀÌÁö¸¸ CSubÇüÀÇ °´Ã¼¸¦ °¡¸®Å°°í ÀÖÀ¸¹Ç·Î À̶§ È£ÃâµÇ´Â ÇÔ¼ö´Â CSub::func°¡ µÈ´Ù. func°¡ °¡»ó ÇÔ¼öÀ̹ǷΠÆ÷ÀÎÅÍ Å¸ÀÔÀÌ ¾Æ´Ñ °´Ã¼ ŸÀÔ¿¡ µû¶ó È£ÃâµÉ ÇÔ¼ö¸¦ ãÀ¸¸ç Áö±ØÈ÷ ´ç¿¬ÇÏ´Ù.

¸¶¿ì½º ¿À¸¥ÂÊ ¹öưÀ» ´©¸¦ ¶§´Â p1À» deleteÇϴµ¥ À̶§ ÆÄ±«ÀÚ°¡ È£ÃâµÉ °ÍÀÌ´Ù. CSub´Â ÆÄ±«ÀÚ¸¦ ÀçÁ¤ÀÇÇÏÁö ¾ÊÀ¸¹Ç·Î ~CSuper ÆÄ±«ÀÚ°¡ ´ë½Å È£ÃâµÈ´Ù. ÀÌ ÇÔ¼ö¿¡¼­ °¡»ó ÇÔ¼ö func¸¦ È£ÃâÇϴµ¥ À̶§ È£ÃâµÇ´Â ÇÔ¼ö´Â ÀÌ»óÇϰԵµ CSub::func°¡ ¾Æ´Ï¶ó CSuper::func°¡ µÈ´Ù. func°¡ °¡»ó ÇÔ¼öÀÌÁö¸¸ ÆÄ±«µÇ´Â °´Ã¼ÀÇ Å¸ÀÔ¿¡ »ó°ü¾øÀÌ ÆÄ±«ÀÚ°¡ È£ÃâÇÏ´Â ÇÔ¼ö´Â Ç×»ó CSuper::func°¡ µÇ´Â °ÍÀÌ´Ù.

¿øÇÏ´Â °á°ú´Â CSuper *p1¿¡ CSub °´Ã¼¸¦ »ý¼ºÇßÀ» °æ¿ì ÀÌ °´Ã¼¸¦ ÆÄ±«ÇÒ ¶§ CSub::func¸¦ È£ÃâÇÏ°í ½Í´Ù´Â °ÍÀε¥ ±×·¸°Ô µÇÁö ¾Ê´Â´Ù. ¿©±â¼­ Ȥ½Ã ÆÄ±«ÀÚ¸¦ °¡»óÀ¸·Î ¼±¾ðÇØ¾ß ÇÏ´Â °ÍÀÌ ¾Æ´Ñ°¡ ÇÏ´Â »ý°¢À» ÇÒÁö ¸ð¸£°ÚÁö¸¸ ±×°ÍÀº ÀüÇô »ó°üÀÌ ¾ø´Â ¹®Á¦ÀÌ´Ù. ÆÄ±«ÀÚ°¡ °¡»óÀÎ °ÍÀº °´Ã¼ ÆÄ±«½Ã °´Ã¼ ŸÀÔ¿¡ µû¶ó ÀûÀýÇÑ ÆÄ±«ÀÚ¸¦ È£ÃâÇÒ »ÓÀÌÁö ÆÄ±«ÀÚ°¡ È£ÃâÇÏ´Â °¡»ó ÇÔ¼ö ¼±Åðú´Â ¾Æ¹«·± °ü·ÃÀÌ ¾ø´Ù.

C++ ÄÄÆÄÀÏ·¯´Â »ó¼ÓµÈ ÆÄ±«ÀÚ¿¡¼­ °¡»ó ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ ÆÄ±«µÇ´Â °´Ã¼ÀÇ ÇÔ¼ö¸¦ È£ÃâÇÏÁö ¸øÇÑ´Ù. ¿Ö ±×·±Áö ÀÛÀº Ŭ·¡½º °èÃþ ¸ðµ¨À» °¡Á¤ÇÏ¿© »ý°¢ÇØ º¸ÀÚ. C1 ·çÆ® Ŭ·¡½º·ÎºÎÅÍ C2, C3 °¡ Â÷·Ê´ë·Î »ó¼ÓµÇ¾ú°í °¢ Ŭ·¡½º´Â °íÀ¯ÀÇ ÆÄ±«ÀÚ¸¦ °¡Áø´Ù. C1Àº °¡»ó ÇÔ¼ö func¸¦ °¡Áö¸ç C2, C3´Â ÀÌ °¡»ó ÇÔ¼ö¸¦ ÀçÁ¤ÀÇÇϰí ÀÖ´Ù. ¹°·Ð °¢ Ŭ·¡½º´Â Àڽſ¡°Ô ÇÊ¿äÇÑ ±âŸ ¸â¹ö º¯¼öµé°ú ÇÔ¼öµéÀ» Ãß°¡·Î °¡Áö°í ÀÖÀ» °ÍÀÌ´Ù.

À̶§ C1 *p°¡ C3 °´Ã¼¸¦ °¡¸®Å°°í ÀÖ°í ÀÌ °´Ã¼¸¦ delete p·Î ÆÄ±«ÇÑ´Ù°í ÇØ º¸ÀÚ. »ó¼Ó¹ÞÀº °´Ã¼°¡ »ý¼ºµÉ ¶§´Â ºÎ¸ðÀÇ »ý¼ºÀÚ°¡ ¸ÕÀú È£ÃâµÇ¾î »ó¼Ó¹ÞÀº ¸â¹ö¸¦ ¸ÕÀú ÃʱâÈ­Çϰí Â÷·Ê´ë·Î ÆÄ»ý Ŭ·¡½ºÀÇ »ý¼ºÀÚ°¡ È£ÃâµÈ´Ù. ¹Ý´ë·Î ÆÄ±«µÉ ¶§´Â ÀÚ½ÅÀÇ ÆÄ±«ÀÚ°¡ ¸ÕÀú È£ÃâµÇ°í ºÎ¸ð Ŭ·¡½ºÀÇ ÆÄ±«ÀÚ°¡ ¼ø¼­´ë·Î È£ÃâµÈ´Ù. Áï »ý¼ºµÉ ¶§¿Í´Â ¹Ý´ë·Î ~C3(), ~C2(), ~C1() ¼øÀε¥ ÀÚ½ÅÀÇ °íÀ¯ ¸â¹ö¸¦ ¸ÕÀú ÇØÁ¦ÇÏ°í »ó¼Ó¹ÞÀº ¸â¹ö¸¦ Â÷·Ê´ë·Î ÇØÁ¦ÇÏ´Â °ÍÀÌ´Ù.

ÀÌ·¸´Ù º¸´Ï ~C1()¿¡¼­ °¡»ó ÇÔ¼ö func¸¦ È£ÃâÇÒ ¶§´Â C3³ª C2ÀÇ ¸â¹ö°¡ ÀÌ¹Ì ÇØÁ¦µÇ¾î ¹ö¸° »óȲÀÌ µÇ°í ¸¸´Ù. ±×·¡¼­ ~C1()¿¡¼­´Â C1::func¹Û¿¡ È£ÃâÇÒ ¼ö°¡ ¾ø´Â °ÍÀÌ´Ù. ºñ·Ï p°¡ C3 ŸÀÔÀÇ °´Ã¼ÀÌÁö¸¸ ~C1()¿¡¼­ C3::func¸¦ È£ÃâÇÑ´Ù¸é C3ÀÇ ¸â¹ö Áß ÀϺΰ¡ ÀÌ¹Ì ÆÄ±«µÈ »óȲÀ̱⠶§¹®¿¡ ÀÌ ÇÔ¼ö°¡ Á¦´ë·Î µ¿ÀÛÇÑ´Ù°í º¸ÀåÇÒ ¼ö ¾øÀ¸¸ç ±×·¡¼­ C++ ÄÄÆÄÀÏ·¯´Â »óÀ§ Ŭ·¡½ºÀÇ ÆÄ±«ÀÚ¿¡¼­ È£ÃâÇÏ´Â °¡»ó ÇÔ¼ö´Â ÇÏÀ§ Ŭ·¡½ºÀÇ ÇÔ¼ö°¡ µÉ ¼ö ¾øµµ·Ï ±ÝÁöÇÑ´Ù.

ÆÄ±«ÀÚ´Â °¢ Ŭ·¡½º °èÃþÀ» µû¶ó ¿ª¼øÀ¸·Î ½ÇÇàµÇ¸ç °¢ ½ÇÇà ´Ü°è¿¡¼­ vtableÀ» ÇöÀç ÆÄ±«ÀÚ°¡ ½ÇÇàµÇ°í Àִ Ŭ·¡½ºÀÇ °ÍÀ¸·Î º¯°æÇÑ´Ù. ~C3()°¡ ½ÇÇàÁßÀÏ ¶§ vtableÀº ¾ÆÁ÷ C3 Ŭ·¡½ºÀÇ °¡»ó ÇÔ¼ö¸¦ Æ÷ÀÎÆ®Çϰí ÀÖ´Ù. ±×·¯³ª ~C3()°¡ ½ÇÇàÀ» ¸¶Ä¡°í ~C2()·Î Á¦¾î°¡ ³Ñ¾î°¥ ¶§ vtableÀº C2Ŭ·¡½ºÀÇ °¡»ó ÇÔ¼ö¸¦ °¡¸®Å°µµ·Ï º¯°æµÇ¸ç ¸¶Âù°¡Áö·Î ~C1()À¸·Î ³Ñ¾î°¥ ¶§´Â C1Ŭ·¡½ºÀÇ °¡»ó ÇÔ¼ö¸¦ °¡¸®Å²´Ù. ±×·¯´Ï ~C1()¿¡¼­ È£ÃâÇÏ´Â °¡»óÇÔ¼ö´Â C1ÀÇ ÇÔ¼öÀÏ ¼ö¹Û¿¡ ¾ø´Â °ÍÀÌ´Ù.

VirtTest ¿¹Á¦ÀÇ ~CSuper()¿¡¼­ È£ÃâÇÏ´Â func ÇÔ¼ö´Â ÇöÀç ÆÄ±«µÇ°í ÀÖ´Â °´Ã¼°¡ ¹«¾ùÀΰ¡¿¡ »ó°ü¾øÀÌ ¹«Á¶°Ç CSuper::func°¡ µÈ´Ù. °£´ÜÇÏ°Ô ¸ðµ¨·Î ¼³¸íÀ» Çߴµ¥ ±×·³ SplitView ¿¹Á¦ÀÇ ½ÇÁ¦ »óȲÀ» »ý°¢ÇØ º¸ÀÚ. SplitView ¿¹Á¦¿¡¼­µµ ÆÄ±«ÀÚ¿¡¼­ °¡»ó ÇÔ¼ö È£Ãâ ¹®Á¦°¡ ±×´ë·Î ³ªÅ¸³ª´Âµ¥ ´Ü°è¸¦ Á» ´õ °ÅÄ¥»Ó VirtTest¿¹Á¦¿Í ¿ÏÀüÈ÷ µ¿ÀÏÇÏ´Ù.

¸¸¾à SplitView ¿¹Á¦ÀÇ RemoveObject ÇÔ¼ö¿¡¼­ DestroyWindow ÇÔ¼ö¸¦ È£ÃâÇÏ¿© À©µµ¿ì¸¦ ÀÚµ¿À¸·Î ÆÄ±«ÇÑ´Ù°í ÇØ º¸ÀÚ. ±×·¯¸é ShowMsgView °´Ã¼°¡ ÆÄ±«µÉ ¶§ ~CWindow°¡ È£ÃâµÉ °ÍÀÌ°í ÆÄ±«ÀÚ¿¡¼­ RemoveObject¸¦ È£ÃâÇϰí RemoveObject´Â DestroyWindow ÇÔ¼ö·Î ÀÌ °´Ã¼¿Í ¿¬°áµÈ À©µµ¿ì¸¦ ÆÄ±«ÇÑ´Ù. ¿©±â±îÁö´Â ¾ÆÁÖ Á¤»óÀûÀ¸·Î ¼öÇàµÇÁö¸¸ ±× ´ÙÀ½ÀÌ ¹®Á¦´Ù.

DestroyWindow·Î À©µµ¿ì¸¦ ÆÄ±«ÇßÀ¸´Ï WM_DESTROY ¸Þ½ÃÁö°¡ ShowMsgProcÀ¸·Î Àü´ÞµÇ¸ç À©µµ¿ì ÇÁ·Î½ÃÀú´Â °´Ã¼ ¸Ê¿¡ ¾ÆÁ÷ ³²¾Æ ÀÖ´Â ºäÀÇ Æ÷ÀÎÅ͸¦ Á¦´ë·Î ã´Â´Ù. ±×·¯³ª À̶§ ºäÀÇ vtableÀº ÀÌ¹Ì CWindowÀÇ °ÍÀ¸·Î ¹Ù²î¾î ¹ö·È±â ¶§¹®¿¡ OnMessage¸¦ Á¦´ë·Î ãÁö ¸øÇÑ´Ù. ShowMsgProcÀÌ °¡»ó ÇÔ¼ö Å×ÀÌºí¿¡¼­ ã´Â OnMessage´Â CWindow::OnMessageÀ̸ç ÀÌ ÇÔ¼ö´Â ½ÇÁ¦ º»Ã¼°¡ ¾ø´Â ¼ø¼ö °¡»ó ÇÔ¼öÀ̹ǷΠ°á±¹ ÇÁ·Î±×·¥ÀÌ Á×°í ¸¶´Â °ÍÀÌ´Ù.

¸ðµ¨À» ÅëÇØ ¿ìȸÀûÀÎ ¹æ¹ýÀ¸·Î ¿øÀÎÀ» ºÐ¼®ÇØ º¸°íÀÚ Çߴµ¥ ¹®Á¦°¡ ¹ß»ýÇÏ´Â ¿øÀÎÀ» Á» Á÷Á¢ÀûÀ¸·Î ±æ°Ô Ç¥ÇöÇØ º¸¸é ÀÌ·¸´Ù. ShowMsgView°¡ ÆÄ±«µÉ ¶§ ÀÌ °´Ã¼°¡ »ó¼Ó¹ÞÀº ÆÄ±«ÀÚ ~CWindow¿¡¼­ È£ÃâÇÏ´Â µµ¿ì¹ÌÀÇ RemoveObject ¸â¹ö ÇÔ¼ö¿¡¼­ È£ÃâÇÏ´Â DestroyWindow¿¡ ÀÇÇØ ¹ß»ýÇÏ´Â WM_DESTROY ¸Þ½ÃÁö¸¦ ó¸®ÇÏ´Â ShowMsgProc¿¡¼­ ã´Â pSM°´Ã¼ÀÇ OnMessage °¡»ó ÇÔ¼öÀÇ Æ÷ÀÎÅͰ¡ Ʋ¸° °ÍÀÌ´Ù. ¸»ÀÌ Á» ²¿ÀÌ´Â °Í °°¾Æ º¸ÀÌÁö¸¸ ¿ø·¡ »ó¼Ó°ú °¡»ó ÇÔ¼öÀÇ È£Ãâ °ü°è´Â ÀÌ·¸°Ô º¹ÀâÇÏ´Ù.

À̰ÍÀÌ RemoveObject¿¡¼­ DestroyWindow ÇÔ¼ö¸¦ È£ÃâÇÏ¿© À©µµ¿ì¸¦ ÀÚµ¿À¸·Î ÆÄ±«ÇÏÁö ¸øÇÏ´Â ÀÌÀ¯ÀÌ´Ù. ShowMsgObj ¿¹Á¦ÀÇ °æ¿ì °èÃþ °ü°è°¡ ¾ø¾ú°í ÀÚ½ÅÀÇ ÆÄ±«ÀÚ¸¦ ÀÚ½ÅÀÌ °¡Áö¹Ç·Î ¹®Á¦°¡ ¾ø¾úÀ¸³ª °´Ã¼¸¦ ºÐÇÒÇϸ鼭 °èÃþÀÌ »ý±â°Ô µÇ°í ÀÌ °úÁ¤¿¡¼­ »ó¼Ó¹ÞÀº ÆÄ±«ÀÚ¿Í °¡»ó ÇÔ¼ö°£ÀÇ È£Ãâ ¹®Á¦°¡ ¹ß»ýÇÑ °ÍÀÌ´Ù. SplitView ¿¹Á¦´Â ÀÌ ¹®Á¦¿¡ ´ëÇÑ ÇØ°áÃ¥À¸·Î À©µµ¿ì ÀÚµ¿ ÆÄ±«¸¦ Æ÷±âÇϰí RemoveObject¿¡¼­´Â ¼ø¼öÇÏ°Ô °´Ã¼¸¸ ÆÄ±«Çϰí ÇÁ·¹ÀÓÀÇ DeleteView¿¡¼­ °´Ã¼¸¦ »èÁ¦Çϱâ Àü¿¡ ¼öµ¿À¸·Î DestroyWindow¸¦ È£ÃâÇϵµ·Ï ÇÏ¿´´Ù.

¸¸¾à SplitView ¿¹Á¦ÀÇ DeleteView ÇÔ¼ö¿¡¼­ À©µµ¿ì´Â ±×´ë·Î µÎ°í °´Ã¼¸¸ delete ÇÏ¸é ¾î¶»°Ô µÉ±î? ÀÌ·¸°Ô ÇÏ¸é ´çÀåÀº ¹®Á¦°¡ ¾ø´Â °Íó·³ º¸ÀÌÁö¸¸ ÇÁ·Î±×·¥À» Á¾·áÇÒ ¶§ ´Ù¿îµÈ´Ù. ¿Ö³ÄÇÏ¸é ºÎ¸ð À©µµ¿ì°¡ ÆÄ±«µÉ ¶§ ÀÚ½Ä À©µµ¿ì¸¦ °°ÀÌ ÆÄ±«Çϸç WM_DESTROY¸Þ½ÃÁö°¡ Àü´ÞµÇ´Âµ¥ À̶§ ShowMsgProcÀÌ ¸Þ½ÃÁö¸¦ ¹Þ¾Æ¾ßÇÒ °´Ã¼¸¦ ãÁö ¸øÇϱ⠶§¹®ÀÌ´Ù.

¶ÇÇÑ °´Ã¼¿Í À©µµ¿ìÀÇ ÆÄ±« ¼ø¼­¸¦ ¹Ù²Ù¾îµµ ¾ÈµÈ´Ù. ¸¸¾à ÀÌ ¼ø¼­¸¦ ¹Ù²Ù¾î delete¸¦ ¸ÕÀú Çϰí DestroyWindow¸¦ È£ÃâÇÏ¸é °´Ã¼°¡ ¸Ê¿¡¼­ ¸ÕÀú Á¦°ÅµÇ¾ú±â ¶§¹®¿¡ WM_DESTROY ¸Þ½ÃÁö¸¦ ó¸®ÇÒ °´Ã¼°¡ ¾ø´Â Ä¡¸íÀûÀÎ ¿À·ù°¡ ¹ß»ýÇÑ´Ù. °´Ã¼´Â À©µµ¿ì°¡ ¿ÏÀüÈ÷ ÆÄ±«µÉ ¶§±îÁö ³²¾Æ ÀÖ¾î¾ß ÇÑ´Ù. ¹Ýµå½Ã SplitView ¿¹Á¦ÀÇ DeleteView ÇÔ¼ö´ë·Î °´Ã¼¿Í À©µµ¿ì¸¦ Á¦°ÅÇØ¾ß ÇÑ´Ù. ±×·¸´Ù¸é ÇöÀç ±¸Á¶´Â °ú¿¬ ¾ÈÀüÇÑÁö ¿©·¯ °æ¿ì¸¦ Á¡°ËÇØ º¸ÀÚ.

 

¨ç ShowMsgTest ¿¹Á¦Ã³·³ Àü¿ªÀ¸·Î ¼±¾ðµÈ msg °´Ã¼ÀÇ °æ¿ì¸¦ º¸ÀÚ. ÀÌ °´Ã¼´Â new ¿¬»êÀÚ·Î ÇÒ´çÇÑ °ÍÀÌ ¾Æ´Ï¹Ç·Î delete¸¦ ¸í½ÃÀûÀ¸·Î È£ÃâÇÒ Çʿ䰡 ¾ø°í µû¶ó¼­ À©µµ¿ì¸¦ ÆÄ±«ÇÒ ½ÃÁ¡ÀÌ ¾Ö¸ÅÇÑ °Í °°´Ù. ÀÌ °´Ã¼´Â È£½ºÆ®°¡ »ý¼ºµÇ±â Àü¿¡ ¸¸µé¾îÁö¸ç ¸ÞÀÎ À©µµ¿ì°¡ ¸¸µé¾îÁú ¶§ À©µµ¿ì¸¦ ¸¸µç´Ù. Á¾·áµÉ ¶§´Â ¸ÞÀÎ À©µµ¿ì¿Í ÇÔ²² À©µµ¿ì°¡ ÆÄ±«µÇ¸ç Àü¿ª °´Ã¼ msgÀÇ ÆÄ±«ÀÚ°¡ È£ÃâµÇ¾î °´Ã¼µµ ÆÄ±«µÈ´Ù. °´Ã¼¿Í À©µµ¿ì°¡ ¼ø¼­´ë·Î »ý¼º, ÆÄ±«µÇ¹Ç·Î ¾Æ¹« ¹®Á¦°¡ ¾ø´Ù.

¨è new ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¿© Àü¿ª º¯¼ö¿¡ ShowMsg °´Ã¼¸¦ »ý¼ºÇÏ¿© »ç¿ëÇϰí deleteÇÒ °æ¿ì¸¦ º¸ÀÚ. À̶§µµ °´Ã¼¸¦ ÆÄ±«Çϱâ Àü¿¡ DestroyWindow ÇÔ¼ö¸¸ Á¦´ë·Î È£ÃâÇÏ¸é ¿ª½Ã ¹®Á¦°¡ ¾ø´Ù. Ç×»ó °´Ã¼ »èÁ¦ Àü¿¡ À©µµ¿ì¸¦ ¸ÕÀú Á¦°ÅÇÏ¸é µÈ´Ù.

¨é °´Ã¼¸¦ Áö¿ª º¯¼ö·Î »ç¿ëÇÒ °æ¿ì´Â ¾î¶»°Ô µÉ±î? ¹°·Ð À©µµ¿ì °´Ã¼¸¦ Áö¿ª º¯¼ö·Î »ý¼ºÇÒ ÀÏÀº ½ÇÁ¦·Î ¾øÁö¸¸ ÀÏ´Ü ¹®¹ýÀûÀÎ Â÷¿ø¿¡¼­ ÀÌ·ÐÀû Á¡°ËÀº ÇØ º¼ Çʿ䰡 ÀÖ´Ù. ¾Æ¸¶ ´ÙÀ½°ú °°Àº Äڵ尡 ÀÛ¼ºµÉ °ÍÀÌ´Ù.

 

void func2()

{

     CShowMsg m;

 

     m.Create(0,0,0,0,WS_CHILD | WS_VISIBLE,2,hWndMain);

     // do something

     DestroyWindow(m.hWnd);

}

 

À̶§µµ ÇÔ¼ö°¡ Á¾·áµÇ±â Àü¿¡ DestroyWindow ÇÔ¼ö¸¸ È£ÃâÇÏ¸é ¾Æ¹« ¹®Á¦°¡ ¾ø´Ù. À©µµ¿ì°¡ ¸ÕÀú ÆÄ±«µÇ°í Áö¿ª º¯¼ö mÀÌ ¹üÀ§¸¦ ¹þ¾î³¯ ¶§ ½ºÅÃÀÇ °´Ã¼°¡ »èÁ¦µÈ´Ù.

¨ê ¸¶Áö¸·À¸·Î °´Ã¼¸¦ ÇÔ¼ö ³»¿¡¼­ new ¿¬»êÀÚ·Î »ý¼ºÇÑ ÈÄ ÇÔ¼ö°¡ ³¡³ª±â Àü¿¡ delete·Î ÆÄ±«ÇÒ °æ¿ìÀÌ´Ù. À̶§ÀÇ ÄÚµå´Â ´ÙÀ½°ú °°´Ù.

 

void func()

{

     CShowMsg *m;

 

     m=new CShowMsg;

     m->Create(0,0,0,0,WS_CHILD | WS_VISIBLE,2,hWndMain);

     // do something

     DestroyWindow(m->hWnd);

     delete m;

}

 

À̶§µµ deleteÀü¿¡ DestroyWindow¸¸ Á¦´ë·Î È£ÃâÇÏ¸é µÈ´Ù.

 

°á±¹ ¸ðµç °æ¿ì¿¡ À־ °´Ã¼°¡ »èÁ¦µÇ±â Àü¿¡ À©µµ¿ì¸¸ Á¦°ÅÇÑ´Ù¸é º° ¹®Á¦°¡ ¾ø´Â ¼ÀÀÌ´Ù. ÀÌ ¹æ½ÄÀÇ ±Ã±ØÀûÀÎ ¹®Á¦´Â ¿ÀÁ÷ Çϳª»ÓÀε¥ °´Ã¼¸¦ deleteÇϱâ Àü¿¡ DestroyWindow¸¦ ¹Ýµå½Ã È£ÃâÇØ¾ß ÇÑ´Ù´Â °ÍÀ» °³¹ßÀÚ°¡ ±â¾ïÇØ¾ß ÇÑ´Ù´Â Á¡ÀÌ´Ù. Áï, À©µµ¿ì Á¦°Å ¹æ½ÄÀÌ ÀÚµ¿ÀÌ ¾Æ´Ï¶ó ¼öµ¿À̶ó´Â Á¡À» Ç×»ó ¿°µÎ¿¡ µÎ¾î¾ß ÇÑ´Ù. »ç¿ëÀÚ°¡ ±â¾ïÇØ¾ß ÇÒ »çÇ×Àº ÃÖ¼ÒÇÑ ÀÛ¾Æ¾ß Çϴµ¥ ±×·¸Áö ¸øÇÏ´Ù´Â Á¡ÀÌ Á¶±Ý ¾Æ½¬¿ï »Ó ±× ¿ÜÀÇ ´Ù¸¥ ¹®Á¦´Â ¾ø´Ù.

°³¹ßÀÚ°¡ ÀÌ »ç½ÇÀ» ÀØÀ» °æ¿ì ÇÁ·Î±×·¥ÀÌ ´Ù¿îµÇ±â´Â ÇÏÁö¸¸ °³¹ßÁß¿¡ ÀÚ½ÅÀÇ ½Ç¼ö¸¦ ºÐ¸íÇÏ°Ô ¾Ë ¼ö Àֱ⠶§¹®¿¡ Å« ¹®Á¦´Â ¾Æ´Ï´Ù. ÇÁ·Î±×·¥ÀÌ ´Ù¿îµÇ´Âµ¥ °³¹ßÀÚ°¡ ÀÌ ¹®Á¦¸¦ ¸ð¸£°í Áö³ª°¥ ¸®°¡ ¾øÁö ¾ÊÀº°¡? ¶§·Î´Â È®½ÇÇÏ°Ô Á×´Â ÇÁ·Î±×·¥ÀÌ ¼öÁ¤Çϱ⠴õ ½±´Ù. ±×·¸´Ù¸é °´Ã¼°¡ ÆÄ±«µÉ ¶§ À©µµ¿ì°¡ ÀÚµ¿À¸·Î ÆÄ±«µÇµµ·Ï ÇÏ´Â ¹æ¹ýÀº °ú¿¬ ¾ø´Â °ÍÀϱî? ¹°·Ð ²À ±×·¸°Ô ÇÏ°í ½Í´Ù¸é ÇØ°á ¹æ¹ýÀº ¿©·¯ °¡Áö°¡ ÀÖ´Ù.

ù ¹øÂ°·Î ÀÌ ¹®Á¦´Â »ó¼Ó¹ÞÀº ÆÄ±«ÀÚ°¡ °¡»ó ÇÔ¼ö¸¦ Á¦´ë·Î ãÁö ¸øÇØ ¹ß»ýÇÏ´Â °ÍÀ̹ǷΠÆÄ±«ÀÚ¸¦ »ó¼Ó¹ÞÁö ¾ÊÀ¸¸é µÈ´Ù. °¢ Ŭ·¡½º °èÃþÀÌ °íÀ¯ÀÇ ÆÄ±«ÀÚ¸¦ °¡Áö±â¸¸ ÇÑ´Ù¸é ÆÄ±«ÀÚ¿¡¼­ ÇØ´ç °´Ã¼ÀÇ OnMessage¸¦ Á¤È®ÇÏ°Ô Ã£À» ¼ö ÀÖÀ» °ÍÀÌ´Ù. VirtTest ¿¹Á¦ÀÇ CSub Ŭ·¡½º¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤Çϸé ÀÌ ¹®Á¦¸¦ ´çÀå ÇØ°áÇÒ ¼ö ÀÖ´Ù.

 

class CSub : public CSuper

{

public:

     ~CSub() { func(); }

     void func() { MessageBox(hWndMain,"CSubÀÇ func","È£Ãâ",MB_OK); }

};

 

±×·¯³ª ÀÌ·¸°Ô µÇ¸é ¸Å Ŭ·¡½º¸¶´Ù µ¿ÀÏÇÑ ³»¿ëÀÇ ÆÄ±«ÀÚ¸¦ °¡Áø´Ù´Â Á¡ÀÌ ³¶ºñÀε¥ º¸´Ù½ÃÇÇ ~CSub()¿Í ~CSuper() ÇÔ¼öÀÇ ³»¿ëÀº µ¿ÀÏÇÏ´Ù. CWindow ¾Æ·¡¿¡ ÆÄ»ý Ŭ·¡½º°¡ 10°³¸¸ µÇ¾îµµ ±²ÀåÈ÷ º¸±â ½ÈÀº Äڵ尡 µÉ °ÍÀÌ´Ù. »Ó¸¸ ¾Æ´Ï¶ó ÆÄ»ý Ŭ·¡½ºÀÇ ÆÄ±«ÀÚ°¡ È£ÃâµÈ ÈÄ ºÎ¸ð Ŭ·¡½ºÀÇ ÆÄ±«ÀÚ°¡ ´Ù½Ã È£ÃâµÇ¹Ç·Î func ÇÔ¼ö°¡ µÎ ¹ø È£ÃâµÇ´Â ºÎÀÛ¿ëÀÌ »ý±ä´Ù. ÀÌ ºÎÀÛ¿ëÀ» ÇØ°áÇÏ·Á¸é ÇÑ ÇÔ¼ö°¡ µÎ ¹ø È£ÃâµÇ´õ¶óµµ Á¾·á 󸮴 Çѹø¸¸ Çϵµ·Ï º°µµÀÇ ÀåÄ¡¸¦ ¸¶·ÃÇÒ Çʿ䰡 ÀÖ´Ù. SplitView ¿¹Á¦¿¡ ÀÌ ¹æ½ÄÀ» Àû¿ëÇÏ°í ½Í´Ù¸é RemoveObject°¡ °´Ã¼¸¦ ¸Ê¿¡¼­ Áߺ¹ Á¦°ÅÇÏÁö ¾Ê¾Æ¾ß ÇÑ´Ù.

µÎ ¹øÂ° ¹æ¹ýÀº °´Ã¼¸¦ Á» ´Ù¸¥ ¹æ½ÄÀ¸·Î ÆÄ±«ÇÏ´Â °ÍÀÌ´Ù. °´Ã¼¸¦ Á¦°ÅÇÒ Çʿ䰡 ÀÖÀ» ¶§ delete ¿¬»êÀÚ¸¦ ¾²Áö ¸»°í DestroyWindow(¶Ç´Â Ưº°ÇÑ ¸â¹ö ÇÔ¼ö)¸¸ »ç¿ëÇÑ´Ù. °¢ À©µµ¿ì´Â ÀÚ½ÅÀÌ Á¦°ÅµÉ ¶§ ¸¶Áö¸·À¸·Î WM_POSTNCDESTROY ¸Þ½ÃÁö¸¦ ¹Þ´Âµ¥ À̶§ delete this;·Î ÀÚ½ÅÀ» Á¦°ÅÇÏ´Â °ÍÀÌ´Ù. Áï, ¸¶Áö¸· ¼ø°£±îÁö °´Ã¼¸¦ À¯ÁöÇϰí ÀÖ´Ù°¡ À©µµ¿ì°¡ ¿ÏÀüÈ÷ ÆÄ±«µÈ ½ÃÁ¡¿¡¼­ °´Ã¼¸¦ Á¦°ÅÇÏ´Â ¹æ¹ýÀÌ´Ù.

MFCµµ SplitView ¿¹Á¦¿Í ¸¶Âù°¡ÁöÀÇ ¹®Á¦¸¦ °¡Áö°í Àִµ¥ MFC´Â µÎ ¹øÂ° ¹æ¹ýÀ¸·Î °´Ã¼¸¦ Á¦°ÅÇÑ´Ù. ÀÌ ¹æ¹ýÀ» ¾µ °æ¿ì new·Î »ý¼ºÇÑ °´Ã¼¿Í Á¤ÀûÀ¸·Î »ý¼ºÇÑ °´Ã¼¸¦ ±¸ºÐÇØ¾ß ÇÑ´Ù´Â ºÎ´ãÀÌ ÀÖÀ¸¸ç MFC´Â m_bAutoDelete¶ó´Â º°µµÀÇ ¸â¹ö¿¡ ÀÚ½ÅÀÌ ¾î¶»°Ô »ý¼ºµÈ °´Ã¼Àΰ¡¸¦ ±â¾ïÇÏ´Â ¹æ¹ýÀ» ¾²°í ÀÖ´Ù. ÀÌ ¹æ¹ýµµ ¹°·Ð ¹®Á¦´Â ¾øÁö¸¸ ÀÚ½ÅÀÇ Åº»ý °úÁ¤À» º°µµÀÇ ¸â¹ö¿¡ ±â·ÏÇØ ³õ´Â´Ù´Â Á¡¿¡¼­ ¿ª½Ã ±ò²ûÇÏÁö´Â ¸øÇÏ´Ù. MFC´Â »ó¿ë ¶óÀ̺귯¸®À̱⠶§¹®¿¡ ³»ºÎ ±¸Á¶¾ß ¾î·°Ç ÃÖ´ëÇÑ »ç¿ëÀÚÀÇ ÆíÀǸ¦ °í·ÁÇØ¾ß ÇÏ´Â °ÍÀÌ´Ù.

SplitView ¿¹Á¦°¡ äÅÃÇϰí ÀÖ´Â À©µµ¿ì Á¦°Å ¹æ½ÄÀº ÀÚµ¿È­µÈ À©µµ¿ì Á¦°Å¸¦ Æ÷±âÇÏ´Â ´ë½Å ´õ °£´ÜÇÑ ±¸Á¶¸¦ °¡Áö´Â ÀÌÁ¡À» ÃëÇϰí ÀÖ´Ù. À©µµ¿ì ÀÚµ¿ ÆÄ±«´Â ¸øÇؼ­ ¾ÈÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ºñ¿ëÀÌ µé°Å³ª ´Ù¸¥ ºÎÀÛ¿ëÀÌ Àֱ⠶§¹®¿¡ ÇÏÁö ¾Ê´Â °ÍÀÌ´Ù. ´ÙÇàÈ÷ ÄÁÆ®·ÑÀÇ »ç¿ëÀÚ´Â °³¹ßÀÚÀ̱⠶§¹®¿¡ ÀÌ Á¤µµ ÁÖÀÇ »çÇ×Àº Å« ¹®Á¦°¡ µÇÁö ¾ÊÀ» °ÍÀ¸·Î ÆÇ´ÜÇÏ¿´´Ù.

¹Ù.ºäÀÇ ±³Ã¼

ÇÁ·¹ÀÓ°ú ºä°¡ ºÐÇҵǾúÀ¸¹Ç·Î ½ÇÇàÁß¿¡ ºä¸¦ ´Ù¸¥ °ÍÀ¸·Î ±³Ã¼ÇÒ ¼ö ÀÖ´Ù. CShowMsg ÇÁ·¹ÀÓÀÇ Á¤º¸¸¦ ¹Ýµå½Ã CShowMsgView·Î¸¸ Ãâ·ÂÇØ¾ß ÇÑ´Ù´Â ¹ýÀº ¾ø´Ù. ¿©±â¼­´Â ´Ù¸¥ ºä ŸÀÔÀ» ¸¸µé¾î º¸°í ºä¸¦ ±³Ã¼ÇØ º¸ÀÚ. ÇÊ¿äÇѸ¸Å­ ºäÀÇ Å¸ÀÔÀº ¾ó¸¶µçÁö ¸¸µé ¼ö ÀÖÁö¸¸ °¡´É¼º¸¸ Á¡°ËÇØ º¼ °ÍÀ̹ǷΠºä ŸÀÔÀ» Çϳª¸¸ ´õ ¸¸µé¾î º»´Ù. ShowMsg.h¿¡ ´ÙÀ½ ºä Ŭ·¡½º¸¦ ¼±¾ðÇÑ´Ù.

 

class CShowMsgView2 : public CShowMsgView

{

private:

     int mx,my;

public:

     CShowMsgView2() { ViewType=VIEW2; }

 

     BOOL Create(int x,int y,int w,int h,DWORD style,UINT id,HWND hParent);

     LRESULT OnMessage(UINT iMessage,WPARAM wParam,LPARAM lParam);

};

 

»õ·Î ¸¸µé¾îÁö´Â ºä´Â ¹Ýµå½Ã ±âº» ºäÀÎ CShowMsgView·ÎºÎÅÍ »ó¼Ó¹Þ¾Æ¾ß ÇÑ´Ù. ¿Ö³ÄÇϸé ÇÁ·¹ÀÓÀº ÀڽŰú ¿¬°áµÈ ºäÀÇ ¸ñ·ÏÀ» arView ¹è¿­·Î °ü¸®Çϸç ÀÌ ¹è¿­ÀÇ Å¸ÀÔÀÌ CShowMsgView *À̱⠶§¹®ÀÌ´Ù. ¶ÇÇÑ »õ·Î Ãß°¡µÈ ºä´Â ±âÁ¸ÀÇ ºä¿Í ÃÖ¼ÒÇÑÀÇ µ¿ÀÏÇÑ ÀÎÅÍÆäÀ̽º¸¦ À¯ÁöÇØ¾ß ÇÁ·¹ÀÓ°ú Åë½ÅÀÌ °¡´ÉÇϹǷΠ±âº» ºäÀÇ ¸ðµç °ÍÀ» ÀÏ´ÜÀº »ó¼Ó¹Þ¾Æ¾ß ÇÑ´Ù.

CShowMsgView2 µµ °£Á¢ÀûÀ¸·Î CWindow·ÎºÎÅÍ ÆÄ»ýµÇ¹Ç·Î °á±¹ À̰͵µ À©µµ¿ìÀÌ°í µµ¿ì¹Ì °´Ã¼ÀÇ ¸Ê¿¡ °°ÀÌ µî·ÏµÉ ¼ö ÀÖ´Ù. Ãß°¡µÈ ºä´Â °íÀ¯ÇÑ º¸±â »óŸ¦ ¸¸µé±â À§ÇØ ±âº» ºä¿¡ ´õ ÇÊ¿äÇÑ ¸â¹ö¸¦ Ãß°¡·Î °¡Áú ¼ö Àִµ¥ CShowMsgView2´Â ±âº» ºä¿¡´Â ¾ø´Â mx, my ¸â¹ö¸¦ Ãß°¡·Î °¡Áø´Ù. ÀÌ ¸â¹ö´Â ÇÁ·¹ÀÓÀÇ x,y,str°ªÀ» Ãâ·ÂÇÒ ÁÂÇ¥°ªÀ¸·Î »ç¿ëµÈ´Ù. »ý¼ºÀÚ´Â ºäÀÇ Å¸ÀÔÀ» VIEW2·Î ÃʱâÈ­Çϰí ÀÖ´Ù. ³ª¸ÓÁö ¸â¹ö ÇÔ¼öµéÀÇ ÄÚµå´Â ´ÙÀ½°ú °°´Ù.

 

BOOL CShowMsgView2::Create(int x,int y,int w,int h,DWORD style,UINT id,HWND hParent)

{

     CreateWindow("ShowMsgView",NULL, style | WS_CLIPCHILDREN,

          x,y,w,h,hParent,(HMENU)id,GetModuleHandle(NULL),this);

     return TRUE;

}

 

LRESULT CShowMsgView2::OnMessage(UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     HDC hdc;

     PAINTSTRUCT ps;

     RECT crt;

     TCHAR Mes[128];

 

     switch(iMessage) {

     case WM_CREATE:

          mx=1;

          my=1;

          return 0;

     case WM_KEYDOWN:

          GetClientRect(hWnd,&crt);

          switch (wParam) {

          case VK_LEFT:

              if (mx > 1)

                   mx--;

              break;

          case VK_RIGHT:

              if (mx < crt.right-50)

                   mx++;

              break;

          case VK_UP:

              if (my > 1)

                   my--;

              break;

          case VK_DOWN:

              if (my < crt.bottom-10)

                   my++;

              break;

          }

          InvalidateRect(hWnd,NULL,TRUE);

          pFrame->UpdateViews(this);

          return 0;

     case WM_LBUTTONDOWN:

          pFrame->x++;

          pFrame->y++;

          InvalidateRect(hWnd,NULL,TRUE);

          pFrame->UpdateViews(this);

          SetFocus(hWnd);

          return 0;

     case WM_PAINT:

          GetClientRect(hWnd,&crt);

          hdc=BeginPaint(hWnd, &ps);

          SelectObject(hdc,GetStockObject(LTGRAY_BRUSH));

          Rectangle(hdc,0,0,crt.right,crt.bottom);

          wsprintf(Mes,"ÁÂÇ¥:%d,%d,¹®ÀÚ¿­:%s",pFrame->x,pFrame->y,pFrame->str);

          TextOut(hdc,mx,my,Mes,lstrlen(Mes));

          EndPaint(hWnd, &ps);

          return 0;

     case WM_DESTROY:

          return 0;

     }

     return(DefWindowProc(hWnd,iMessage,wParam,lParam));

}

 

±âº» ºä¿Í´Â ´Ù¸£´Ù´Â °ÍÀ» º¸¿© ÁÖ±â À§ÇØ ¿©·¯ °¡Áö µ¿ÀÛ ¹æ½ÄÀ» ÀǵµÀûÀ¸·Î ¹Ù²Ù¾î º¸¾Ò´Ù. ¹è°æ»öÀ» ¿¶Àº ȸ»öÀ¸·Î ¹Ù²Ù¾úÀ¸¸ç ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÏ´Â ¹æ¹ýµµ ´Ù¸£´Ù. ù¹øÂ° ºä´Â ÇÁ·¹ÀÓÀÇ (x,y)¿¡ strÀ» Ãâ·ÂÇÏÁö¸¸ µÎ¹øÂ° ºä´Â ÇÁ·¹ÀÓÀÇ Á¤º¸¸¦ Åë°·Î ¹®ÀÚ¿­È­ÇÏ¿© ÀÚ½ÅÀÌ °¡Áö°í ÀÖ´Â mx, my¿¡ ÀÌ ¹®ÀÚ¿­À» Ãâ·ÂÇÑ´Ù. »ç¿ëÀÚÀÇ ÀԷµµ ´Ù¸¥ ¹æ½ÄÀ¸·Î ÇØ¼®Çϴµ¥ Ä¿¼­ À̵¿Å°´Â ÇÁ·¹ÀÓÀÇ x,y°ªÀ» ¹Ù²Ù´Â °ÍÀÌ ¾Æ´Ï¶ó ÀÚ½ÅÀÇ my, my¸¦ º¯°æÇÏ¸ç ¸¶¿ì½º ¹öưÀ» ´©¸¦ ¶§ ¹®¼­ÀÇ x,yÁÂÇ¥¸¦ 1¾¿ Áõ°¡½ÃŲ´Ù.

ÇÁ·¹ÀÓÀº ÀÌ Å¬·¡½ºÀÇ °´Ã¼µµ ÇÁ·¹ÀÓÀÇ ¸â¹ö¸¦ ÀÚÀ¯·Ó°Ô ¾×¼¼½ºÇÒ ¼ö ÀÖµµ·Ï ÇÁ·£µå·Î ÁöÁ¤ÇØ¾ß ÇÑ´Ù. ±×¸®°í ½ÇÇàÁß¿¡ ºäÀÇ Å¸ÀÔÀ» ¹Ù²Ü ¼ö ÀÖ´Â ChangeViewType ¸â¹ö ÇÔ¼öµµ Ãß°¡ÇÏ¿´´Ù.

 

class CShowMsg : public CWindow

{

     friend class CShowMsgView;

    friend class CShowMsgView2;

private:

     int x;

     int y;

     TCHAR *str;

 

public:

     CShowMsg();

     CShowMsgView *arView[2];

 

     BOOL Create(int x,int y,int w,int h,DWORD style,UINT id,HWND hParent);

     LRESULT OnMessage(UINT iMessage,WPARAM wParam,LPARAM lParam);

     void ChangeString(TCHAR *nstr);

     CShowMsgView *CreateView(int Type);

     void DeleteView(int nView);

     void SplitView();

     void UpdateViews(CShowMsgView *pView);

    void ChangeViewType(int nView,int Type);

};

 

ChangeViewType ÇÔ¼ö´Â nView¹øÂ° ºäÀÇ Å¸ÀÔÀ» TypeÀ¸·Î º¯°æÇÑ´Ù. ÄÚµå´Â ´ÙÀ½°ú °°ÀÌ °°´Ù.

 

void CShowMsg::ChangeViewType(int nView,int Type)

{

     DeleteView(nView);

     arView[nView]=CreateView(Type);

     SendMessage(hWnd,WM_SIZE,0,0);

}

 

DeleteView ÇÔ¼ö¸¦ È£ÃâÇÏ¿© nView ¹øÂ° ºä¸¦ »èÁ¦Çϰí CreateView·Î Type ŸÀÔÀÇ ºä¸¦ ´Ù½Ã »ý¼ºÇÏ¿© arView[nView]¿¡ ±× Æ÷ÀÎÅ͸¦ ´ëÀÔÇÑ´Ù. ÇÁ·¹ÀÓ°ú ºä°¡ ºÐÇҵǾî Àֱ⠶§¹®¿¡ ÇÁ·¹ÀÓÀº ±×´ë·Î ÀÖ°í ºä¸¸ ÆÄ±«Çß´Ù°¡ ´Ù½Ã »ý¼ºÇÏ´Â °ÍÀÌ °¡´ÉÇØÁ³À¸¸ç À̶§ ºäÀÇ Å¸ÀÔÀ» ¹Ù²Ü ¼ö ÀÖ´Ù. ºä¸¦ ±³Ã¼ÇÑ ÈÄ WM_SIZE ¸Þ½ÃÁö¸¦ º¸³» »õ·Î »ý¼ºµÈ ºä¸¦ ÇÁ·¹ÀÓÀÇ ÀÛ¾÷ ¿µ¿ª¿¡ Àç¹èÄ¡ÇÏ¿´´Ù. ºäÀÇ Å¸ÀÔÀÌ Çϳª ´õ ´Ã¾î³µÀ¸¹Ç·Î CreateView ÇÔ¼ö´Â »õ·Î Ãß°¡µÈ ºäµµ »ý¼ºÇØ¾ß ÇÑ´Ù.

 

CShowMsgView *CShowMsg::CreateView(int Type)

{

     CShowMsgView *pView;

     switch (Type) {

     case VIEW1:

          pView=new CShowMsgView;

          break;

    case VIEW2:

        pView=new CShowMsgView2;

        break;

     }

 

     pView->pFrame=this;

     pView->Create(0,0,0,0,WS_CHILD | WS_VISIBLE,0,hWnd);

     return pView;

}

 

switch ¹®¿¡ case°¡ Çϳª ´õ ´Ã¾î³­ °Í »ÓÀÌ´Ù. TypeÀ¸·Î Àü´ÞµÈ ŸÀÔÀÇ ºä °´Ã¼¸¦ »ý¼ºÇÏ¿© ±× Æ÷ÀÎÅ͸¦ ¸®ÅÏÇß´Ù. ¸¸¾à ºäÀÇ Å¸ÀÔÀÌ ´õ ´Ã¾î³­´Ù¸é ÀÌ ÇÔ¼öµµ »õ·Î Ãß°¡µÈ ºä¸¦ Áö¿øÇÒ ¼ö ÀÖµµ·Ï È®ÀåµÇ¾î¾ß ÇÑ´Ù. ¸¶Áö¸·À¸·Î ºä ±³Ã¼¸¦ Å×½ºÆ®Çϱâ À§ÇØ È£½ºÆ®¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.

 

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     switch(iMessage) {

     case WM_CREATE:

          msg.Create(0,0,0,0,WS_CHILD | WS_VISIBLE,1,hWnd);

          CreateWindow("button","â ºÐÇÒ",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,

              10,10,100,25,hWnd,(HMENU)1,g_hInst,NULL);

        CreateWindow("button","ºä ±³Ã¼",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,

           120,10,100,25,hWnd,(HMENU)2,g_hInst,NULL);

          return 0;

     case WM_COMMAND:

          switch (LOWORD(wParam)) {

          case 1:

              msg.SplitView();

              break;

        case 2:

           if (msg.arView[0]->ViewType == VIEW1) {

               msg.ChangeViewType(0,VIEW2);

           } else {

               msg.ChangeViewType(0,VIEW1);

           }

           break;

          }

          return 0;

          ....

 

ºä ±³Ã¼¶ó´Â ¹öưÀ» »õ·Î ¹èÄ¡Çϰí ÀÌ ¹öưÀ» ´©¸£¸é ºäÀÇ Å¸ÀÔÀ» Åä±ÛÇÑ´Ù. ÀÌ ¿¹Á¦´Â Ȱ¼º ºä¸¦ °ü¸®ÇÏÁö ¾ÊÀ¸¹Ç·Î ¹«Á¶°Ç ù ¹øÂ° ºä¿¡ ´ëÇØ¼­¸¸ ŸÀÔÀ» ±³Ã¼Çߴµ¥ Ȱ¼º ºä¸¦ °ü¸®ÇÑ´Ù¸é Ȱ¼º ºäÀÇ Å¸ÀÔÀ» º¯°æÇÒ ¼öµµ ÀÖ´Ù. ´ÙÀ½Àº µÎ °³ÀÇ ºä·Î ºÐÇÒÇÑ »óÅ¿¡¼­ ù¹øÂ° ºäÀÇ Å¸ÀÔÀ» º¯°æÇØ º» °ÍÀÌ´Ù.

ApiEditÀÇ °æ¿ì ÅØ½ºÆ® º¸±â ¸ðµå¿Í 16Áø º¸±â ¸ðµå µÎ °¡Áö¸¦ Áö¿øÇÏ°Ô µÉ °ÍÀÌ´Ù. µÎ ¸ðµå´Â ¹®¼­¸¦ º¸¿©ÁÖ´Â ¹æ¹ý°ú ÆíÁýÇÏ´Â ¹æ¹ýÀÌ ¿ÏÀüÈ÷ ´Ù¸£´Ù. ÀÌ»óÀ¸·Î °´Ã¼¸¦ ºÐÇÒÇÏ´Â °£´ÜÇÑ ¿¹Á¦¸¦ ¸¸µé¾î ºÃ´Âµ¥ ¿¹Á¦ÀÇ ±â´É¿¡ ºñÇØ¼­ Àû¿ëµÇ´Â ¹®¹ýÀº ½ÉÈ÷ º¹ÀâÇÏ´Ù. ÃæºÐÈ÷ ÀÌÇØµÉ¸¸Å­ ¼³¸íÀ» Çϱâ´Â ÇßÁö¸¸ C++¿¡ ´ëÇØ À¢¸¸Å­ Á¤¸®°¡ µÇ¾î ÀÖÁö ¾Ê¾Æ¼­´Â ¼±¶æ ÀÌÇØÇϱâ Èûµç ³»¿ëÀε¥ ¸¸¾à ±×·¸´Ù¸é ´Þ·Â¿¡ C++ °í±Þ ¹®¹ýÀ» °øºÎÇÒ ÀÏÁ¤À» Àâ¾Æ ³õ¾Æ¶ó.