Copyright(c) 1999 - 2001 David Beech ¿ø¹® * http://www.bzzt.net/~wxwidgets/icpp_wx1.html * http://www.bzzt.net/~wxwidgets/icpp_wx2.html * http://www.bzzt.net/~wxwidgets/icpp_wx3.html * http://www.bzzt.net/~wxwidgets/icpp_wx4.html * http://www.bzzt.net/~wxwidgets/icpp_wx5.html * http://www.bzzt.net/~wxwidgets/icpp_wx6.html * http://www.bzzt.net/~wxwidgets/icpp_wx7.html [[TableOfContents]] = Programming with wxWindows - ù ´Ü°è = == ¼Ò°³ == Áö±ÝºÎÅÍ [wxWindows] Ŭ·¡½º ¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇÑ »õ·Ó°í ½¬¿î À©µµ¿ìÁî ÇÁ·Î±×·¥ Á¦ÀÛ¹ýÀ» »ìÆ캸°íÀÚ ÇÑ´Ù. ¾ö¹ÐÈ÷ ¸»Çϸé wxWindows´Â ¶óÀ̺귯¸® ¼öÁØÀ» ¶Ù¾î³ÑÀ¸¸ç ¿ÏÀüÇÑ ÀÀ¿ë ÇÁ·Î±×·¥À» ¸¸µé ¼ö ÀÖ´Â °³¹ß ȯ°æÀ» Á¦°øÇÑ´Ù. wxWindowsÀÇ ÀåÁ¡Àº ¿©±â¼­ ±×Ä¡Áö ¾Ê´Âµ¥, wxWindows ±× ÀÚü°¡ cross-platform ¶óÀ̺귯¸®À̱⠶§¹®ÀÌ´Ù. wxWindows °³¹ßÀÚ´Â ´ÙÀ½°ú °°ÀÌ ¸»ÇÏ°í ÀÖ´Ù: {{| wxWindows´Â ¹«¾ùÀΰ¡? wxWindows´Â ´Ù¾çÇÑ Ç÷§Æû¿¡ ´ëÇØ ¶È°°ÀÌ Àû¿ëµÇ¸ç »ç¿ëÇϱ⠽¬¿î GUI °³¹ß API¸¦ Á¦°øÇÑ´Ù. °¢°¢ÀÇ Ç÷§Æû¿¡¼­ »ç¿ëÇÏ´Â Àú¼öÁØ ¶óÀ̺귯¸®¿ÍÀÇ ¸µÅ©¸¦ ÅëÇØ, wxWindows¸¦ ÅëÇØ °³¹ßµÈ ÀÀ¿ëÇÁ·Î±×·¥Àº °¢ Ç÷§Æû¿¡ ¸Â´Â ·è¾ØÇÊÀ» Á¦°øÇÑ´Ù. ¶ÇÇÑ ¿Â¶óÀÎ µµ¿ò¸», ³×Æ®¿öÅ© ÇÁ·Î±×·¡¹Ö, ½ºÆ®¸² Á¦¾î, Ŭ¸³º¸µå, µå·¡±×/µå·Ó, ¸ÖƼ ¾²·¹µù, ´Ù¾çÇÑ À̹ÌÁö ÆÄÀÏ¿¡ ´ëÇÑ ÀÐ°í ¾²±â ±â´É, µ¥ÀÌŸº£À̽ºÁö¿ø, HTML º¸±â ¹× Ãâ·Â±â´É µî°ú °°Àº ÃÖ°í ¼öÁØÀÇ GUI ±â´ÉµéÀÌ Æ÷ÇԵǾîÀÖ´Ù. |}} wxWindows´Â ¸Å¿ì °íÇ°ÁúÀÇ ÀúÀÛ¹°·Î, ½ÇÁ¦ ¸î¸î »ç¶÷µéÀº µ·À» ÁÖ°í »ì¸¸ÇÏ´ÙÇÏ¿© "»ó¾÷¿ë Ç°Áú"À̶ó´Â ¸»À» ¾²±âµµ ÇÑ´Ù. ±×·¯³ª Ãʺ¸ÀÚ¿¡°Ô´Â ¾î·Á¿ï ¼ö ÀÖ´Ù´Â wxWindows¿¡ ´ëÇÑ ºñÆÇ ¿ª½Ã »ç½ÇÀÌ´Ù: ½ÇÁ¦·Î ÀÔ¹®ÇÏ´Â °úÁ¤ÀÌ ¾à°£ º¹ÀâÇÏ´Ù. ÀÌ·¯ÇÑ ºñÆÇ¿¡ ´ëÇؼ­ ´ÙÀ½°ú °°Àº ±àÁ¤ÀûÀÎ ´äº¯À» ÇØÁÙ ¼ö ÀÖ´Ù. ÇÁ·Î±×·¡¸Ó°¡ Ŭ·¡½º¿Í ÇÔ¼ö, ÇÁ·Î±×·¡¹Ö Å×Å©´Ð°ú °°Àº wxWindowsÀÇ ¾ÆÅ°ÅØÃÄ¿¡ ´ëÇÑ °³³äÀ» Àâ°ÔµÈ´Ù¸é À¯¿ëÇÑ ÀÀ¿ëÇÁ·Î±×·¥À» Â¥´Â ÀÏÀº »ó´ëÀûÀ¸·Î ½¬¿öÁö±â ¶§¹®¿¡ ÀÔ¹® ´Ü°èÀÇ ¾î·Á¿òÀ» ÃæºÐÈ÷ º¸»ó¹Þ´Â´Ù. ¶ÇÇÑ °æÁ¦ÀûÀ¸·Îµµ ÀåÁ¡À» °®°í Àִµ¥, wxWindows´Â °ÅÀÇ ¸ðµç ÀÀ¿ëÇÁ·Î±×·¥À» °³¹ßÇÒ ¼ö Àִ dzºÎÇÑ ÇÁ·¡ÀÓ¿öÅ©À̱⠶§¹®ÀÌ´Ù. ¿©±â±îÁö ÀÐÀ¸¸é¼­ ÃßÃøÇß°ÚÁö¸¸, ³ª´Â wxWindowsÀÇ ¿­¿­ÇÑ ÁöÁöÀÚÀ̸ç ÀÌ À¥ÆäÀÌÁö¸¦ ÅëÇØ ´ç½Å°ú wxWindows¿¡ ´ëÇÑ ¿­Á¤À» ±³·ùÇϱæ¹Ù¶õ´Ù. ÀÌ ±Û¿¡¼­ ³ª´Â ±âÃʺÎÅÍ Â÷±ÙÂ÷±Ù ¿¹Á¦ ÇÁ·Î±×·¥À» ÅëÇØ wxWindowsÀÇ ±¸Á¶¿Í Ŭ·¡½º¿¡ ´ëÇؼ­ ¼³¸íÇÏ·Á°í ÇÑ´Ù. ÀÌ ¹®¼­¸¦ ÀÐ°í ³ª¸é wxWindows¿¡ ´ëÇÑ ±âÃʸ¦ ´ÙÁú ¼ö ÀÖÀ» °ÍÀÌ´Ù. ½ÃÀÛ¿¡ ¾Õ¼­ ¸î°¡Áö »çÇ×À» ÀÏ·¯µÎ°íÀÚ ÇÑ´Ù. * ³ª´Â Ưº°È÷ ÈǸ¢ÇÑ ÇÁ·Î±×·¡¸Óµµ ¾Æ´Ï¸ç wxWindows¸¦ Åë´ÞÇÏÁöµµ ¾Ê¾Ò´Ù. ±×·¯³ª ³ª´Â ±ÛÀçÁÖ°¡ Á» ÀÖÀ¸¸ç º¹ÀâÇÑ ÁÖÁ¦µéÀ» ¸íÈ®È÷ ¼³¸íÇÒ ¼ö ÀÖ´Ù°í È®½ÅÇÑ´Ù. * ¸¹Àº ºÎºÐÀº ¾Æ´ÏÁö¸¸ C¿Í C++¿¡ ´ëÇÑ »çÀü ÀÌÇØ°¡ ÇÊ¿äÇÏ´Ù. wxWindows¸¦ ¹è¿ö°¡´Ùº¸¸é ´ç½ÅÀÇ C/C++ ½Ç·Âµµ ¸¹ÀÌ Çâ»óµÉ °ÍÀÌ´Ù. ´ç½ÅÀÌ ÀÌ À¥»çÀÌÆ®ÀÇ C++°ú °ü·ÃÇÑ ¹®¼­µéÀ» ´ëºÎºÐ Žµ¶Çß´Ù¸é ¾Æ¸¶µµ º° ¹®Á¦°¡ ¾øÀ» °ÍÀÌ´Ù. * °´Ã¼ÁöÇâ ÇÁ·Î±×·¡¹Ö°ú Ŭ·¡½º¿¡ ´ëÇÑ »çÀü ÀÌÇØ°¡ ÇÊ¿äÇÏ´Ù. ÀÌ ¶ÇÇÑ ÀÌ À¥»çÀÌÆ®ÀÇ ¹®¼­°¡ µµ¿òÀÌ µÉ °ÍÀÌ´Ù. * Ãʱâ ÀÛ¾÷Àº MS À©µµ¿ì ȯ°æ (Win95/98/2K) ¿¡¼­ ÀÌ·ç¾îÁ³´Ù. MingW ÆÐÅ°Áö¿Í wxWindows·Î °³¹ß ȯ°æÀ» ±¸¼ºÇÏ¿´´Ù. ¸¸¾à ´ç½ÅÀÌ C++ ÇÁ·Î±×·¥¿¡ Àͼ÷ÇÏÁö ¾ÊÁö¸¸ wxWindows¸¦ »ç¿ëÇÏ¿© ½ÇÁ¦ GUI ÇÁ·Î±×·¥À» ¾î¼­ »¡¸® °³¹ßÇÏ°í½Í´Ù¸é ÀÌ ¹®¼­´Â ¸Å¿ì Å« µµ¿òÀÌ µÉ °ÍÀÌ´Ù. ÀÚ ÇÔ²² °¡º¸ÀÚ! == wxWindowsÀÇ ±¸Á¶¿Í ù¹ø° ÇÁ·Î±×·¥ == ¿©±â°¡ Ãâ¹ßÁ¡À̱⠶§¹®¿¡, ¸ðµç °É ¸Å¿ì °£´ÜÇÏ°Ô ½ÃÀÛÇÏ°Ú´Ù. wxWindows¿ÍÀÇ Ã¹ ´ë¸éÀº ±× °¡Àå ´Ü¼øÇÑ ¸ð½ÀÀÌ´Ù. °è¼Ó °øºÎ¸¦ ÇØ°¡¸é¼­ ÇÁ·¡ÀÓ¿öÅ©ÀÇ ¼¼ºÎ»çÇ×À» Çϳª¾¿ »ìÆ캼 °ÍÀÌ´Ù. wxWindows GUI ÇÁ·Î±×·¥Àº ´ÙÀ½À¸·Î ±¸¼ºµÇ¾îÀÖ´Ù. * ¾îÇø®ÄÉÀÌ¼Ç °´Ã¼ - wxApp Ŭ·¡½ºÀÇ ÀνºÅϽºÀÌ´Ù * ÇÁ·¡ÀÓ °´Ã¼ - wxFrame Ŭ·¡½ºÀÇ ÀνºÅϽºÀ̸ç ÇÁ·¡ÀÓÀº ¸Þ´º¹Ù, »óŹÙ, ¾ÆÀÌÄܵîÀ» °¡Áú ¼ö ÀÖ´Ù * ÇÁ·¡ÀÓ °´Ã¼´Â ÅؽºÆ® ÄÁÆ®·ÑÀ̳ª ¹öÆ°, ºÐ¸®ÀÚµîÀÇ ´Ù¸¥ °´Ã¤¸¦ ´ãÀ» ¼ö ÀÖ´Â ÄÁÅ×À̳ÊÀÌ´Ù http://www.bzzt.net/~wxwidgets/images/wxwfig1.png http://www.bzzt.net/~wxwidgets/images/wxbasic0.png °¡Àå °£´ÜÇÑ ÇÁ·Î±×·¥Àº ºó ÇÁ·¡ÀÓ Çϳª·Î¸¸ ÀÌ·ç¾îÁ®ÀÖÀ¸¸ç, ÀÌ°ÍÀÌ ±× ù¹ø° ±âº» ¿¹Á¦ÀÌ´Ù. ÀÌ ¿¹Á¦°¡ ¾î¶² À¯¿ë¼ºÀÌ ÀÖ´ÂÁö ±Ã±ÝÇØ ÇÏ´Â °ÍÀÌ ´ç¿¬ÇÏ´Ù. ÇÁ·¡ÀÓ¸¸ ´Þ¶û ÀÖ´Â ¿¹Á¦ÀÌÁö¸¸ ±³À°Àû°¡Ä¡´Â ÃæºÐÇÏ´Ù. ±×·¡¼­ ¿ì¸®°¡ ÀÌ°ÍÀ» Á¦ÀÏ Ã³À½À¸·Î »ìÆ캸´Â °ÍÀÌ´Ù. ÀÌ ´Ü¼øÇÑ ÇÁ·Î±×·¥Àº À©µµ¿ì ÇÁ·Î±×·¥À¸·Î¼­ ¸ðµç À¯¿ëÇÑ ÇൿÇÒ ¼ö ÀÖ´Ù. ÀÌ ÇÁ·Î±×·¥Àº ½Ã½ºÅÛ ¸Þ´º¸¦ °®°í ÀÖÀ¸¸ç, À̵¿½Ãų ¼öµµ ÀÖ°í, Å©±â¸¦ Á¶ÀýÇÒ ¼ö ÀÖ°í, ¶ÇÇÑ ¾ø¾Ù ¼ö µµ ÀÖ´Ù. ÀÌ ÇÁ·Î±×·¥ÀÌ ´ë´ÜÇغ¸ÀÌÁö´Â ¾Ê°ÚÁö¸¸, ¿ì¸®°¡ ¼Õ¼ö ÀÛ¼ºÇÑ °ÍÀÌ´Ù. ÀÌ ÇÁ·Î±×·¥Àº ¶ÇÇÑ ¿ì¸®¿¡°Ô ½Ã½ºÅÛ ÀÚüÀÇ GUI¸¦ º¸¿©ÁØ´Ù. ÀÌ °æ¿ì´Â Windows 98Àε¥, wxWindows°¡ Å©·Î½ºÇ÷§Æû ÇÁ·¡ÀÓ¿öÅ©ÀÓÀ» ±â¾ïÇÑ´Ù¸é Linux, OS2, Mac°ú °°Àº ´Ù¸¥ Ç÷§Æû¿¡¼­µµ ¶È°°ÀÌ Àû¿ëµÈ ´Ù´Â °ÍÀ» ÁüÀÛÇÒ ¼ö ÀÖ´Ù. ¿ì¸®ÀÇ Ã¹¹ø° ±âÃÊ ¿¹Á¦¿¡ ´ëÇÑ ¼Ò½ºÄÚµå´Â ´ÙÀ½°ú °°´Ù. {{{#!vim cpp #ifndef BASIC_H #define BASIC_H class BasicApplication : public wxApp { public: virtual bool OnInit(); }; class BasicFrame : public wxFrame { public: BasicFrame( const wxChar *title, int xpos, int ypos, int width, int height); ~BasicFrame(); }; #endif }}} ÀÌ°ÍÀº Çì´õ ÆÄÀÏÀÌ´Ù. ÀÌ ±âÃÊ ÀÀ¿ëÇÁ·Î±×·¥Àº 2°³ÀÇ Å¬·¡½º¸¦ ¼±¾ðÇÑ´Ù: * wxApp·Î ºÎÅÍ »ó¼ÓµÈ BasicApplication * wxFrameÀ¸·Î ºÎÅÍ »ó¼ÓµÈ BasicFrame BasicFrameÀ» À§ÇÑ »ý¼ºÀÚ¿Í ¼Ò¸êÀÚ¸¦ ¼±¾ðÇßÁö¸¸, BasicApplication¿¡ ´ëÇؼ­´Â OnInit() ¸â¹öÇÔ¼ö¸¦ ¿À¹ö¶óÀ̵ùÇÒ »ÓÀÌ´Ù. ¿À¹ö¶óÀ̵ùÇÑ ¸â¹öÇÔ¼öÀ̱⠶§¹®¿¡ °¡»óÀ¸·Î ¼±¾ðµÈ Á¡À» ÀØÁö¸»ÀÚ. {{{#!vim cpp #include #include "basic.h" IMPLEMENT_APP(BasicApplication) bool BasicApplication::OnInit() { BasicFrame *frame = new BasicFrame("Basic", 50, 50, 450, 300); frame->Show(TRUE); SetTopWindow(frame); return TRUE; } BasicFrame::BasicFrame (const wxChar *title, int xpos, int ypos, int width, int height) : wxFrame ( (wxFrame *) NULL, -1, title, wxPoint(xpos, ypos), wxSize(width, height) ) { } BasicFrame::~BasicFrame() { } }}} ÀÌ°ÍÀº basic.h¿¡ ¼±¾ðÇÑ Å¬·¡½ºÀÇ Á¤ÀÇ¿Í ±¸ÇöÀ» ´ã°íÀÖ´Ù. ù¹ø°·Î ´«¿¡ ¶ì´Â °ÍÀº ´ÙÀ½ÀÇ ¸ÅÅ©·ÎÀÌ´Ù. IMPLEMENT_APP(BasicApplication) ¿ì¸®ÀÇ °üÁ¡¿¡¼­ º¸¸é ÀÌ ¸ÅÅ©·Î´Â BasicApplication °´Ã¼¸¦ »ý¼ºÇÏ°í ÀÀ¿ëÇÁ·Î±×·¥ÀÇ ½ÃÀÛÁ¡À» Á¦°øÇÑ´Ù. ÀÌ°ÍÀº int WINAPI WinMain( ... ) ÇÔ¼ö°¡ ÇÏ´Â ¸ðµç ÀÏÀ» ´ëüÇÑ´Ù. OnInit() ¸â¹öÇÔ¼ö´Â ÀûÀýÇÑ x, y °ª°ú À©µµ¿ìÀÇ Æø, ³ôÀÌ, ±×¸®°í Á¦¸ñÀ» °®´Â BasicFrameÀÇ ÀνºÅϽº¸¦ »ý¼ºÇÑ´Ù. ±×¸®°í ³ª¼­ ÇÁ·¡ÀÓÀ» º¸À̱â À§ÇØ Show() ¸â¹öÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. wxFrame Ŭ·¡½º¸¦ »ìÆ캸¸é Show() ¸â¹öÇÔ¼ö¸¦ ãÀ» ¼ö ¾ø´Âµ¥ ÀÌ°ÍÀº wxFrameÀÌ wxWindow·Î ºÎÅÍ »ó¼ÓµÇ¾î¼­ wxWindowÀÇ ¸â¹öÇÔ¼öÀÎ Show() ¸â¹öÇÔ¼ö¸¦ ÇÔ²² ¹°·Á¹Þ¾Ò±â ¶§¹®ÀÌ´Ù. ¸¹Àº Ŭ·¡½º°¡ ´Ù¸¥ Ŭ·¡½º·Î ºÎÅÍ »ó¼ÓµÇ¾ú±â ¶§¹®¿¡, ºÎ¸ð Ŭ·¡½ºÀÇ ¸â¹öÇÔ¼ö¸¦ °£°úÇÏÁö ¸»¾Æ¾ßÇÑ´Ù. Ãʺ¸ÀÚ¶ó¸é ÀÌÁ¡À» ²À ±â¾ïÇØ¾ß ÇÑ´Ù. OnInit()´Â À̾î wxAppÀÇ ¸â¹ö ÇÔ¼öÀÎ SetTopWindow()¸¦ È£ÃâÇÑ´Ù. »ý¼ºÀÚ¿Í ¼Ò¸êÀÚ¿¡´Â ´Ù¸¥ »õ·Î¿î ³»¿ëÀ» ÷°¡ÇÏÁö ¾Ê¾Ò´Ù. {{{#!vim cpp #include "wx/msw/wx.rc" }}} ¸¶Áö¸·À¸·Î ¸®¼Ò½º ÆÄÀÏÀÌ´Ù. ÀÌ °£´ÜÇÑ ¿¹Á¦ÀÇ °æ¿ì ¾î¶² Ưº°ÇÑ ¸®¼Ò½º°¡ »ç¿ëµÇÁö´Â ¾ÊÁö¸¸, ÃÖ¼ÒÇÑ ´ÙÀ½ ¸®¼Ò½º ÆÄÀÏÀº Ç×»ó Æ÷ÇÔÇØ¾ß ÇÑ´Ù. {{{#!vim cpp #include "wx/msw/wx.rc" }}} ÀÌ ÈÄ¿¡ ¿¹Á¦¿¡¼­´Â ¿ì¸®°¡ ÀÛ¼ºÇÑ ¸®¼Ò½º¸¦ ÷°¡ ÇÒ °ÍÀÌ´Ù. ÀÌÁ¦ ³²Àº ÀÏÀº ºôµåÇÏ¿© ÇÁ·Î±×·¥À» ½ÇÇàÇØ º¸´Â °ÍÀÌ´Ù. == MingW¸¦ ÀÌ¿ëÇÏ¿© wxWindows ÇÁ·Î±×·¥ ºôµåÇϱâ == http://www.bzzt.net/~wxwidgets/images/wxLibInclocate.png wxWindows ¹èÆ÷ÆÇÀº ¸¹Àº »ùÇÃÆÄÀÏ°ú ´Ù¾çÇÑ Ç÷§Æû¿¡¼­ »ùÇà ÆÄÀÏÀ» ÄÄÆÄÀÏÇÒ ¼ö ÀÖ°Ô ÇØÁÖ´Â MakefileÀ» Æ÷ÇÔÇÏ°í ÀÖ´Ù. »ç¿ëÀÚ°¡ ºôµå ¿É¼Çµî ¼¼ºÎ»çÇ×À» ½Å°æ¾²Áö ¾Ê¾Æµµ µÈ´Ù´Â Á¡¿¡¼­ ÀÌ MakefileÀ» ÀÌ¿ëÇÏ´Â °ÍÀÌ ÇÁ·Î±×·¥À» ºôµåÇÏ´Â ÈǸ¢ÇÑ ¹æ¹ýÀÓ¿¡µµ ºÒ±¸ÇÏ°í, ³» °æ¿ì´Â ¸î°¡Áö È¥¶õÀ» °Þ¾úÀ½À» ÀÎÁ¤Çؾ߸¸ ÇÏ°Ú´Ù. ½ÇÁ¦·Î ´ÜÁ¡ ¶ÇÇÑ ÀÖ¾ú´Âµ¥, ºôµå½Ã Çì´õ ÆÄÀÏ°ú ¶óÀ̺귯¸®ÀÇ °æ·Î¸¦ ¸í½ÃÇؾ߸¸ ÇÏ´Â °ÍÀ̾ú´Ù. ³ª´Â wxWindowsÀÇ Çì´õ ÆÄÀÏ°ú ¶óÀ̺귯¸® ÆÄÀÏÀ» °¢°¢ÀÇ Ç¥ÁØ À§Ä¡¿¡ º¸°üÇÏ´Â °ÍÀÌ ´õ µµ¿òÀÌ µÈ´Ù´Â °ÍÀ» ¾Ë¾Æ³Â´Ù. ¶óÀ̺귯¸®¸¦ ºôµåÇÏ¿© ¼³Ä¡ÇÑ ÈÄ ³ª´Â wx Çì´õ ÆÄÀÏÀ» Ç¥ÁØ À§Ä¡·Î À̵¿ ½ÃÄ×´Ù. ³» À©µµ¿ì ½Ã½ºÅÛ¿¡¼­´Â MingW Æ®¸®¿¡ À§Ä¡ÇÏ¸ç ¸®´ª½º ½Ã½ºÅÛ¿¡¼­´Â /usr ¶Ç´Â /usr/local Æ®¸®¿¡ À§Ä¡ÇÑ´Ù. (/usr/lib, /usr/include ¶Ç´Â /usr/local/lib, /usr/local/include). ÀÌ·¸°Ô ¶óÀ̺귯¸®¿Í Çì´õÆÄÀÏÀÇ Àç¹èÄ¡´Â Ãʺ¸ÀÚµéÀ» È¥¶õ½º·´°ÔÇÏ´Â °Íµé Áß Çϳª¸¦ ¾ø¾ÖÁÖ´Â ÀåÁ¡ÀÌ ÀÖ´Ù. ÀÌ·¸°Ô Çؼ­ ¿¹Á¦¸¦ ºôµåÇϱâ À§ÇÑ ´ÙÀ½ÀÇ MakefileÀ» ¾µ ¼ö ÀÖ°Ô µÈ´Ù. {{{#!vim make PROGRAM = basic OBJECTS = ${PROGRAM}.o ${PROGRAM}_resources.o RC = windres.exe CC = g++ INCLUDES = CCSW1 = --pipe -fvtable-thunks -c -D_X86_=1 -DWIN32 -D_WIN32 -DWINVER=0x0400 -D__WIN95__ \ -D__GNUWIN32__ -D__WIN32__ -DSTRICT -D__WXMSW__ -D__WINDOWS__\ -Wall -fno-pcc-struct-return -O2 -fno-rtti -fno-exceptions CCSW2 = --pipe -fvtable-thunks -Wl,--subsystem,windows -mwindows LIBS = -lwx -lxpm -lcomctl32 -ladvapi32 -lwsock32 -lole32 -loleaut32 -luuid RESSW = --include-dir c:/gcc-2.95.2-1/i386-mingw32msvc/include \ --define __WIN32__ --define __WIN95__ --define __GNUWIN32__ .SUFFIXES: .o .cpp all: ${OBJECTS} $(CC) -o $(PROGRAM) ${OBJECTS} ${CCSW2} ${LIBS} .cpp.o: $(CC) ${CCSW1} ${INCLUDES} -c -o $@ $< ${PROGRAM}_resources.o: $(RC) ${RESSW} ${PROGRAM}.rc $@ .PHONY : clean clean: echo cleaning up rm $(OBJECTS) rm *.$$$$$$ rm ${PROGRAM}.exe }}} ÇÁ·Î±×·¥À» ºôµåÇϱâ À§ÇØ Àû´çÇÑ µð·ºÅ丮¿¡ ¼Ò½ºÆÄÀϵéÀ» »ý¼ºÇÑ´Ù. * basic.h * basic.cpp * basic_resources.rc * Makefile ÆÄÀÏÀÌ ÀúÀåµÈ µð·ºÅ丮¿¡¼­ make¸¦ ½ÇÇàÇÑ´Ù. * make ÇÁ·Î±×·¥À» ½ÇÇàÇÑ´Ù. * basic ÆÄÀÏÀÌ ÇÊ¿äÇÒ °æ¿ì ´ÙÀ½À» ³»·Á¹ÞÀ» ¼ö ÀÖ´Ù ([http://www.bzzt.net/downloads/wxbasic0.zip) http://www.bzzt.net/downloads/wxbasic0.zip)]. ¿ªÀÚ ÁÖ * wx-config ¶ó´Â ÇÁ·Î±×·¥À» »ç¿ëÇصµ µË´Ï´Ù. * wx-config --cxxflags * wx-config --libs * ex) gcc -o outfile sourcefile wx-config --cxxflags --libs == »ç¿ëÇÑ wxWindows Ŭ·¡½º == ¿ì¸®´Â ¿ÀÁ÷ 2°³ÀÇ Å¬·¡½º¸¸À» »ç¿ëÇß´Ù: * wxApp * wxFrame À̷κÎÅÍ ¿ì¸® ÀÚ½ÅÀÇ Å¬·¡½ºÀÎ BasicApplication°ú BasicFrameÀ» À¯µµÇß´Ù. ÀÌÁ¦ ÀÌ µÎ Ŭ·¡½º¿¡ ´ëÇؼ­ ÀÚ¼¼È÷ ¾Ë¾Æº¸·Á°í ÇÑ´Ù. ´Ü, ´õ¿í ¿ÏÀüÇÑ Å¬·¡½º ¼³¸íÀº wxWindows ¹®¼­¸¦ ÂüÁ¶ÇÏ±æ ¹Ù¶õ´Ù. * wxApp wxApp Ŭ·¡½º´Â 30°³°¡ ³Ñ´Â ÂüÁ¶°¡´ÉÇÑ ¸â¹ö¸¦ °¡Áö°í ÀÖÁö¸¸, ÀÌ ´Ü°è¿¡¼­ °¢°¢À» ÀÚ¼¼È÷ »ìÆ캼 ÇÊ¿ä´Â ¾ø´Ù. ÃßÈÄ¿¡ wxWindows À̺¥Æ® ½Ã½ºÅÛÀ» ´Ù·ê ¶§, wxApp¿¡ ´ëÇؼ­ ÀÚ¼¼È÷ ¾Ë¾Æº¸±â·Î ÇÏÀÚ. * wxFrame wxFrame Ŭ·¡½º°¡ ÇÏ´Â ÀÏÀº "´«¿¡ º¸À̱â" ¶§¹®¿¡ ½Ã°£À» ÇÒ¾ÖÇÏ¿© °¢°¢ÀÇ ¼Ó¼º¿¡ ´ëÇØ ¾Ë¾Æº¸±â·Î ÇÏÀÚ. wxFrame »ý¼ºÀÚ {{{#!vim cpp wxFrame ( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_FRAME_STYLE, const wxString& name = "frame" ) }}} ¿ì¸®°¡ ¸¸µç BasicFrameÀÇ »ý¼ºÀÚ´Â Á¦¸ñ, x/y ÁÂÇ¥, Æø, ±×¸®°í ³ôÀÌ ÀÌ·¸°Ô ¿ÀÁ÷ 4°³ÀÇ ¸Å°³º¯¼ö¸¦ °®´Â´Ù. wxFrameÀÇ »ý¼ºÀÚ´Â ±× ¹ÛÀÇ ¸Å°³º¯¼öµéÀ» °®´Â´Ù: wxWindow Æ÷ÀÎÅÍ, ½ºÅ¸ÀÏ, À̸§, wxWindowID. wxWindowID´Â Á¤¼ö·Î -1ÀÏ °æ¿ì ±âº»°ªÀÌ »ç¿ëµÈ °ÍÀÌ´Ù. ¶§¶§·Î ´ç½ÅÀÌ ÁöÁ¤ÇÑ ID·Î ¼³Á¤ÇÏ´Â °ÍÀÌ À¯¿ëÇÒ ¶§°¡ ÀÖ´Ù. Æ÷ÀÎÅÍ´Â ºÎ¸ð À©µµ¿ì°¡ 1°³ÀÏ °æ¿ì, ºÎ¸ð À©µµ¿ì¸¦ °¡¸®Å²´Ù. ¿ì¸®ÀÇ °æ¿ì ÀÌ Æ÷ÀÎÅÍ°¡ NULLÀ» °¡¸®Å°´Âµ¥ ºÎ¸ðÀ©µµ¿ì°¡ ¾ø±â ¶§¹®ÀÌ´Ù. À̸§ ¸Å°³º¯¼ö´Â ID¿Í °°ÀÌ ÇÁ·Î±×·¡¸Ó¿¡ ÀÇÇؼ­ ÁöÁ¤µÉ ¼ö ÀÖÀ¸¸ç ÇÁ·¡ÀÓÀÌ ÂüÁ¶µÇ°í ÀÖ´Ù¸é À¯¿ëÇÏ´Ù. ÇÁ·¡ÀÓ ½ºÅ¸ÀÏÀº ¸Å¿ì ´Ù¾çÇÑ °ªÀ» °¡Áú ¼ö ÀÖ´Ù: À©µµ¿ì ½ºÅ¸ÀÏ * wxDEFAULT_FRAME_STYLE. wxMINIMIZE_BOX | wxMAXIMIZE_BOX | wxRESIZE_BOX | wxSYSTEM_MENU | wxCAPTION·Î Á¤ÀÇ µÈ´Ù. * wxICONIZE ¾ÆÀÌÄÜÈ­(ÃÖ¼ÒÈ­)µÈ ÇÁ·¡ÀÓÀ» º¸¿©ÁØ´Ù. Windows¿¡¼­¸¸ »ç¿ë°¡´É. * wxCAPTION ÇÁ·¡ÀÓ¿¡ ĸ¼ÇÀ» ³Ö´Â´Ù. * wxMINIMIZE wxICONIZE°ú °°´Ù. Windows¿¡¼­¸¸ »ç¿ë°¡´É. * wxMINIMIZE_BOX ÇÁ·¹ÀÓ¿¡ ÃÖ¼ÒÈ­µÈ ¹Ú½º¸¦ Ç¥½ÃÇÑ´Ù. * wxMAXIMIZE ÃÖ´ëÈ­µÈ ÇÁ·¡ÀÓÀ» Ç¥½ÃÇÑ´Ù. Windows¿¡¼­¸¸ »ç¿ë°¡´É. * wxMAXIMIZE_BOX ÇÁ·¹ÀÓ¿¡ ÃÖ´ëÈ­µÈ ¹Ú½º¸¦ Ç¥½ÃÇÑ´Ù. * wxSTAY_ON_TOP Ç×»ó ÃÖ»óÀ§·Î À¯ÁöÇÑ´Ù. Windows¿¡¼­¸¸ »ç¿ë°¡´É. * wxSYSTEM_MENU ½Ã½ºÅÛ ¸Þ´º¸¦ Ç¥½ÃÇÑ´Ù. * wxSIMPLE_BORDER ¿Ü°û °æ°è¼±°ú Àå½ÄÀ» ÇÏÁö ¾Ê´Â´Ù. GTK¿Í Windows¿¡¼­¸¸ »ç¿ë°¡´É. * wxRESIZE_BORDER À©µµ¿ì ÁÖÀ§¿¡ Å©±âÁ¶Àý °¡´ÉÇÑ ¿Ü°û¼±À» Ç¥½ÃÇÑ´Ù. Unix¿¡¼­¸¸ »ç¿ë°¡´É. * wxFRAME_FLOAT_ON_PARENT ÇÁ·¡ÀÓÀÌ ºÎ¸ð À©µµ¿ìÀÇ À§¿¡ À§Ä¡Çϵµ·Ï Çϸç ÀÛ¾÷Ç¥½ÃÁÙ¿¡ ³ªÅ¸³ªÁö ¾Ê´Â´Ù. ÀÌ ½ºÅ¸ÀÏÀÌ ¾øÀ» °æ¿ì, ÇÁ·¡ÀÓÀº ÃÖ»óÀ§ À©µµ¿ì·Î »ý¼ºµÇ¸ç ºÎ¸ð À©µµ¿ì¿¡ ÀÇÇؼ­ °¡·ÁÁú ¼ö ÀÖÀ¸¸ç ÀÛ¾÷Ç¥½ÃÁÙ¿¡ ÇÁ·¡ÀÓ Á¦¸ñÀÌ Ç¥½ÃµÈ´Ù. Windows¿Í GTK¿¡¼­ »ç¿ë°¡´É. * wxFRAME_TOOL_WINDOW ÀÛÀº Á¦¸ñ¸·´ë¸¦ °®´Â ÇÁ·¡ÀÓÀÌ »ý¼ºµÈ´Ù. ÇÁ·¹ÀÓ Á¦¸ñÀº ÀÛ¾÷Ç¥½ÃÁÙ¿¡ ³ªÅ¸³ªÁö ¾ÊÀ¸¸ç, Windows¿¡¼­¸¸ »ç¿ë°¡´ÉÇÏ´Ù. ÇÁ·¡ÀÓ ½ºÅ¸ÀÏÀº ´Ù¸¥ ½ºÅ¸ÀÏ°ú OR ¿¬»êÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿ì¸®°¡ ¸¸µç BasicFrame°ú °°ÀÌ ½ºÅ¸ÀÏ Á¤ÀÇ°¡ ¾øÀ» °æ¿ì, ±âº»°ªÀÌ Àû¿ëµÈ´Ù. Áï BasicFrameÀº wxMINIMIZE_BOX¿Í wxMAXIMIZE_BOX, wxSYSTEM_MENU, wxCAPTION, wxRESIZE_BOXÀÇ ½ºÅ¸ÀÏ ¼Ó¼ºÀ» °®°Ô µÈ´Ù. ÀÌ·¸°Ô ¹Ù²Ù¾î º»´Ù¸é ... {{{#!vim cpp BasicFrame::BasicFrame (const wxChar *title, int xpos, int ypos, int width, int height) : wxFrame ( (wxFrame *) NULL, -1, title, wxPoint(xpos, ypos), wxSize(width, height), wxSIMPLE_BORDER ) ... }}} ¿©±â¼­ º¸µí, wxFrame »ý¼ºÀÚ¿¡ ½ºÅ¸ÀÏ ÀÎÀÚ¸¦ ³Ñ±âµµ·Ï BasicFrame »ý¼ºÀÚ¸¦ ¹Ù²Ù¸é ´Ù¸¥ ½ºÅ¸ÀÏÀÇ È¿°ú¸¦ º¼ ¼ö ÀÖ´Ù. 24°³¿¡ ´ÞÇÏ´Â wxFrameÀÇ ¸â¹öÁß ¸â¹öÇÔ¼ö´Â ´ÙÀ½°ú °°´Ù: * CreateStatusBar * CreateToolBar * GetTitle * SetIcon * SetMenuBar * SetStatusBar * SetStatusText * SetToolBar * SetTitle ´ç½ÅÀº ¾ÕÀ¸·Î °øºÎÇØ°¡´Ùº¸¸é ÀÌµé ´ëºÎºÐÀ» »ç¿ëÇÒ °ÍÀÌÁö¸¸, Áö±ÝÀº SetTitle°ú GetTitle ¸â¹ö ÇÔ¼ö¿¡ ´ëÇؼ­ ¿¬½ÀÀ» Çغ¸ÀÚ. ÇÁ·¡ÀÓ Á¦¸ñ°ú ÇÁ·¡ÀÓ À̸§ {{{#!vim cpp BasicFrame::BasicFrame (const wxChar *title, int xpos, int ypos, int width, int height) : wxFrame( (wxFrame *) NULL, -1, title, wxPoint(xpos, ypos), wxSize(width, height), wxDEFAULT_FRAME_STYLE, "Fred" ) { } }}} À̸§ Àμö¸¦ wxFrame »ý¼ºÀÚ·Î ³Ñ±æ ¼ö ÀÖµµ·Ï BasicFrame »ý¼ºÀÚ¸¦ ¼öÁ¤ÇÏ¿´´Ù. ÀÌÁ¦ ´ÙÀ½ ÁÙÀ» BasicApplication::OnInit() ÇÔ¼ö ³» frame->Show(true)ÁÙ ¾Õ¿¡ Ãß°¡ÇÏÀÚ. {{{#!vim cpp frame->SetTitle(frame->GetTitle() + " " + frame->GetName()); }}} ÇÁ·Î±×·¥À» ºôµåÇÏ°í ½ÇÇàÇغ¸¸é ±× È¿°ú¸¦ º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. GetName() ¸â¹öÇÔ¼ö´Â ¾îµð¼­ ¿Â °ÍÀϱî? == ¿ä¾à == ù¹ø° ÇнÀ¿¡¼­´Â »ó´çÇÑ ¾çÀÇ ±âÃʸ¦ ½×¾Ò´Ù. ´ç½ÅÀº wxWindows ÇÁ·¡ÀÓ¿öÅ©ÀÇ ±âÃʸ¦ »ìÆìºÃÀ¸¸ç ¾ÆÅ°ÅØÃÄ¿¡ ´ëÇÑ ¾î¶² °¨À» Àâ¾ÒÀ» °ÍÀÌ´Ù. wxWindows ¹®¼­ÀÇ Å¬·¡½º ·¹ÆÛ·±½º¸¦ ã¾Æ º¸´Â °ÍÀ» ÀØÁö ¸»±æ ¹Ù¶õ´Ù. óÀ½¿¡ È¥¶õ½º·¯¿ïÁö ¸ð¸£³ª ¿¬½ÀÀ» ÅëÇØ »ó´çºÎºÐ ÇØ°áÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ ½Ã°£ÀÌ ÀÖÀ» ¶§ wxWindowsÀÇ ¼Ò½ºÄڵ带 Žµ¶Çغ¼ °ÍÀ» ±ÇÇÑ´Ù. ±× ¾È¿¡¼­ ¸¹Àº À¯¿ëÇÑ ÁÖ¼®¹®µéÀ» ¹ß°ßÇÒ ¼ö ÀÖÀ» °ÍÀÌ¸ç ¶ÇÇÑ ÀÌ ÈǸ¢ÇÑ ÆÐÅ°Áö°¡ ´ã°í ÀÖ´Â °ÍÀ» È®½ÇÈ÷ ÀÌÇØÇÒ ¼ö ÀÖ´Â Ãâ¹ß Á¡ÀÌ µÉ °ÍÀÌ´Ù. = Programming with wxWindows - ÄÁÆ®·Ñ »ç¿ëÇϱâ = == ¼Ò°³ == ¾Õ ¼¼¼Ç¿¡¼­´Â wxWindowsÀÇ ±âº» °ñ°ÝÀ» »ìÆ캸¾Ò°í, °¡Àå °£´ÜÇÑ ÀÀ¿ëÇÁ·Î±×·¥À» ¸¸µé¾î º¸¾Ò´Ù. °øºÎ¸¦ ¸¹ÀÌ ÇÑ °ÍÀº ¾Æ´ÏÁö¸¸, ÀϹÝÀûÀÎ À©µµ¿ì ÇÁ·Î±×·¥ÀÇ ±âº» ±â´ÉÀ» ¾Ë°Ô µÇ¾ú´Ù. ´ÙÀ½ ´Ü°è´Â ¸î°¡Áö ±â´ÉÀ» Ãß°¡Çغ¸´Â °ÍÀ¸·Î, À̸¦ ÅëÇØ º°·Î À¯¿ëÇغ¸ÀÌÁö´Â ¾ÊÁö¸¸, Áß¿äÇÑ ¹«¾ùÀΰ¡¸¦ °³¹ßÇÒ °ÍÀ̸ç wxWindowsÀÇ ÇÁ·¡ÀÓ¿öÅ©¿¡ ´ëÇØ ´õ¿í ¹è¿ì°Ô µÉ °ÍÀÌ´Ù. ÀÌ ¼¼¼Ç¿¡¼­´Â ÅؽºÆ® ÄÁÆ®·Ñ, ¸Þ´º, »óŹٸ¦ BasicFrame¿¡ Ãß°¡ÇÏ·Á°í ÇÑ´Ù. ¸ÕÀú ÅؽºÆ® ÄÁÆ®·ÑÀ» Ãß°¡Çغ¸ÀÚ. == ÅؽºÆ® ÄÁÆ®·Ñ Ãß°¡Çϱâ == ÅؽºÆ® ÄÁÆ®·ÑÀ» °®´Â ÀÀ¿ëÇÁ·Î±×·¥ÀÌ ¿©±â ³ª¿ÍÀÖ´Ù. http://www.bzzt.net/~wxwidgets/images/wxbasic1.png ÅؽºÆ® ÄÁÆ®·ÑÀº ÅؽºÆ® ÆíÁý±â¿¡ ÇÊ¿äÇÑ ¸ðµç ±â´ÉÀ» Á¦°øÇØÁØ´Ù. ¿¹¸¦ µé¸é Ä¿¼­ À̵¿, ÅؽºÆ® »ðÀÔ, ¼±Åðú »èÁ¦, À߶󳻱â, º¹»ç, ºÙ¿©³Ö±â µîÀÌ´Ù. ¶ÇÇÑ ÅؽºÆ® ÄÁÆ®·Ñ¿¡ ¸î°¡Áö °£´ÜÇÑ ±â´ÉÀ» ´õÇØÁÖ¸é ÆÄÀÏ ¿­±â, ÀúÀå, »õ À̸§À¸·Î ÀúÀå, µÇµ¹¸®±â, ´Ù½ÃÇϱâ, ÆùÆ® ¼±ÅõîÀÇ ±â´ÉÀ» ¼öÇàÇÒ ¼ö ÀÖ´Ù. wxTextCtrlÀÇ °¡Àå °£´ÜÇÑ ½ºÅ¸ÀÏÀº ´Ü ÇÑ°³ÀÇ ÆíÁý ÁÙ¸¸À» °®´Â °ÍÀ¸·Î, ÀÌ°ÍÀº ÇÁ·Î±×·¥ ½ÇÇà µµÁß, »ç¿ëÀڷκÎÅÍ µ¥ÀÌÅ͸¦ ÀÔ·Â ¹ÞÀ» ¶§ ´ëÈ­»óÀÚ¿¡¼­ ÀÌ¿ëµÇ°ïÇÑ´Ù. ¿©·¯ ÁÙÀ» ´Ù·ê ¼ö ÀÖµµ·Ï ÅؽºÆ® ÄÁÆ®·ÑÀ» ¼öÁ¤ÇÏ´Â °ÍÀº ´Ü¼øÈ÷ ½ºÅ¸ÀÏÀ» °íħÀ¸·Î½á ÇØ°áµÈ´Ù. ¶ÇÇÑ ¸¹Àº ¾çÀÇ µ¥ÀÌŸ¸¦ ´Ù·ï¾ß ÇÏ´Â ÅؽºÆ® ÄÁÆ®·ÑÀ» ¸¸µå´Â °Í ¿ª½Ã ½ºÅ¸ÀÏÀ» ¼öÁ¤ÇÔÀ¸·Î½á ¾ò¾îÁú ¼ö ÀÖ´Ù. ´ÙÀ½Àº ÅؽºÆ® ÄÁÆ®·ÑÀ» °®´Â BasicFrame¿¡ ´ëÇÑ ¼Ò½ºÄÚµåÀÌ´Ù. {{{#!vim cpp #ifndef BASIC_H #define BASIC_H class BasicApplication : public wxApp { public: virtual bool OnInit(); }; class BasicFrame : public wxFrame { public: BasicFrame( const wxChar *title, int xpos, int ypos, int width, int height); ~BasicFrame(); wxTextCtrl *theText; }; #endif }}} ´ÙÀ½ ÁÙÀ» Á¦¿ÜÇÏ°í Çì´õÆÄÀÏÀº °ÅÀÇ ¹Ù²ïÁ¡ÀÌ ¾ø´Ù. {{{#!vim cpp wxTextCtrl *theText; }}} ÀÌ°ÍÀº theText¶ó´Â wxTextCtrl Æ÷ÀÎÅ͸¦ ¼±¾ðÇÏ´Â °ÍÀÌ´Ù. {{{#!vim cpp #include #include "basic.h" IMPLEMENT_APP(BasicApplication) bool BasicApplication::OnInit() { BasicFrame *frame = new BasicFrame ("wxWindows Basic Steps - Step 1:" " A simple application", 50, 50, 200, 200); frame->Show(TRUE); SetTopWindow(frame); return TRUE; } BasicFrame::BasicFrame (const wxChar *title, int xpos, int ypos, int width, int height) : wxFrame( (wxFrame *) NULL, -1, title, wxPoint(xpos, ypos), wxSize(width, height)) { theText = (wxTextCtrl *) NULL; theText = new wxTextCtrl ( this, -1, wxString("This is a text control\n\n" "The text control supports" " basic text editing operations\n" "along with copy, cut, paste, " "delete, select all and undo.\n\n" "Right click on the control" " to see the pop-up menu.\n" ), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE ); } BasicFrame::~BasicFrame() { } }}} »ý¼ºÀÚ¸¦ »ìÆ캸¸é, ¸î°¡Áö ±âº» ¸Å°³º¯¼ö·Î ÅؽºÆ® ÄÁÆ®·ÑÀÌ ¸¸µé¾îÁüÀ» ¾Ë ¼ö ÀÖ´Ù. ¿©±â¼­ ´ÙÀ½ ÁÙÀ» ´«¿©°Üº¸ÀÚ. {{{#!vim cpp theText = (wxTextCtrl *) NULL; }}} ÀÌ ÇÁ·Î±×·¥¿¡¼­´Â À§ ÁÙÀº ºÒÇÊ¿äÇÏÁö¸¸, Æ÷ÀÎÅÍÀÇ ¾ÈÀüÀ» À§ÇÔÀÓÀ» ±â¾ïÇÏÀÚ. ÇÁ·Î±×·¥ÀÌ º¹ÀâÇØÁú¼ö·Ï, ¾ÆÁ÷ Á¸ÀçÇÏÁö ¾Ê´Â °´Ã¼¸¦ °¡¸®Å°´Â Æ÷ÀÎÅ͸¦ Á¾Á¾ ¼±¾ðÇÏ°Ô µÈ´Ù. ¶§¶§·Î, Æ÷ÀÎÅÍ°¡ °¡¸®Å³ ´ë»óÀ» ¸¸µé¾î ³»±â Àü¿¡ ±× Æ÷ÀÎÅ͸¦ »ç¿ëÇÏ°Ô µÇ´Â ÇÔÁ¤¿¡ ºüÁø´Ù. ÃʱâÈ­µÇÁö ¾ÊÀº Æ÷ÀÎÅÍÀÇ »ç¿ëÀº Â¥Áõ³ª°í Ȳ´çÇÑ °á°ú¸¦ ÃÊ·¡ÇÒ ¼ö ÀÖ´Ù. ±×·¸°Ô µÇ¸é ¸î½Ã°£ÀÌ µÉÁö ¸ð¸£´Â ±ÍÁßÇÑ ´ç½ÅÀÇ ½Ã°£À» ³¶ºñÇÒ ¼ö ÀÖ´Ù. As a matter of course you should always initialize any pointer you have declared in an interface file. Other people will say "It doesn't matter, I intend to init the thing straight away!". I say - ignore them and avoid disturbing the even tenor of your life with bad pointers. I do this out of a sense of brotherly concern for your well-being. ´ÙÀ½°ú °°ÀÌ ÅؽºÆ® ÄÁÆ®·Ñ »ý¼ºÀÚ¸¦ È£ÃâÇÒ ¶§, ¸Å°³ º¯¼ö·Î this Æ÷ÀÎÅ͸¦ ³Ñ±â´Âµ¥ ÀÌ°ÍÀº ºÎ¸ðÀ©µµ¿ì¿¡ ´ëÇÑ ÂüÁ¶·Î this´Â ÀÌ¹Ì »ý¼ºµÇ¾ú°Å³ª »ý¼ºÁßÀÎ ºÎ¸ð frameÀ» °¡¸®Å°°í ÀÖ´Ù. {{{#!vim cpp theText = new wxTextCtrl( ... ) }}} == ÅؽºÆ® ÄÁÆ®·Ñ Ŭ·¡½º - wxTextCtrl == wxTextCtrl »ý¼ºÀÚ {{{#!vim cpp wxTextCtrl ( wxWindow* parent, wxWindowID id, const wxString& value = "", const wxPoint& pos, const wxSize& size = wxDefaultSize, long style = 0, const wxValidator& validator, const wxString& name = "text" ) }}} ¸¸¾à ´ç½ÅÀÌ ÀÌ »ý¼ºÀÚ¿Í ÀÌÀü ¿¹Á¦¸¦ ºñ±³Çغ¸¸é, ÀÌÀü ¼¼¼Ç¿¡¼­ BasicFrameÀ» ¸¸µé¾úÀ»¶§¿Í ¶È°°ÀÌ ¸¹Àº ±âº»°ªÀ» »ç¿ëÇßÀ½À» º¼ ¼ö ÀÖ´Ù. »ý¼ºÀÚ ¼±¾ð ¹æ½ÄÀÇ ¿¹Ã³·³, ÀÌ ÇÁ·¡ÀÓ¿öÅ©¿¡ °üÇØ ¹è¿î ¸¹Àº »õ·Î¿î °ÍµéÀº ´Ù¸¥ ÇÁ·¡ÀÓ ¿÷¿¡ ´ëÇؼ­ ¶È°°ÀÌ Àû¿ëµÉ ¼ö ÀÖ´Ù. ´ç½ÅÀº ÀÌ¹Ì wxFrame »ý¼ºÀÚ¿¡ ´ëÇؼ­ ¹è¿üÀ¸¸ç, wxTextCtrl »ý¼ºÀÚÀÇ °æ¿ìµµ ¸Å°³º¯¼öÀÇ ¼ø¼­¿Í ÇüÀÌ wxFrame »ý¼ºÀÚ¿Í ºñ½ÁÇÔÀ» ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù. wxTextCtrlÀº ÅؽºÆ®¿¡¸¸ Àû¿ëµÇ´Â wxValidator Ŭ·¡½º¶ó´Â »õ·Î¿î ¸Å°³º¯¼ö¸¦ ¼Ò°³ÇÏ°í ÀÖ´Ù. ¿©±â¼­´Â ÀÌ Å¬·¡½º¿¡ ´ëÇØ ÀÚ¼¼È÷ ´Ù·çÁö ¾Ê°Ú´Ù. ÀÌ°ÍÀº ²Ï º¹ÀâÇÏ´Ù. validator´Â ÇÁ·Î±×·¥ µ¥ÀÌŸ ±¸Á¶¿Í ÄÁÆ®·Ñ »çÀÌ¿¡¼­ Àü´ÞµÇ´Â µ¥ÀÌŸ¸¦ È®ÀÎÇϱâ À§Çؼ­ »ç¿ëµÈ´Ù°í ¾Ë¾ÆµÎ¸é ÃæºÐÇÏ´Ù. ¿¹¸¦ µé¸é validator´Â ÅؽºÆ®¸¸ ÀԷ¹ްųª ȤÀº ¼ýÀÚ¸¸ ÀԷ¹޵µ·Ï ÀÔ·ÂÀ» Á¦ÇÑÇÒ ¶§µµ »ç¿ëµÉ ¼ö ÀÖ´Ù. wxTextCtrl »ý¼ºÀÚÀÇ ³ª¸ÓÁö ¸Å°³º¯¼ö´Â wxFrame¿Í ¶È°°´Ù. * wxWindow* parent - ºÎ¸ð À©µµ¿ì¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ. ÇÁ·¡ÀÓÀº NULLÀÏ ¼ö ÀÖÀ¸³ª wxTextCtrlÀº NULL °ªÀ» °¡Áú ¼ö ¾ø´Ù * wxWindowID id - ÄÁÆ®·ÑÀÇ ID * const wxString& value = "" - ÃʱⰪ (¿¹Á¦¸¦ ÂüÁ¶), * const wxPoint& pos - ¿ÞÂÊ »ó´ÜÀÇ x, y ÁÂÇ¥ * const wxSize& size = wxDefaultSize - ³ôÀÌ¿Í Æø, * long style = 0 - ½ºÅ¸ÀÏ (¾Æ·¡¸¦ ÂüÁ¶), * const wxString& name = "text" - ÄÁÆ®·ÑÀÇ À̸§ wxTextCtrl À©µµ¿ì ½ºÅ¸ÀÏ * wxTE_PROCESS_ENTER - wxEVENT_TYPE_TEXT_ENTER_COMMAND ¸Þ½ÃÁö¸¦ »ý¼ºÇÑ´Ù (±×·¸Áö ¾ÊÀ¸¸é Å°ÀÔ·ÂÀº ÄÁÆ®·Ñ¿¡ ÀÇÇؼ­ ³»ºÎÀûÀ¸·Î 󸮵ǰųª ´ëÈ­»óÀÚ ÄÁÆ®·Ñ »çÀÌ À̵¿À» À§Çؼ­ »ç¿ëµÈ´Ù) * wxTE_PROCESS_TAB - TABÀÌ ÀԷµǸé ÄÁÆ®·Ñ´Â EVT_CHAR ¸Þ½ÃÁö¸¦ ¹Þ´Â´Ù - ÀϹÝÀûÀ¸·Î TABÀº ´ÙÀ½ ÄÁÆ®·Ñ·Î À̵¿Çϴµ¥ ÀÌ¿ëµÈ´Ù. ÀÌ ½ºÅ¸ÀÏÀ» °®´Â ÄÁÆ®·ÑÀÇ °æ¿ì ´ÙÀ½ ÄÁÆ®·Ñ·Î À̵¿ÇÒ ¶§ ¿©ÀüÈ÷ Ctrl-Enter¸¦ ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù. * wxTE_MULTILINE - ¿©·¯ ÁÙÀ» °®´Â ÅؽºÆ® ÄÁÆ®·ÑÀ» ¸¸µç´Ù. * wxTE_PASSWORD - ÅؽºÆ®°¡ *Ç¥½Ã·Î ¹ÝÇâµÈ´Ù. * wxTE_READONLY - ÆíÁýÀ» ºÒ°¡´ÉÇÏ°Ô ÇÑ´Ù. * wxHSCROLL - ¼öÆò ½ºÅ©·Ñ¹Ù¸¦ ¸¸µç´Ù. GTK+¿¡¼­´Â È¿°ú°¡ ¾ø´Ù. * wxTE_RICH - Win95/98¿¡¼­ 32K Á¦ÇÑÀÌ ¾ø´Â ÅؽºÆ® ÄÁÆ®·ÑÀ» ¸¸µç´Ù. WinNT¿Í °°Àº ´Ù¸¥ Ç÷§Æû¿¡¼­´Â ÀÌ·¯ÇÑ Á¦ÇÑÀÌ ¾Æ¿¹ ¾ø´Ù. ÇÁ·¡ÀÓ ½ºÅ¸ÀÏ Ã³·³ ÅؽºÆ® ½ºÅ¸Àϵµ Çϳª ÀÌ»ó OR ¿¬»êÇÒ ¼ö Àִµ¥, ±âº»°ªÀº 0À¸·Î Æø°ú ³ôÀÌ¿¡ °ü°è¾øÀÌ ÇÑÁÙÀÇ ÅؽºÆ® ÄÁÆ®·ÑÀ» »ý¼ºÇÑ´Ù. °¡´ÉÇÑ ½ºÅ¸ÀÏ Á¶ÇÕ°ú ºÒ°¡´ÉÇÑ Á¶ÇÕÀ» ¾Ë·Á¸é ¸î°¡Áö¿¡ ´ëÇؼ­ ½ÇÇèÇغÁ¾ß ÇÑ´Ù. ÇÑ ¿¹·Î wxTE_MULTILINE | wxTE_PASSWORD´Â °¡´ÉÇÒ±î? ÇÁ·Î±×·¥ ºôµåÇϱâ: ÇϳªÀÇ µð·ºÅ丮¿¡ ¼Ò½ºÆÄÀÏÀ» ¸¸µç´Ù. * basic.h * basic.cpp * basic_resources.rc * Makefile make¸¦ ½ÇÇàÇÑ ÈÄ, ÇÁ·Î±×·¥ ½ÇÇà! * make * basic ¿øÇÏ¸é ¿¹Á¦ ÆÄÀÏÀ» ´ÙÀ½¿¡¼­ ³»·Á¹ÞÀ» ¼ö ÀÖ´Ù . == ¸Þ´º¹Ù ´õÇϱâ == ÇÁ·¡ÀÓ°ú ÅؽºÆ® ÄÁÆ®·ÑÀº ÀÛÁö¸¸ »ó´çÇÑ ±â´ÉÀ» Á¦°øÇÏÁö¸¸, ½ÇÁ¦ ÀÀ¿ëÇÁ·Î±×·¥ ÀÛ¼º±îÁö´Â ¿©ÀüÈ÷ ¸î ¹ßÀÚ±¹ÀÌ ³²¾ÆÀÖ´Ù. Ãß°¡ÇÒ ´ÙÀ½ ÄÁÆ®·ÑÀº ¸Þ´º¹Ù·Î »ç¿ëÀÚ°¡ ÇÁ·Î±×·¥¿¡ °¢ ¸í·ÉÀ» Àü´ÞÇÒ ¼ö ÀÖµµ·Ï ÇØÁØ´Ù. Çì´õ ÆÄÀÏÀº ´ÙÀ½ Ãß°¡ »çÇ×À» Á¦¿ÜÇÏ°í´Â ¹Ù²ïÁ¡ÀÌ ¾ø´Ù: {{{#!vim cpp enum { BASIC_EXIT = 1, BASIC_OPEN = 100, BASIC_ABOUT = 200 }; }}} ¸î¸î °ýÈ£·Î ½ÎÀÎ ºÎºÐÀº ¹Ù²ï Á¡ÀÌ ¾ø±â ¶§¹®¿¡ »ý·«ÇÏ¿´À½À» ¾Ë·ÁµÐ´Ù. enum ¼±¾ð¹®Àº ¸Þ´º Ç׸ñ°ú ¿¬°á½ÃÅ°±â À§ÇØ ¼±¾ðµÇ¾ú´Ù. ´ÙÀ½ ÁÙÀº µÎ°³ÀÇ »õ·Î¿î µ¥ÀÌŸ ¸â¹ö¸¦ °®´Â BasicFrame Ŭ·¡½º¸¦ ¼±¾ðÇÑ´Ù. {{{#!vim cpp wxMenuBar *menuBar; wxMenu *fileMenu; }}} Çϳª´Â ¸Þ´º¹ÙÀÌ°í ´Ù¸¥ Çϳª´Â ¸Þ´ºÀÌ´Ù. ¹°·Ð ¸Þ´º¹Ù´Â ÇÁ·¡ÀÓÀÇ °¡Àå À­ºÎºÐ¿¡ À§Ä¡ÇÑ´Ù. ¸Þ´º´Â µå·Ó´Ù¿î ¸Þ´ºÀÌ´Ù. {{{#!vim cpp #include #include "basic.h" IMPLEMENT_APP(BasicApplication) bool BasicApplication::OnInit() { ... return TRUE; } BasicFrame::BasicFrame ( ... ) { theText = (wxTextCtrl *) NULL; menuBar = (wxMenuBar *) NULL; fileMenu = (wxMenu *)NULL; theText = new wxTextCtrl( ... ); fileMenu = new wxMenu; fileMenu->Append(BASIC_OPEN, "&Open file"); fileMenu->Append(BASIC_ABOUT, "&About"); fileMenu->AppendSeparator(); fileMenu->Append(BASIC_EXIT, "E&xit"); menuBar = new wxMenuBar; menuBar->Append(fileMenu, "&File"); SetMenuBar(menuBar); } BasicFrame::~BasicFrame() ... }}} ÇÁ·Î±×·¥ ÆÄÀÏ¿¡´Â ´ÙÀ½À» Ãß°¡ÇÏ¿´´Ù. ¿ª½Ã Æ÷ÀÎÅÍÀÇ ¾ÈÀüÀ» À§ÇÔÀÌ´Ù. {{{#!vim cpp menuBar = (wxMenuBar *) NULL; fileMenu = (wxMenu *)NULL; }}} wxMenuÀÇ ÀνºÅϽº¸¦ »ý¼ºÇÑ´Ù. {{{#!vim cpp fileMenu = new wxMenu; }}} »õ·Î¿î ÆÄÀÏ ¸Þ´º¿¡ Ç׸ñÀ» Ãß°¡ÇϱâÀ§Çؼ­ Append()¿Í AppendSeparator()¸¦ »ç¿ëÇÑ´Ù. {{{#!vim cpp fileMenu->Append(BASIC_OPEN, "&Open file"); fileMenu->Append(BASIC_ABOUT, "&About"); fileMenu->AppendSeparator(); fileMenu->Append(BASIC_EXIT, "E&xit"); }}} ¸¶Áö¸·À¸·Î wxMenuBarÀÇ ÀνºÅϽº¸¦ »ý¼ºÇϸç ÆÄÀÏ ¸Þ´º¸¦ ¿©±â¿¡ Ãß°¡ÇÑ ÈÄ, ÇÁ·¹ÀÓ¿¡ ¸Þ´º¹Ù¸¦ Ãß°¡Çϱâ À§Çؼ­ BasicFrameÀÇ ¸â¹öÇÔ¼öÀÎ SetMenuBar()¸¦ È£ÃâÇÑ´Ù. {{{#!vim cpp menuBar = new wxMenuBar; menuBar->Append(fileMenu, "&File"); SetMenuBar(menuBar); }}} ÀÌÁ¦ "E&xit"³ª "&File"¿¡¼­ »ç¿ëÇÑ ¾ÚÆÛ»÷µå &°¡ ¹«¾ùÀ» ÀǹÌÇÏ´ÂÁö ¾Ë¾Æº¸ÀÚ. ÀÌ°ÍÀº ¸Þ´º¹Ù³ª ¸Þ´º¿¡¼­ »ç¿ëµÉ ´ÜÃàÅ°¸¦ ÀǹÌÇÑ´Ù. À̽ÃÁ¡¿¡¼­ ´ç½ÅÀº ¿ì¸®°¡ ¸Þ´º¸¦ Ŭ¸¯Çϰųª Alf-F¸¦ ´­·¶À» ¶§ ¸Þ´º¸¦ º¸¿©ÁÖ´Â °Í¿Ü º°´Ù¸¥ ÀÏÀ» ÇÏÁö ¾Ê´Â´Ù°í »ý°¢ÇÒ °ÍÀÌ´Ù. It will soon though when we look at events, meanwhile we need to add a statusbar. ºôµå ÇÏ´Â ¹ý: ÇÑ µð·ºÅ丮¿¡ ´ÙÀ½ ¼Ò½ºÆÄÀÏÀ» ¸¸µç´Ù. * basic.h * basic.cpp * basic_resources.rc * Makefile ¿©±â¼­ make¸¦ ½ÇÇàÇÏ°í, ÇÁ·Î±×·¥À» ½ÇÇàÇÑ´Ù. * make * basic ´ÙÀ½¿¡¼­ ¼Ò½ºÆÄÀÏÀ» ¾òÀ» ¼ö ÀÖ´Ù . == »óŹ٠Ãß°¡Çϱâ == »óŹٸ¦ Ãß°¡ÇÏ´Â °ÍÀº À̺¸´Ù ´õ °£´ÜÇÒ ¼ö ¾ø´Ù. ´ÙÀ½ÁÙÀ» Ãß°¡ÇÑ´Ù: {{{#!vim cpp CreateStatusBar(3); }}} {{{#!vim cpp SetMenuBar(menuBar); CreateStatusBar(3); }}} ÀÌ°ÍÀ¸·Î BasicFrame¿¡ 3°³ Çʵ带 °®´Â »óŹٰ¡ Ãß°¡µÈ´Ù. ¿ì¸®´Â wxFrameÀÇ SetStatusBarText("¹®ÀÚ¿­",Á¤¼ö)¸¦ ÀÌ¿ëÇÏ¿© Çʵ忡 ¹®ÀÚ¿­À» ½á³Ö´Â´Ù. »óŹٰ¡ 3°³ÀÇ Çʵ带 °®°í Àֱ⠶§¹®¿¡ °¡´ÉÇÑ Á¤¼ö°ªÀº 0, 1, ¶Ç´Â 2 ÀÌ´Ù. ¾Õ¼­ ³ª¿Â ¿¹Á¦¸¦ ´ÙÀ½À¸·Î ¼öÁ¤Çغ¸¸é 0¹ø° »óŹ٠Çʵ忡 Append()¸â¹öÇÔ¼öÀÇ 3¹ø° Àμö°¡ Ç¥½ÃµÊÀ» ¾Ë ¼ö ÀÖ´Ù. {{{#!vim cpp fileMenu->Append(BASIC_OPEN, "&Open file", "Open an existing file"); fileMenu->Append(BASIC_ABOUT, "&About", "Who wrote this!"); fileMenu->AppendSeparator(); fileMenu->Append(BASIC_EXIT, "E&xit", "Stop wasting time."); }}} == »ç¿ëÇÑ wxWindows Ŭ·¡½º == ¿ì¸®´Â wxMenuBar¿Í wxMenu¸¦ »õ·Î ¾Ë°ÔµÇ¾ú°í, »óŹٸ¦ »ý¼º/Á¶Á¤À» À§Çؼ­ CreateStatusBar() ¸â¹öÇÔ¼ö¸¦ »ç¿ëÇÏ¿´´Ù. wxMenuBar¿Í wxMenu¿¡ ´ëÇØ ÀÚ¼¼È÷ ¾Ë¾Æº¸´Â °ÍÀº µÚ·Î ¹Ì·ç°í ´ÙÀ½¹ø¿¡´Â ¸Þ´º À̺¥Æ®¿¡ ÇÁ·Î±×·¥ÀÌ ÀÀ´äÇÏ´Â ¹æ¹ý¿¡ ´ëÇؼ­ ´Ù·ê °ÍÀÌ´Ù. == ¿ä¾à == »ý°¢ÇØ º¼°Íµé * ÀÌ ¼¼¼ÇÀÇ °£´ÜÇÑ ¿¹Á¦¸¦ °¡Á®´Ù°¡ ¸î°¡Áö ¸Þ´ºÇ׸ñÀ» ´õ Ãß°¡Çغ¸ÀÚ. * ¿Ö ´ÙÀ½°ú °°Àº ÃʱâÈ­¸¦ Çϴ°¡? theText = (wxTextCtrl *) NULL; * frame->Show(TRUE); ¿Í frame.Show(TRUE); ÀÇ Â÷ÀÌ´Â ¹«¾ùÀΰ¡? ÀÌ ¼¼¼Ç¿¡¼­´Â ¸î°¡Áö ÀϹÝÀûÀÎ À©µµ¿ì ±â´ÉÀ» ÷°¡ÇÔÀ¸·Î½á ±âº» ÀÀ¿ëÇÁ·Î±×·¥À» ´õ¿í ¹ßÀü½ÃÄ×´Ù. Èï¹Ì·Î¿î °ÍÀº ±×´ÙÁö ÈûµéÁö ¾Ê¾Ò´Ù´Â °ÍÀÌ´Ù. ÀÌ´Â wxWindows°¡ Àß °í¾ÈµÈ ÇÁ·¡ÀÓ¿÷ÀÓÀ» ¹ÝÁõÇÑ´Ù. ¶ÇÇÑ ¿ì¸®´Â ÅؽºÆ® ÄÁÆ®·ÑÀ» ½±°Ô ¼öÁ¤ÇÒ ¼ö ÀÖÀ½À» º¸¾Ò°í, wxMenu Ŭ·¡½ºÀÇ À¯¿¬¼º¿¡ ´ëÇØ ÈùÆ®¸¦ ¾ò¾ú´Ù. = Programming with wxWindows - À̺¥Æ® »ç¿ëÇϱâ = == ¼Ò°³ == ¿À·¡Àü ³ª´Â µÎ°³ÀÇ ´Ù¸¥ ¿î¿µÃ¼Á¦¿¡¼­ ÀÛ¾÷À» ÇÏ¿´´Ù. Çϳª´Â ½ÃºÐÇÒ ½Ã½ºÅÛÀ¸·Î ¿î¿µÃ¼Á¦ ½ºÄÉÁÙ·¯°¡ °¢ »ç¿ëÀÚ¿¡¼­ ÄÄÇ»ÅÍ ¸®¼Ò½º¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â ½Ã°£À» ÇÒ´çÇØÁÖµµ·Ï µÇ¾îÀÖ´Ù. ´Ù¸¥ Çϳª´Â À̺¥Æ® µå¶óÀÌºê ½Ã½ºÅÛÀ¸·Î, ÀÌ°ÍÀº ÀÏÁ¾ÀÇ »ê¾÷¿ë ÇÁ·Î¼¼¼­ Á¦¾î±âÀε¥ ÇÁ·Î¼¼½º´Â °¢ »ç¿ëÀÚ°¡ ¸®¼Ò½º¸¦ °øÀ¯Çϵµ·Ï ±â´Ù·ÁÁÖÁö ¾Ê´Â´Ù. ´ë½Å ½Ã½ºÅÛÀº °©ÀÛ½º·± ¿øÀÚ·Î ³ë½ÉÀÇ ¿ëÀ¶°ú °°Àº ¿ÜºÎÀ̺¥Æ®¿¡ ºü¸£°Ô ÀÀ´äÇϵµ·Ï °í¾ÈµÇ¾ú´Ù. ¾î¶² ¸é¿¡¼­ º¸¸é, GUI ½Ã½ºÅÛÀº À̺¥µå µå¶óÀÌºê ¸ðµ¨À» ½ÃºÐÇÒ ¸ðµ¨¿¡ °áÇÕÇß´Ù°í º¼ ¼ö ÀÖ´Ù. "À̺¥Æ®"´Â ÇÁ·Î±×·¥ ¿ÜºÎ¿¡¼­ ¹ß»ýÇÑ ¾î¶² Èï¹Ì·Î¿î »ç°ÇÀ» ÀÏÄ´´Ù. À̺¥Æ®´Â ´ÜÃà±â¸¦ ´©¸£°Å³ª ¸Þ´ºÇ׸ñÀ» ¼±ÅÃÇÔÀ¸·Î½á ¹ß»ýÇÒ ¼ö ÀÖ°í, ¶Ç ŸÀÌ¸Ó ÀÛµ¿ ¿Ï·á½Ã³ª Åë½ÅÆ÷Æ®¿¡ µ¥ÀÌŸ°¡ ´ë±âÇÒ ¶§, ½Ã½ºÅÛ Á¾·á ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§¿Í °°ÀÌ ÇÁ·Î±×·¥ ¿ÜºÎÀÇ ÄÄÇ»ÅÍ È¯°æÀÇ º¯È­·ÎºÎÅÍ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. À̺¥Æ®ÀÇ ¹ß»ý¿øÀÌ ¹«¾ùÀ̵簣¿¡ À̰͵éÀº ÀûÀýÈ÷ ´Ù·ïÁú ÇÊ¿ä°¡ÀÖ´Ù. ³»°¡ ÀÌ ±ÛÀ» ¾²´Â µ¿¾È, ³» À©µµ¿ì 98 ½Ã½ºÅÛ¿¡´Â 10°³ÀÇ ÀÀ¿ëÇÁ·Î±×·¥ÀÌ ¿Ã·ÁÁ®ÀÖ´Ù. ÀÌ ÆíÁý±â¸¦ Á¦¿ÜÇÑ ´Ù¸¥ ÀÀ¿ëÇÁ·Î±×·¥Àº ¶§¶§·Î Çϵåµð½ºÅ© ºÒÀÌ ±ô¹ÛÀÌ´Â ¿Ü¿¡ ±×´ÙÁö ¸¹Àº ÀÏÀ» ÇÏ´Â °Í °°Áö¾Ê´Ù. ±×·¯³ª, ³»°¡ ÀÛ¾÷Ç¥½ÃÁÙÀÇ ¾î¶² ÀÀ¿ëÇÁ·Î±×·¥À» Ŭ¸¯ÇÑ´Ù¸é, ±× ÀÀ¿ëÇÁ·Î±×·¥Àº È°¼ºÈ­µÇ¸é ÀÛ¾÷ÇÒ Áغñ¸¦ ÇÑ´Ù. ÀÛ¾÷Ç¥½ÃÁÙÀº ¸¶¿ì½º Ŭ¸¯ À̺¥Æ®¸¦ ¼ö½ÅÇÏ°í, À̺¥Æ®¿Í °ü·ÃµÈ Á¤º¸¸¦ ¿î¿µÃ¼Á¦°¡ °ü¸®ÇÏ´Â ¸Þ½ÃÁöÅ¥¿¡ Àü´ÞÇÑ´Ù. ±×¸®°í ÇØ´çÇÏ´Â ÀÀ¿ëÇÁ·Î±×·¥Àº ¸Þ½ÃÁö¸¦ ¹Þ°Ô µÈ´Ù. ÀϹÝÀûÀÎ À̺¥Æ® Çڵ鸵 ÇÁ·Î±×·¡¹Ö Å×Å©´ÐÀº Äݹé ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ´Â °ÍÀÌ´Ù. ¾Æ·¡´Â [http://www.fltk.org FLTK]¿¡¼­ Äݹé ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ´Â ¿¹ÀÌ´Ù (FLTK´Â Å©·Î½º-Ç÷§Æû GUI ÇÁ·¹ÀÓ¿÷ÀÇ ÀÏÁ¾ÀÌ´Ù): {{{#!vim cpp Fl_Menu_Item menuitems[] = { { "&File", 0,0,0, FL_SUBMENU}, { "&New", FL_ALT + 'n', (Fl_Callback *) new_cb }, ... ... void new_cb(void) { if (changed) if ( !check_save() ) return; filename[0] = '\0'; input->value(""); set_changed(0); } }}} ÀÌ ÇÁ·Î±×·¥ Á¶°¢Àº new_cb ÇÔ¼ö¿Í ¿¬°áµÈ ¸Þ´º Ç׸ñÀ» º¸¿©ÁØ´Ù. ÇÔ¼ö´Â FI_CallbackÇüÀ» °¡¸®Å°´Â Æ÷ÀÎÅÍ·Î ÇüÀüȯµÇ¾ú´Ù. ÀÀ¿ëÇÁ·Î±×·¥ÀÌ ¿î¿µÃ¼Á¦·Î ºÎÅÍ New ¸Þ´ºÇ׸ñÀÌ ¼±ÅõǾúÀ½À» Áö½ÃÇÏ´Â ¸Þ½ÃÁö¸¦ ¹Þ°ÔµÇ¸é, new_cb()¸¦ È£ÃâÇÑ´Ù. Win32 APIµµ ÀÌ¿Í ºñ½ÁÇÑ ±âÀÛÀ» °®°í ÀÖ´Ù. À̺¥Æ®¿¡ ÀÀ´äÇؾßÇÏ´Â À©µµ¿ì´Â CALLBACK Çü ÇÔ¼ö·Î Á¤ÀÇµÈ ÇÔ¼ö¸¦ °®´Â´Ù. wxWindows¿Í Microsoft MFC(Microsoft Foundation Classes) ÇÁ·¹ÀÓ¿öÅ©´Â ÃÖ¼ÒÇÑ ÇÁ·Î±×·¡¸Ó ÀÔÀå¿¡¼­ º¸¸é µÑ´Ù ´Ù¸¥ Å×Å©´ÐÀ» »ç¿ëÇÑ´Ù. ¹°·Ð ³»ºÎÀûÀ¸·Î´Â ÄÝ¹é ±âÀÛÀÌ ¿©ÀüÈ÷ »ç¿ëµÇ°í ÀÖ´Ù. ÀÌ ±âÀÛÀº À̺¥Æ® Å×À̺íÀ̶ó°í ºÎ¸£¸ç, À̺¥Æ® Çڵ鸵À» ¸Å¿ì °£´ÜÈ÷ ´Ù·ê¼ö ÀÖ°Ô ÇØÁØ´Ù. == wxWindows À̺¥Æ® Å×À̺í == {{{#!vim cpp BEGIN_EVENT_TABLE (BasicFrame, wxFrame) EVT_MENU ( BASIC_EXIT, BasicFrame::OnExit) EVT_MENU ( BASIC_ABOUT, BasicFrame::OnAbout) EVT_MENU ( BASIC_OPEN, BasicFrame::OnOpenFile) END_EVENT_TABLE() }}} ¿©±â¼­ º¸µí, wxWindows À̺¥Æ® Å×À̺íÀ» ¸Å¿ì °£´ÜÇÏ´Ù. ÀÌ°ÍÀº ¸ÅÅ©·Î ÁýÇÕÀ¸·Î ù¹ø° ÁÙÀº À̺¥Æ® Å×ÀÌºí ½ÃÀÛÀ» ÀǹÌÇÏ°í, ´ÙÀ½ 3ÁÙÀº À̺¥Æ® »ó¼ö¿Í Ŭ·¡½º ¸â¹öÇÔ¼ö¸¦ ¿¬°áÇÏ´Â ºÎºÐÀ̸ç, ¸¶Áö¸·ÁÙÀº À̺¥Æ® Å×À̺íÀÇ ³¡À» ÀǹÌÇÑ´Ù. À̺¥Æ® Å×À̺íÀº BASIC_OPEN°ú °°Àº »ó¼ö·Î ÀνĵǴ À̺¥Æ®¸¦ BasicFrame::OnOpenFile°ú °°Àº ¸â¹öÇÔ¼ö¿¡ ¸ÊÇÎÇÑ´Ù. ¿ì¸®´Â ÇϳªÀÇ ÇÁ·Î±×·¥¾È¿¡ ¿©·¯°³ÀÇ À̺¥Æ® Å×À̺íÀ» ÀÛ¼ºÇÒ ¼ö Àִµ¥, À̸¦ À§Çؼ­´Â °¢ Ŭ·¡½º°¡ »ç¿ëÇÏ´Â À̺¥Æ® Å×À̺íÀÌ ¾î¶²°ÍÀÎÁö ±¸ºÐÇÏ´Â °ÍÀÌ ÇÊ¿äÇÏ´Ù. BEGIN_EVENT_TABLE ¸ÅÅ©·Î´Â ÀÌ À̺¥Æ® Å×À̺íÀÌ wxFrameÀ¸·ÎºÎÅÍ À¯µµµÈ BasicFrame¿¡ ¼ÓÇØÀÖÀ½À» ¼±¾ðÇÑ´Ù. ¶Ç, Ŭ·¡½º°¡ À̺¥Æ® Å×À̺íÀ» »ç¿ëÇÏ°í ÀÖÀ½À» ¸íÈ®È÷ ÇØÁà¾ßÇϴµ¥, À̸¦ À§ÇØ Çì´õÆÄÀÏÀÇ Å¬·¡½º ¿øÇü ³»¿¡ DECLARE_EVENT_TABLE() ¸ÅÅ©·Î¸¦ ¸í½ÃÇÑ´Ù. ¸¶Áö¸·À¸·Î À̺¥Æ®¸¦ ó¸®ÇÒ ¸â¹öÇÔ¼ö¸¦ ÀÛ¼ºÇؾ߸¸ ÇÑ´Ù. ´ÙÀ½ ¿¹¸¦ »ìÆ캸ÀÚ: {{{#!vim cpp #ifndef BASIC_H #define BASIC_H #include static const wxChar *TITLE = _T("Basic - Step 3: Responding to events"); class BasicApplication : public wxApp { public: virtual bool OnInit(); }; class BasicFrame : public wxFrame { public: BasicFrame( const wxChar *title, int xpos, int ypos, int width, int height); ~BasicFrame(); wxTextCtrl *theText; wxMenuBar *menuBar; wxMenu *fileMenu; void OnOpenFile (wxCommandEvent & event); void OnAbout (wxCommandEvent & event); void OnExit (wxCommandEvent & event); DECLARE_EVENT_TABLE() }; enum { BASIC_EXIT = 1, BASIC_OPEN= 100, BASIC_ABOUT= 200 }; #endif }}} ÀÌ°ÍÀº Çì´õ ÆÄÀÏ·Î, ÀÌÀü¿¡ ºñÇØ »õ·Î Ãß°¡µÈ ³»¿ëÀÌ »ó´çÈ÷ ÀÖ´Ù. Ãß°¡µÈ ³»¿ë ÀüºÎ°¡ À̺¥Æ®¿Í °ü·ÃµÈ °ÍÀº ¾Æ´Ï´Ù. ù¹ø°·Î ÁÖ¸ñÇÒ Á¡Àº ´ÙÀ½ ºÎºÐÀÌ´Ù: {{{#!vim cpp static const wxChar *TITLE = _T("Basic - Step 3: Responding to events"); }}} ÀÌ ºÎºÐ¿¡¼­´Â char¸¦ °¡¸®Å°´Â »ó¼ö, Á¤Àû, Æ÷ÀÎÅ͸¦ ¼±¾ðÇß´Ù¶ó°í ÃßÃøÇÒ ¼ö ÀÖ´Ù. ÀÌ Æ¯º°ÇÑ ¿¹Á¦¿¡¼­´Â º¯¼ö¸¦ Á¤ÀûÀ¸·Î ¼±¾ðÇÑ°ÍÀÌ Å« Àǹ̰¡ ÀÖÁö´Â ¾Ê´Ù. ¿Ö³ÄÇϸé, ÀϹÝÀûÀ¸·Î Á¤Àû¼±¾ðÀº ÇÔ¼ö È£Ãâ°£ °ªÀÇ À¯Áö(³»ºÎ Á¤Àû)³ª ´Ù¸¥ ÆÄÀÏ·Î ºÎÅÍÀÇ º¯¼ö Àº´Ð(¿ÜºÎ Á¤Àû)À» º¸ÀåÇϱâ À§ÇØ ÀÌ¿ëÇϱ⠶§¹®ÀÌ´Ù. ¿ì¸®´Â ÀÌ ¿¹Á¦ ÆÄÀÏÀ» ´Ù¸¥ °÷¿¡ »ç¿ëÇÏÁö ¾Ê±â¶§¹®¿¡, Á¤Àû ¸Þ¸ð¸® Ŭ·¡½º´Â Áߺ¹µÈ´Ù. ±×·³¿¡µµ ºÒ±¸ÇÏ°í Á¤Àûº¯¼ö·Î½á ¿ÜºÎ ¶Ç´Â Àü¿ª º¯¼ö(Áï, ÇÔ¼ö ¿ÜºÎ¿¡¼­ ¼±¾ðµÈ º¯¼ö)¸¦ ¼±¾ðÇÏ´Â °ÍÀº ÁÁÀº ¿¬½ÀÀÌ´Ù. ±× ÀÌÀ¯´Â ¿ì¸®°¡ ÀÌ ÆÄÀÏÀ» ´Ù¸¥ °÷¿¡ »ç¿ëÇÒ ¼ö Àֱ⿡ À̸§ÀÇ Ãæµ¹ °¡´É¼ºÀ» »çÀü Â÷´ÜÇϱâ À§Çؼ­ÀÌ´Ù. Á¤Àûº¯¼ö¿¡ ´ëÇؼ­´Â ¿ÜºÎ, Á¤Àû, ÀÚµ¿ º¯¼ö¿¡ °üÇÑ Âü°í¹®ÇåÀ» Àо±æ ±ÇÇÑ´Ù. ¸ÅÅ©·Î _T´Â ¶Ç ´Ù¸¥ ¸ÅÅ©·Î wxTRANSLATEÀÇ ¾à¾î·Î ·ÎÄÉÀÏ Á¤º¸¿Í °ü·ÃÀÌ ÀÖÀ¸³ª, ³»°¡ Àß ¸ð¸¥´Ù! ´ÙÀ½Àº À̺¥Æ® Å×ÀÌºí¿¡ ´ëÇؼ­ »ìÆ캸°Ú´Ù: ¿ÞÂÊÀ» º¸¸é 3°³ÀÇ ¸â¹öÇÔ¼ö°¡ Àִµ¥, °¢°¢Àº void ÇüÀÌ°í, Àμö·Î wxCommandEvent¸¦ °®´Â´Ù. À̰͵éÀº ½ÇÁ¦·Î´Â ¿ì¸®ÀÇ ÄݹéÇÔ¼öÀÌ´Ù. ¶Ç DECLARE_EVENT_TABLE()À» º¼ ¼ö Àִµ¥, ÀÌ ¸ÅÅ©·Î´Â ÄÄÆÄÀÏ·¯¿¡°Ô ÀÌ Å¬·¡½º°¡ À̺¥Æ® Å×À̺íÀ» °®°í ÀÖÀ½À» ¾Ë·ÁÁְԵȴÙ. ¸¶Áö¸·À¸·Î, enum ¼±¾ðÀÌ Àִµ¥, ÀÌ »ó¼öµéÀ» À̺¥Æ®ÀÇ ÀνÄÀÚ·Î »ç¿ëÇϱâ À§ÇÔÀÌ´Ù. {{{#!vim cpp #include "basic.h" IMPLEMENT_APP(BasicApplication) bool BasicApplication::OnInit() { ... } BasicFrame::BasicFrame ... { ... fileMenu = new wxMenu; fileMenu->Append(BASIC_OPEN, "&Open file"); fileMenu->Append(BASIC_ABOUT,"&About"); fileMenu->AppendSeparator(); fileMenu->Append(BASIC_EXIT, "E&xit"); menuBar = new wxMenuBar; menuBar->Append(fileMenu, "&File"); SetMenuBar(menuBar); CreateStatusBar(3); } BasicFrame::~BasicFrame() ... BEGIN_EVENT_TABLE (BasicFrame, wxFrame) EVT_MENU ( BASIC_EXIT, BasicFrame::OnExit) EVT_MENU ( BASIC_ABOUT, BasicFrame::OnAbout) EVT_MENU ( BASIC_OPEN, BasicFrame::OnOpenFile) END_EVENT_TABLE() void BasicFrame::OnOpenFile (wxCommandEvent & event) { theText->LoadFile("data.txt"); } void BasicFrame::OnAbout (wxCommandEvent & event) { wxString t = TITLE; t.append( _T("\nDB 2001")); wxMessageDialog aboutDialog ( this, t, "About Basic", wxOK | wxCANCEL); aboutDialog.ShowModal(); } void BasicFrame::OnExit (wxCommandEvent & event) { Close(TRUE); } }}} ¿ÞÂÊÀº Ŭ·¡½º¸¦ ±¸ÇöÇÑ ¼Ò½ºÆÄÀÏÀÌ´Ù. À̺¥Æ® ¸ÊÇÎÀ» À§ÇÑ Å×À̺í°ú À̺¥Æ® Çڵ鸵 ¸â¹öÇÔ¼ö¸¦ Á¦¿ÜÇÏ°í´Â ¹Ù²ïÁ¡ÀÌ ¾ø´Ù. wxWindows´Â ÇÁ·Î±×·¡¸Ó·Î ÇÏ¿©±Ý ´Ù¸¥ Á¾·ùÀÇ À̺¥Æ®¸¦ ±¸ºÐÇÒ ¼ö ÀÖµµ·Ï °¢°¢ ´Ù¸¥ ¸ÊÇÎ ¸ÅÅ©·Î¸¦ Á¦°øÇÑ´Ù. À§ ¿¹Á¦´Â ¸Þ´º À̺¥Æ®¸¦ ´Ù·ç±â À§Çؼ­ ÀÌ Å×À̺íÀÇ °æ¿ì ¼¼°³ÀÇ EVT_MENU() ¸ÅÅ©·Î¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Ù. ±× ¿ÜÀÇ ¸ÅÅ©·Îµé·Î´Â * EVT_BUTTON * EVT_CHECKBOX * EVT_RADIOBUTTON * EVT_SLIDER * EVT_SCROLLBAR µîÀÌ Àִµ¥, À̵鿡 ´ëÇؼ­´Â ³ªÁß¿¡ ¹è¿ì±â·Î ÇÏ°í, ¿©±â´Â ±âÃÊ¿¡ ´ëÇؼ­ ÁýÁßÇϵµ·Ï ÇÏ°Ú´Ù. OnOpenFile ¸â¹öÇÔ¼ö´Â wxTextCtrlÀÇ À¯¿ëÇÔÀ» º¸¿©ÁØ´Ù. wxTextCtrlÀº ÆÄÀÏÀ» Á÷Á¢ ÄÜÆ®·Ñ·Î ºÒ·¯¿À´Â ¸â¹öÇÔ¼ö¸¦ °¡Áö°í ÀÖ´Ù. ¿ì¸®°¡ ÆÄÀÏ ¸Þ´ºÀÇ "Open file" Ç׸ñÀ» Ŭ¸¯Çϸé, À̷κÎÅÍ À̺¥Æ®°¡ Æ®¸®°ÅµÇ¸ç ¿î¿µÃ¼Á¦´Â ÀÌ À̺¥Æ®¸¦ Àâ¾Æ¼­ ¿ì¸® ÇÁ·Î±×·¥ÀÌ ÀûÀýÇÑ ÇÔ¼ö(ÆÄÀÏÀ» theText·Î ºÒ·¯¿À±â)¸¦ È£ÃâÇϵµ·Ï ¾Ë·ÁÁØ´Ù. OnAbout ¸â¹öÇÔ¼ö´Â »õ·Î¿î Ŭ·¡½º wxMessageDialog¸¦ »ç¿ëÇÑ´Ù. ÀÌ Å¬·¡½º¿Í wxCommandEvent¿¡ ´ëÇؼ­´Â ³ªÁß¿¡ ÀÌ ¼¼¼Ç¿¡¼­ ´Ù·ê°ÍÀÌ´Ù. ¼Ò½ºÄڵ尡 ÇÊ¿äÇÏ¸é ´ÙÀ½¿¡¼­ ³»·Á¹ÞÀ» ¼ö ÀÖ´Ù . == ¿ä¾à == »ý°¢ÇØ º¼°Íµé wxWindows´Â À©µµ¿ì Å©±â º¯°æÀ» µ½±âÀ§Çؼ­ ´ÙÀ½ À̺¥Æ® ¸ÅÅ©·Î¸¦ Á¦°øÇÑ´Ù: EVT_SIZE ( BasicFrame::OnSize ) ÀÌ ¸ÅÅ©·Î¿¡¼­´Â Å©±âº¯°æÀÌ ÇöÀç À©µµ¿ì¿¡ Àû¿ëµÇ´Â °ÍÀ¸·Î °£ÁÖÇÏ¿© À̺¥Æ® ID°¡ ¸í½ÃµÇÁö ¾Ê¾ÒÀ½À» ÁÖ¸ñÇ϶ó. À§ ¿¹Á¦¿¡ Å©±â º¯°æ À̺¥Æ®¸¦ Ãß°¡ÇÏ°í, OnSize À̺¥Æ® Çڵ鷯¸¦ ¸¸µé°í , Çڵ鷯 ¾È¿¡ À©µµ¿ìÀÇ Å©±â¸¦ ¾Ë¾Æ³»°í Á¦¸ñ ¸·´ë¿¡ ±× Å©±â¸¦ Ç¥½ÃÇÒ ¼ö ÀÖµµ·Ï Äڵ带 Ãß°¡Ç϶ó. ÈùÆ®: wxString Ŭ·¡½º¿Í wxString::Printf() ¸É¹öÇÔ¼ö°¡ ÇÊ¿äÇÒ °ÍÀÌ´Ù. ÇØ´äÀÌ ÇÊ¿äÇÏ¸é ´ÙÀ½¿¡¼­ ³»·Á¹ÞÀ» ¼ö ÀÖ´Ù . ÀÌ ¼¼¼ÇÀÌ ¸Å¿ì Áß¿äÇÏÁö¸¸, ³ª´Â ª°í Á¦ÇÑµÈ ¹üÀ§ ³»¿¡¼­ ´Ù·ç¾ú´Ù. ¿ÀÈ÷·Á ÀÌ·± Á¡ÀÌ wxWindows À̺¥Æ®¿¡ ´ëÇÑ ÈǸ¢ÇÑ ±âÃʸ¦ ´ÙÁö°Ô µµ¿ÍÁÖ¾úÀ» °ÍÀÌ¶ó º»´Ù. À̺¥Æ®¸¦ ´Ù·ç´Â °ÍÀº ²Ï º¹ÀâÇÑ ÀÏÀÌ°í, ¼³»ç wxWindows ÇÁ·¹ÀÓ¿÷ÀÌ ´õ ½±°Ô °í¾ÈµÇ¾úÀ½¿¡µµ ºÒ±¸ÇÏ°í ¿©ÀüÈ÷ º¹À⽺·¯¿î Á¡ÀÌ ÀÖ´Ù. ´ÙÀ½ ¼¼¼Ç¿¡¼­´Â °øÅë ´ëÈ­»óÀÚ¿¡ ´ëÇؼ­ »ìÆ캸µµ·Ï ÇÏ°Ú´Ù. ---- ---- CategoryDevelopment