Programming With Wx Windows
Copyright(c) 1999 - 2001 David Beech
¿ø¹®
1.1. ¼Ò°³ ¶Áö±ÝºÎÅÍ wxWindows Ŭ·¡½º ¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇÑ »õ·Ó°í ½¬¿î À©µµ¿ìÁî ÇÁ·Î±×·¥ Á¦ÀÛ¹ýÀ» »ìÆ캸°íÀÚ ÇÑ´Ù. ¾ö¹ÐÈ÷ ¸»Çϸé wxWindows´Â ¶óÀ̺귯¸® ¼öÁØÀ» ¶Ù¾î³ÑÀ¸¸ç ¿ÏÀüÇÑ ÀÀ¿ë ÇÁ·Î±×·¥À» ¸¸µé ¼ö ÀÖ´Â °³¹ß ȯ°æÀ» Á¦°øÇÑ´Ù. wxWindowsÀÇ ÀåÁ¡Àº ¿©±â¼ ±×Ä¡Áö ¾Ê´Âµ¥, wxWindows ±× ÀÚü°¡ cross-platform ¶óÀ̺귯¸®À̱⠶§¹®ÀÌ´Ù. wxWindows °³¹ßÀÚ´Â ´ÙÀ½°ú °°ÀÌ ¸»ÇÏ°í ÀÖ´Ù:
{{|
wxWindows´Â ¹«¾ùÀΰ¡? wxWindows´Â ´Ù¾çÇÑ Ç÷§Æû¿¡ ´ëÇØ ¶È°°ÀÌ Àû¿ëµÇ¸ç »ç¿ëÇϱ⠽¬¿î GUI °³¹ß API¸¦ Á¦°øÇÑ´Ù. °¢°¢ÀÇ Ç÷§Æû¿¡¼ »ç¿ëÇÏ´Â Àú¼öÁØ ¶óÀ̺귯¸®¿ÍÀÇ ¸µÅ©¸¦ ÅëÇØ, wxWindows¸¦ ÅëÇØ °³¹ßµÈ ÀÀ¿ëÇÁ·Î±×·¥Àº °¢ Ç÷§Æû¿¡ ¸Â´Â ·è¾ØÇÊÀ» Á¦°øÇÑ´Ù. ¶ÇÇÑ ¿Â¶óÀÎ µµ¿ò¸», ³×Æ®¿öÅ© ÇÁ·Î±×·¡¹Ö, ½ºÆ®¸² Á¦¾î, Ŭ¸³º¸µå, µå·¡±×/µå·Ó, ¸ÖƼ ¾²·¹µù, ´Ù¾çÇÑ À̹ÌÁö ÆÄÀÏ¿¡ ´ëÇÑ ÀÐ°í ¾²±â ±â´É, µ¥ÀÌŸº£À̽ºÁö¿ø, HTML º¸±â ¹× Ãâ·Â±â´É µî°ú °°Àº ÃÖ°í ¼öÁØÀÇ GUI ±â´ÉµéÀÌ Æ÷ÇԵǾîÀÖ´Ù.
|}}
wxWindows´Â ¸Å¿ì °íÇ°ÁúÀÇ ÀúÀÛ¹°·Î, ½ÇÁ¦ ¸î¸î »ç¶÷µéÀº µ·À» ÁÖ°í »ì¸¸ÇÏ´ÙÇÏ¿© "»ó¾÷¿ë Ç°Áú"À̶ó´Â ¸»À» ¾²±âµµ ÇÑ´Ù. ±×·¯³ª Ãʺ¸ÀÚ¿¡°Ô´Â ¾î·Á¿ï ¼ö ÀÖ´Ù´Â wxWindows¿¡ ´ëÇÑ ºñÆÇ ¿ª½Ã »ç½ÇÀÌ´Ù: ½ÇÁ¦·Î ÀÔ¹®ÇÏ´Â °úÁ¤ÀÌ ¾à°£ º¹ÀâÇÏ´Ù. ÀÌ·¯ÇÑ ºñÆÇ¿¡ ´ëÇؼ ´ÙÀ½°ú °°Àº ±àÁ¤ÀûÀÎ ´äº¯À» ÇØÁÙ ¼ö ÀÖ´Ù. ÇÁ·Î±×·¡¸Ó°¡ Ŭ·¡½º¿Í ÇÔ¼ö, ÇÁ·Î±×·¡¹Ö Å×Å©´Ð°ú °°Àº wxWindowsÀÇ ¾ÆÅ°ÅØÃÄ¿¡ ´ëÇÑ °³³äÀ» Àâ°ÔµÈ´Ù¸é À¯¿ëÇÑ ÀÀ¿ëÇÁ·Î±×·¥À» Â¥´Â ÀÏÀº »ó´ëÀûÀ¸·Î ½¬¿öÁö±â ¶§¹®¿¡ ÀÔ¹® ´Ü°èÀÇ ¾î·Á¿òÀ» ÃæºÐÈ÷ º¸»ó¹Þ´Â´Ù. ¶ÇÇÑ °æÁ¦ÀûÀ¸·Îµµ ÀåÁ¡À» °®°í Àִµ¥, wxWindows´Â °ÅÀÇ ¸ðµç ÀÀ¿ëÇÁ·Î±×·¥À» °³¹ßÇÒ ¼ö Àִ dzºÎÇÑ ÇÁ·¡ÀÓ¿öÅ©À̱⠶§¹®ÀÌ´Ù.
¿©±â±îÁö ÀÐÀ¸¸é¼ ÃßÃøÇß°ÚÁö¸¸, ³ª´Â wxWindowsÀÇ ¿¿ÇÑ ÁöÁöÀÚÀ̸ç ÀÌ À¥ÆäÀÌÁö¸¦ ÅëÇØ ´ç½Å°ú wxWindows¿¡ ´ëÇÑ ¿Á¤À» ±³·ùÇϱæ¹Ù¶õ´Ù.
ÀÌ ±Û¿¡¼ ³ª´Â ±âÃʺÎÅÍ Â÷±ÙÂ÷±Ù ¿¹Á¦ ÇÁ·Î±×·¥À» ÅëÇØ wxWindowsÀÇ ±¸Á¶¿Í Ŭ·¡½º¿¡ ´ëÇؼ ¼³¸íÇÏ·Á°í ÇÑ´Ù. ÀÌ ¹®¼¸¦ ÀÐ°í ³ª¸é wxWindows¿¡ ´ëÇÑ ±âÃʸ¦ ´ÙÁú ¼ö ÀÖÀ» °ÍÀÌ´Ù.
½ÃÀÛ¿¡ ¾Õ¼ ¸î°¡Áö »çÇ×À» ÀÏ·¯µÎ°íÀÚ ÇÑ´Ù.
1.2. wxWindowsÀÇ ±¸Á¶¿Í ù¹ø° ÇÁ·Î±×·¥ ¶¿©±â°¡ Ãâ¹ßÁ¡À̱⠶§¹®¿¡, ¸ðµç °É ¸Å¿ì °£´ÜÇÏ°Ô ½ÃÀÛÇÏ°Ú´Ù. wxWindows¿ÍÀÇ Ã¹ ´ë¸éÀº ±× °¡Àå ´Ü¼øÇÑ ¸ð½ÀÀÌ´Ù. °è¼Ó °øºÎ¸¦ ÇØ°¡¸é¼ ÇÁ·¡ÀÓ¿öÅ©ÀÇ ¼¼ºÎ»çÇ×À» Çϳª¾¿ »ìÆ캼 °ÍÀÌ´Ù.
wxWindows GUI ÇÁ·Î±×·¥Àº ´ÙÀ½À¸·Î ±¸¼ºµÇ¾îÀÖ´Ù.
°¡Àå °£´ÜÇÑ ÇÁ·Î±×·¥Àº ºó ÇÁ·¡ÀÓ Çϳª·Î¸¸ ÀÌ·ç¾îÁ®ÀÖÀ¸¸ç, ÀÌ°ÍÀÌ ±× ù¹ø° ±âº» ¿¹Á¦ÀÌ´Ù. ÀÌ ¿¹Á¦°¡ ¾î¶² À¯¿ë¼ºÀÌ ÀÖ´ÂÁö ±Ã±ÝÇØ ÇÏ´Â °ÍÀÌ ´ç¿¬ÇÏ´Ù. ÇÁ·¡ÀÓ¸¸ ´Þ¶û ÀÖ´Â ¿¹Á¦ÀÌÁö¸¸ ±³À°Àû°¡Ä¡´Â ÃæºÐÇÏ´Ù. ±×·¡¼ ¿ì¸®°¡ ÀÌ°ÍÀ» Á¦ÀÏ Ã³À½À¸·Î »ìÆ캸´Â °ÍÀÌ´Ù. ÀÌ ´Ü¼øÇÑ ÇÁ·Î±×·¥Àº À©µµ¿ì ÇÁ·Î±×·¥À¸·Î¼ ¸ðµç À¯¿ëÇÑ ÇൿÇÒ ¼ö ÀÖ´Ù. ÀÌ ÇÁ·Î±×·¥Àº ½Ã½ºÅÛ ¸Þ´º¸¦ °®°í ÀÖÀ¸¸ç, À̵¿½Ãų ¼öµµ ÀÖ°í, Å©±â¸¦ Á¶ÀýÇÒ ¼ö ÀÖ°í, ¶ÇÇÑ ¾ø¾Ù ¼ö µµ ÀÖ´Ù.
ÀÌ ÇÁ·Î±×·¥ÀÌ ´ë´ÜÇغ¸ÀÌÁö´Â ¾Ê°ÚÁö¸¸, ¿ì¸®°¡ ¼Õ¼ö ÀÛ¼ºÇÑ °ÍÀÌ´Ù. ÀÌ ÇÁ·Î±×·¥Àº ¶ÇÇÑ ¿ì¸®¿¡°Ô ½Ã½ºÅÛ ÀÚüÀÇ GUI¸¦ º¸¿©ÁØ´Ù. ÀÌ °æ¿ì´Â Windows 98Àε¥, wxWindows°¡ Å©·Î½ºÇ÷§Æû ÇÁ·¡ÀÓ¿öÅ©ÀÓÀ» ±â¾ïÇÑ´Ù¸é Linux, OS2, Mac°ú °°Àº ´Ù¸¥ Ç÷§Æû¿¡¼µµ ¶È°°ÀÌ Àû¿ëµÈ ´Ù´Â °ÍÀ» ÁüÀÛÇÒ ¼ö ÀÖ´Ù.
¿ì¸®ÀÇ Ã¹¹ø° ±âÃÊ ¿¹Á¦¿¡ ´ëÇÑ ¼Ò½ºÄÚµå´Â ´ÙÀ½°ú °°´Ù.
#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°³ÀÇ Å¬·¡½º¸¦ ¼±¾ðÇÑ´Ù:
BasicFrameÀ» À§ÇÑ »ý¼ºÀÚ¿Í ¼Ò¸êÀÚ¸¦ ¼±¾ðÇßÁö¸¸, BasicApplication¿¡ ´ëÇؼ´Â OnInit() ¸â¹öÇÔ¼ö¸¦ ¿À¹ö¶óÀ̵ùÇÒ »ÓÀÌ´Ù. ¿À¹ö¶óÀ̵ùÇÑ ¸â¹öÇÔ¼öÀ̱⠶§¹®¿¡ °¡»óÀ¸·Î ¼±¾ðµÈ Á¡À» ÀØÁö¸»ÀÚ.
#include <wx/wx.h> #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()¸¦ È£ÃâÇÑ´Ù.
»ý¼ºÀÚ¿Í ¼Ò¸êÀÚ¿¡´Â ´Ù¸¥ »õ·Î¿î ³»¿ëÀ» ÷°¡ÇÏÁö ¾Ê¾Ò´Ù.
#include "wx/msw/wx.rc" ¸¶Áö¸·À¸·Î ¸®¼Ò½º ÆÄÀÏÀÌ´Ù. ÀÌ °£´ÜÇÑ ¿¹Á¦ÀÇ °æ¿ì ¾î¶² Ưº°ÇÑ ¸®¼Ò½º°¡ »ç¿ëµÇÁö´Â ¾ÊÁö¸¸, ÃÖ¼ÒÇÑ ´ÙÀ½ ¸®¼Ò½º ÆÄÀÏÀº Ç×»ó Æ÷ÇÔÇØ¾ß ÇÑ´Ù.
#include "wx/msw/wx.rc" ÀÌ ÈÄ¿¡ ¿¹Á¦¿¡¼´Â ¿ì¸®°¡ ÀÛ¼ºÇÑ ¸®¼Ò½º¸¦ ÷°¡ ÇÒ °ÍÀÌ´Ù.
ÀÌÁ¦ ³²Àº ÀÏÀº ºôµåÇÏ¿© ÇÁ·Î±×·¥À» ½ÇÇàÇØ º¸´Â °ÍÀÌ´Ù.
1.3. MingW¸¦ ÀÌ¿ëÇÏ¿© wxWindows ÇÁ·Î±×·¥ ºôµåÇϱ⠶wxWindows ¹èÆ÷ÆÇÀº ¸¹Àº »ùÇÃÆÄÀÏ°ú ´Ù¾çÇÑ Ç÷§Æû¿¡¼ »ùÇà ÆÄÀÏÀ» ÄÄÆÄÀÏÇÒ ¼ö ÀÖ°Ô ÇØÁÖ´Â MakefileÀ» Æ÷ÇÔÇÏ°í ÀÖ´Ù. »ç¿ëÀÚ°¡ ºôµå ¿É¼Çµî ¼¼ºÎ»çÇ×À» ½Å°æ¾²Áö ¾Ê¾Æµµ µÈ´Ù´Â Á¡¿¡¼ ÀÌ MakefileÀ» ÀÌ¿ëÇÏ´Â °ÍÀÌ ÇÁ·Î±×·¥À» ºôµåÇÏ´Â ÈǸ¢ÇÑ ¹æ¹ýÀÓ¿¡µµ ºÒ±¸ÇÏ°í, ³» °æ¿ì´Â ¸î°¡Áö È¥¶õÀ» °Þ¾úÀ½À» ÀÎÁ¤Çؾ߸¸ ÇÏ°Ú´Ù. ½ÇÁ¦·Î ´ÜÁ¡ ¶ÇÇÑ ÀÖ¾ú´Âµ¥, ºôµå½Ã Çì´õ ÆÄÀÏ°ú ¶óÀ̺귯¸®ÀÇ °æ·Î¸¦ ¸í½ÃÇؾ߸¸ ÇÏ´Â °ÍÀ̾ú´Ù.
³ª´Â wxWindowsÀÇ Çì´õ ÆÄÀÏ°ú ¶óÀ̺귯¸® ÆÄÀÏÀ» °¢°¢ÀÇ Ç¥ÁØ À§Ä¡¿¡ º¸°üÇÏ´Â °ÍÀÌ ´õ µµ¿òÀÌ µÈ´Ù´Â °ÍÀ» ¾Ë¾Æ³Â´Ù. ¶óÀ̺귯¸®¸¦ ºôµåÇÏ¿© ¼³Ä¡ÇÑ ÈÄ ³ª´Â wx Çì´õ ÆÄÀÏÀ» Ç¥ÁØ À§Ä¡·Î À̵¿ ½ÃÄ×´Ù.
³» À©µµ¿ì ½Ã½ºÅÛ¿¡¼´Â MingW Æ®¸®¿¡ À§Ä¡ÇÏ¸ç ¸®´ª½º ½Ã½ºÅÛ¿¡¼´Â /usr ¶Ç´Â /usr/local Æ®¸®¿¡ À§Ä¡ÇÑ´Ù. (/usr/lib, /usr/include ¶Ç´Â /usr/local/lib, /usr/local/include).
ÀÌ·¸°Ô ¶óÀ̺귯¸®¿Í Çì´õÆÄÀÏÀÇ Àç¹èÄ¡´Â Ãʺ¸ÀÚµéÀ» È¥¶õ½º·´°ÔÇÏ´Â °Íµé Áß Çϳª¸¦ ¾ø¾ÖÁÖ´Â ÀåÁ¡ÀÌ ÀÖ´Ù. ÀÌ·¸°Ô Çؼ ¿¹Á¦¸¦ ºôµåÇϱâ À§ÇÑ ´ÙÀ½ÀÇ MakefileÀ» ¾µ ¼ö ÀÖ°Ô µÈ´Ù.
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 ÇÁ·Î±×·¥À» ºôµåÇϱâ À§ÇØ Àû´çÇÑ µð·ºÅ丮¿¡ ¼Ò½ºÆÄÀϵéÀ» »ý¼ºÇÑ´Ù.
¿ªÀÚ ÁÖ
1.4. »ç¿ëÇÑ wxWindows Ŭ·¡½º ¶¿ì¸®´Â ¿ÀÁ÷ 2°³ÀÇ Å¬·¡½º¸¸À» »ç¿ëÇß´Ù:
wxFrame »ý¼ºÀÚ
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¿Í °°ÀÌ ÇÁ·Î±×·¡¸Ó¿¡ ÀÇÇؼ ÁöÁ¤µÉ ¼ö ÀÖÀ¸¸ç ÇÁ·¡ÀÓÀÌ ÂüÁ¶µÇ°í ÀÖ´Ù¸é À¯¿ëÇÏ´Ù. ÇÁ·¡ÀÓ ½ºÅ¸ÀÏÀº ¸Å¿ì ´Ù¾çÇÑ °ªÀ» °¡Áú ¼ö ÀÖ´Ù:
À©µµ¿ì ½ºÅ¸ÀÏ
ÀÌ·¸°Ô ¹Ù²Ù¾î º»´Ù¸é ...
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ÀÇ ¸â¹öÁß ¸â¹öÇÔ¼ö´Â ´ÙÀ½°ú °°´Ù:
ÇÁ·¡ÀÓ Á¦¸ñ°ú ÇÁ·¡ÀÓ À̸§
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)ÁÙ ¾Õ¿¡ Ãß°¡ÇÏÀÚ.
frame->SetTitle(frame->GetTitle() + " " + frame->GetName()); ÇÁ·Î±×·¥À» ºôµåÇÏ°í ½ÇÇàÇغ¸¸é ±× È¿°ú¸¦ º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. GetName() ¸â¹öÇÔ¼ö´Â ¾îµð¼ ¿Â °ÍÀϱî?
1.5. ¿ä¾à ¶Ã¹¹ø° ÇнÀ¿¡¼´Â »ó´çÇÑ ¾çÀÇ ±âÃʸ¦ ½×¾Ò´Ù. ´ç½ÅÀº wxWindows ÇÁ·¡ÀÓ¿öÅ©ÀÇ ±âÃʸ¦ »ìÆìºÃÀ¸¸ç ¾ÆÅ°ÅØÃÄ¿¡ ´ëÇÑ ¾î¶² °¨À» Àâ¾ÒÀ» °ÍÀÌ´Ù. wxWindows ¹®¼ÀÇ Å¬·¡½º ·¹ÆÛ·±½º¸¦ ã¾Æ º¸´Â °ÍÀ» ÀØÁö ¸»±æ ¹Ù¶õ´Ù. óÀ½¿¡ È¥¶õ½º·¯¿ïÁö ¸ð¸£³ª ¿¬½ÀÀ» ÅëÇØ »ó´çºÎºÐ ÇØ°áÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ ½Ã°£ÀÌ ÀÖÀ» ¶§ wxWindowsÀÇ ¼Ò½ºÄڵ带 Žµ¶Çغ¼ °ÍÀ» ±ÇÇÑ´Ù. ±× ¾È¿¡¼ ¸¹Àº À¯¿ëÇÑ ÁÖ¼®¹®µéÀ» ¹ß°ßÇÒ ¼ö ÀÖÀ» °ÍÀÌ¸ç ¶ÇÇÑ ÀÌ ÈǸ¢ÇÑ ÆÐÅ°Áö°¡ ´ã°í ÀÖ´Â °ÍÀ» È®½ÇÈ÷ ÀÌÇØÇÒ ¼ö ÀÖ´Â Ãâ¹ß Á¡ÀÌ µÉ °ÍÀÌ´Ù.
2.1. ¼Ò°³ ¶¾Õ ¼¼¼Ç¿¡¼´Â wxWindowsÀÇ ±âº» °ñ°ÝÀ» »ìÆ캸¾Ò°í, °¡Àå °£´ÜÇÑ ÀÀ¿ëÇÁ·Î±×·¥À» ¸¸µé¾î º¸¾Ò´Ù. °øºÎ¸¦ ¸¹ÀÌ ÇÑ °ÍÀº ¾Æ´ÏÁö¸¸, ÀϹÝÀûÀÎ À©µµ¿ì ÇÁ·Î±×·¥ÀÇ ±âº» ±â´ÉÀ» ¾Ë°Ô µÇ¾ú´Ù. ´ÙÀ½ ´Ü°è´Â ¸î°¡Áö ±â´ÉÀ» Ãß°¡Çغ¸´Â °ÍÀ¸·Î, À̸¦ ÅëÇØ º°·Î À¯¿ëÇغ¸ÀÌÁö´Â ¾ÊÁö¸¸, Áß¿äÇÑ ¹«¾ùÀΰ¡¸¦ °³¹ßÇÒ °ÍÀ̸ç wxWindowsÀÇ ÇÁ·¡ÀÓ¿öÅ©¿¡ ´ëÇØ ´õ¿í ¹è¿ì°Ô µÉ °ÍÀÌ´Ù. ÀÌ ¼¼¼Ç¿¡¼´Â ÅؽºÆ® ÄÁÆ®·Ñ, ¸Þ´º, »óŹٸ¦ BasicFrame¿¡ Ãß°¡ÇÏ·Á°í ÇÑ´Ù. ¸ÕÀú ÅؽºÆ® ÄÁÆ®·ÑÀ» Ãß°¡Çغ¸ÀÚ.
2.2. ÅؽºÆ® ÄÁÆ®·Ñ Ãß°¡Çϱ⠶ÅؽºÆ® ÄÁÆ®·ÑÀ» °®´Â ÀÀ¿ëÇÁ·Î±×·¥ÀÌ ¿©±â ³ª¿ÍÀÖ´Ù.
ÅؽºÆ® ÄÁÆ®·ÑÀº ÅؽºÆ® ÆíÁý±â¿¡ ÇÊ¿äÇÑ ¸ðµç ±â´ÉÀ» Á¦°øÇØÁØ´Ù. ¿¹¸¦ µé¸é Ä¿¼ À̵¿, ÅؽºÆ® »ðÀÔ, ¼±Åðú »èÁ¦, À߶󳻱â, º¹»ç, ºÙ¿©³Ö±â µîÀÌ´Ù. ¶ÇÇÑ ÅؽºÆ® ÄÁÆ®·Ñ¿¡ ¸î°¡Áö °£´ÜÇÑ ±â´ÉÀ» ´õÇØÁÖ¸é ÆÄÀÏ ¿±â, ÀúÀå, »õ À̸§À¸·Î ÀúÀå, µÇµ¹¸®±â, ´Ù½ÃÇϱâ, ÆùÆ® ¼±ÅõîÀÇ ±â´ÉÀ» ¼öÇàÇÒ ¼ö ÀÖ´Ù.
wxTextCtrlÀÇ °¡Àå °£´ÜÇÑ ½ºÅ¸ÀÏÀº ´Ü ÇÑ°³ÀÇ ÆíÁý ÁÙ¸¸À» °®´Â °ÍÀ¸·Î, ÀÌ°ÍÀº ÇÁ·Î±×·¥ ½ÇÇà µµÁß, »ç¿ëÀڷκÎÅÍ µ¥ÀÌÅ͸¦ ÀÔ·Â ¹ÞÀ» ¶§ ´ëÈ»óÀÚ¿¡¼ ÀÌ¿ëµÇ°ïÇÑ´Ù. ¿©·¯ ÁÙÀ» ´Ù·ê ¼ö ÀÖµµ·Ï ÅؽºÆ® ÄÁÆ®·ÑÀ» ¼öÁ¤ÇÏ´Â °ÍÀº ´Ü¼øÈ÷ ½ºÅ¸ÀÏÀ» °íħÀ¸·Î½á ÇØ°áµÈ´Ù. ¶ÇÇÑ ¸¹Àº ¾çÀÇ µ¥ÀÌŸ¸¦ ´Ù·ï¾ß ÇÏ´Â ÅؽºÆ® ÄÁÆ®·ÑÀ» ¸¸µå´Â °Í ¿ª½Ã ½ºÅ¸ÀÏÀ» ¼öÁ¤ÇÔÀ¸·Î½á ¾ò¾îÁú ¼ö ÀÖ´Ù.
´ÙÀ½Àº ÅؽºÆ® ÄÁÆ®·ÑÀ» °®´Â BasicFrame¿¡ ´ëÇÑ ¼Ò½ºÄÚµåÀÌ´Ù.
#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 ´ÙÀ½ ÁÙÀ» Á¦¿ÜÇÏ°í Çì´õÆÄÀÏÀº °ÅÀÇ ¹Ù²ïÁ¡ÀÌ ¾ø´Ù.
wxTextCtrl *theText; ÀÌ°ÍÀº theText¶ó´Â wxTextCtrl Æ÷ÀÎÅ͸¦ ¼±¾ðÇÏ´Â °ÍÀÌ´Ù.
#include <wx/wx.h> #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() { } »ý¼ºÀÚ¸¦ »ìÆ캸¸é, ¸î°¡Áö ±âº» ¸Å°³º¯¼ö·Î ÅؽºÆ® ÄÁÆ®·ÑÀÌ ¸¸µé¾îÁüÀ» ¾Ë ¼ö ÀÖ´Ù. ¿©±â¼ ´ÙÀ½ ÁÙÀ» ´«¿©°Üº¸ÀÚ.
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À» °¡¸®Å°°í ÀÖ´Ù.
theText = new wxTextCtrl( ... ) 2.3. ÅؽºÆ® ÄÁÆ®·Ñ Ŭ·¡½º - wxTextCtrl ¶wxTextCtrl »ý¼ºÀÚ
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¿Í ¶È°°´Ù.
ÇÁ·Î±×·¥ ºôµåÇϱâ:
ÇϳªÀÇ µð·ºÅ丮¿¡ ¼Ò½ºÆÄÀÏÀ» ¸¸µç´Ù.
¿øÇÏ¸é ¿¹Á¦ ÆÄÀÏÀ» ´ÙÀ½¿¡¼ ³»·Á¹ÞÀ» ¼ö ÀÖ´Ù .
2.4. ¸Þ´º¹Ù ´õÇϱ⠶ÇÁ·¡ÀÓ°ú ÅؽºÆ® ÄÁÆ®·ÑÀº ÀÛÁö¸¸ »ó´çÇÑ ±â´ÉÀ» Á¦°øÇÏÁö¸¸, ½ÇÁ¦ ÀÀ¿ëÇÁ·Î±×·¥ ÀÛ¼º±îÁö´Â ¿©ÀüÈ÷ ¸î ¹ßÀÚ±¹ÀÌ ³²¾ÆÀÖ´Ù. Ãß°¡ÇÒ ´ÙÀ½ ÄÁÆ®·ÑÀº ¸Þ´º¹Ù·Î »ç¿ëÀÚ°¡ ÇÁ·Î±×·¥¿¡ °¢ ¸í·ÉÀ» Àü´ÞÇÒ ¼ö ÀÖµµ·Ï ÇØÁØ´Ù.
Çì´õ ÆÄÀÏÀº ´ÙÀ½ Ãß°¡ »çÇ×À» Á¦¿ÜÇÏ°í´Â ¹Ù²ïÁ¡ÀÌ ¾ø´Ù:
enum { BASIC_EXIT = 1, BASIC_OPEN = 100, BASIC_ABOUT = 200 }; ¸î¸î °ýÈ£·Î ½ÎÀÎ ºÎºÐÀº ¹Ù²ï Á¡ÀÌ ¾ø±â ¶§¹®¿¡ »ý·«ÇÏ¿´À½À» ¾Ë·ÁµÐ´Ù.
enum ¼±¾ð¹®Àº ¸Þ´º Ç׸ñ°ú ¿¬°á½ÃÅ°±â À§ÇØ ¼±¾ðµÇ¾ú´Ù.
´ÙÀ½ ÁÙÀº µÎ°³ÀÇ »õ·Î¿î µ¥ÀÌŸ ¸â¹ö¸¦ °®´Â BasicFrame Ŭ·¡½º¸¦ ¼±¾ðÇÑ´Ù.
wxMenuBar *menuBar; wxMenu *fileMenu; Çϳª´Â ¸Þ´º¹ÙÀÌ°í ´Ù¸¥ Çϳª´Â ¸Þ´ºÀÌ´Ù. ¹°·Ð ¸Þ´º¹Ù´Â ÇÁ·¡ÀÓÀÇ °¡Àå ÀºÎºÐ¿¡ À§Ä¡ÇÑ´Ù. ¸Þ´º´Â µå·Ó´Ù¿î ¸Þ´ºÀÌ´Ù.
#include <wx/wx.h> #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() ... ÇÁ·Î±×·¥ ÆÄÀÏ¿¡´Â ´ÙÀ½À» Ãß°¡ÇÏ¿´´Ù. ¿ª½Ã Æ÷ÀÎÅÍÀÇ ¾ÈÀüÀ» À§ÇÔÀÌ´Ù.
menuBar = (wxMenuBar *) NULL; fileMenu = (wxMenu *)NULL; wxMenuÀÇ ÀνºÅϽº¸¦ »ý¼ºÇÑ´Ù.
fileMenu = new wxMenu; »õ·Î¿î ÆÄÀÏ ¸Þ´º¿¡ Ç׸ñÀ» Ãß°¡ÇϱâÀ§Çؼ Append()¿Í AppendSeparator()¸¦ »ç¿ëÇÑ´Ù.
fileMenu->Append(BASIC_OPEN, "&Open file"); fileMenu->Append(BASIC_ABOUT, "&About"); fileMenu->AppendSeparator(); fileMenu->Append(BASIC_EXIT, "E&xit"); ¸¶Áö¸·À¸·Î wxMenuBarÀÇ ÀνºÅϽº¸¦ »ý¼ºÇϸç ÆÄÀÏ ¸Þ´º¸¦ ¿©±â¿¡ Ãß°¡ÇÑ ÈÄ, ÇÁ·¹ÀÓ¿¡ ¸Þ´º¹Ù¸¦ Ãß°¡Çϱâ À§Çؼ BasicFrameÀÇ ¸â¹öÇÔ¼öÀÎ SetMenuBar()¸¦ È£ÃâÇÑ´Ù.
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.
ºôµå ÇÏ´Â ¹ý:
ÇÑ µð·ºÅ丮¿¡ ´ÙÀ½ ¼Ò½ºÆÄÀÏÀ» ¸¸µç´Ù.
2.5. »óŹ٠Ãß°¡Çϱ⠶»óŹٸ¦ Ãß°¡ÇÏ´Â °ÍÀº À̺¸´Ù ´õ °£´ÜÇÒ ¼ö ¾ø´Ù. ´ÙÀ½ÁÙÀ» Ãß°¡ÇÑ´Ù:
CreateStatusBar(3); SetMenuBar(menuBar); CreateStatusBar(3); ÀÌ°ÍÀ¸·Î BasicFrame¿¡ 3°³ Çʵ带 °®´Â »óŹٰ¡ Ãß°¡µÈ´Ù. ¿ì¸®´Â wxFrameÀÇ SetStatusBarText("¹®ÀÚ¿",Á¤¼ö)¸¦ ÀÌ¿ëÇÏ¿© Çʵ忡 ¹®ÀÚ¿À» ½á³Ö´Â´Ù. »óŹٰ¡ 3°³ÀÇ Çʵ带 °®°í Àֱ⠶§¹®¿¡ °¡´ÉÇÑ Á¤¼ö°ªÀº 0, 1, ¶Ç´Â 2 ÀÌ´Ù. ¾Õ¼ ³ª¿Â ¿¹Á¦¸¦ ´ÙÀ½À¸·Î ¼öÁ¤Çغ¸¸é 0¹ø° »óŹ٠Çʵ忡 Append()¸â¹öÇÔ¼öÀÇ 3¹ø° Àμö°¡ Ç¥½ÃµÊÀ» ¾Ë ¼ö ÀÖ´Ù.
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."); 2.6. »ç¿ëÇÑ wxWindows Ŭ·¡½º ¶¿ì¸®´Â wxMenuBar¿Í wxMenu¸¦ »õ·Î ¾Ë°ÔµÇ¾ú°í, »óŹٸ¦ »ý¼º/Á¶Á¤À» À§Çؼ CreateStatusBar() ¸â¹öÇÔ¼ö¸¦ »ç¿ëÇÏ¿´´Ù. wxMenuBar¿Í wxMenu¿¡ ´ëÇØ ÀÚ¼¼È÷ ¾Ë¾Æº¸´Â °ÍÀº µÚ·Î ¹Ì·ç°í ´ÙÀ½¹ø¿¡´Â ¸Þ´º À̺¥Æ®¿¡ ÇÁ·Î±×·¥ÀÌ ÀÀ´äÇÏ´Â ¹æ¹ý¿¡ ´ëÇؼ ´Ù·ê °ÍÀÌ´Ù.
2.7. ¿ä¾à ¶»ý°¢ÇØ º¼°Íµé
3.1. ¼Ò°³ ¶¿À·¡Àü ³ª´Â µÎ°³ÀÇ ´Ù¸¥ ¿î¿µÃ¼Á¦¿¡¼ ÀÛ¾÷À» ÇÏ¿´´Ù. Çϳª´Â ½ÃºÐÇÒ ½Ã½ºÅÛÀ¸·Î ¿î¿µÃ¼Á¦ ½ºÄÉÁÙ·¯°¡ °¢ »ç¿ëÀÚ¿¡¼ ÄÄÇ»ÅÍ ¸®¼Ò½º¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â ½Ã°£À» ÇÒ´çÇØÁÖµµ·Ï µÇ¾îÀÖ´Ù. ´Ù¸¥ Çϳª´Â À̺¥Æ® µå¶óÀÌºê ½Ã½ºÅÛÀ¸·Î, ÀÌ°ÍÀº ÀÏÁ¾ÀÇ »ê¾÷¿ë ÇÁ·Î¼¼¼ Á¦¾î±âÀε¥ ÇÁ·Î¼¼½º´Â °¢ »ç¿ëÀÚ°¡ ¸®¼Ò½º¸¦ °øÀ¯Çϵµ·Ï ±â´Ù·ÁÁÖÁö ¾Ê´Â´Ù. ´ë½Å ½Ã½ºÅÛÀº °©ÀÛ½º·± ¿øÀÚ·Î ³ë½ÉÀÇ ¿ëÀ¶°ú °°Àº ¿ÜºÎÀ̺¥Æ®¿¡ ºü¸£°Ô ÀÀ´äÇϵµ·Ï °í¾ÈµÇ¾ú´Ù. ¾î¶² ¸é¿¡¼ º¸¸é, GUI ½Ã½ºÅÛÀº À̺¥µå µå¶óÀÌºê ¸ðµ¨À» ½ÃºÐÇÒ ¸ðµ¨¿¡ °áÇÕÇß´Ù°í º¼ ¼ö ÀÖ´Ù.
"À̺¥Æ®"´Â ÇÁ·Î±×·¥ ¿ÜºÎ¿¡¼ ¹ß»ýÇÑ ¾î¶² Èï¹Ì·Î¿î »ç°ÇÀ» ÀÏÄ´´Ù. À̺¥Æ®´Â ´ÜÃà±â¸¦ ´©¸£°Å³ª ¸Þ´ºÇ׸ñÀ» ¼±ÅÃÇÔÀ¸·Î½á ¹ß»ýÇÒ ¼ö ÀÖ°í,
¶Ç ŸÀÌ¸Ó ÀÛµ¿ ¿Ï·á½Ã³ª Åë½ÅÆ÷Æ®¿¡ µ¥ÀÌŸ°¡ ´ë±âÇÒ ¶§, ½Ã½ºÅÛ Á¾·á ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§¿Í °°ÀÌ ÇÁ·Î±×·¥ ¿ÜºÎÀÇ ÄÄÇ»ÅÍ È¯°æÀÇ º¯È·ÎºÎÅÍ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. À̺¥Æ®ÀÇ ¹ß»ý¿øÀÌ ¹«¾ùÀ̵簣¿¡ À̰͵éÀº ÀûÀýÈ÷ ´Ù·ïÁú ÇÊ¿ä°¡ÀÖ´Ù.
³»°¡ ÀÌ ±ÛÀ» ¾²´Â µ¿¾È, ³» À©µµ¿ì 98 ½Ã½ºÅÛ¿¡´Â 10°³ÀÇ ÀÀ¿ëÇÁ·Î±×·¥ÀÌ ¿Ã·ÁÁ®ÀÖ´Ù. ÀÌ ÆíÁý±â¸¦ Á¦¿ÜÇÑ ´Ù¸¥ ÀÀ¿ëÇÁ·Î±×·¥Àº ¶§¶§·Î Çϵåµð½ºÅ© ºÒÀÌ ±ô¹ÛÀÌ´Â ¿Ü¿¡ ±×´ÙÁö ¸¹Àº ÀÏÀ» ÇÏ´Â °Í °°Áö¾Ê´Ù. ±×·¯³ª, ³»°¡ ÀÛ¾÷Ç¥½ÃÁÙÀÇ ¾î¶² ÀÀ¿ëÇÁ·Î±×·¥À» Ŭ¸¯ÇÑ´Ù¸é, ±× ÀÀ¿ëÇÁ·Î±×·¥Àº È°¼ºÈµÇ¸é ÀÛ¾÷ÇÒ Áغñ¸¦ ÇÑ´Ù. ÀÛ¾÷Ç¥½ÃÁÙÀº ¸¶¿ì½º Ŭ¸¯ À̺¥Æ®¸¦ ¼ö½ÅÇÏ°í, À̺¥Æ®¿Í °ü·ÃµÈ Á¤º¸¸¦ ¿î¿µÃ¼Á¦°¡ °ü¸®ÇÏ´Â ¸Þ½ÃÁöÅ¥¿¡ Àü´ÞÇÑ´Ù. ±×¸®°í ÇØ´çÇÏ´Â ÀÀ¿ëÇÁ·Î±×·¥Àº ¸Þ½ÃÁö¸¦ ¹Þ°Ô µÈ´Ù. <somehow the appropriate application gets a message to say it's been called.>
ÀϹÝÀûÀÎ À̺¥Æ® Çڵ鸵 ÇÁ·Î±×·¡¹Ö Å×Å©´ÐÀº Äݹé ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ´Â °ÍÀÌ´Ù. ¾Æ·¡´Â FLTK¿¡¼ Äݹé ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ´Â ¿¹ÀÌ´Ù (FLTK´Â Å©·Î½º-Ç÷§Æû GUI ÇÁ·¹ÀÓ¿÷ÀÇ ÀÏÁ¾ÀÌ´Ù):
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) ÇÁ·¹ÀÓ¿öÅ©´Â ÃÖ¼ÒÇÑ ÇÁ·Î±×·¡¸Ó ÀÔÀå¿¡¼ º¸¸é µÑ´Ù ´Ù¸¥ Å×Å©´ÐÀ» »ç¿ëÇÑ´Ù. ¹°·Ð ³»ºÎÀûÀ¸·Î´Â ÄÝ¹é ±âÀÛÀÌ ¿©ÀüÈ÷ »ç¿ëµÇ°í ÀÖ´Ù. ÀÌ ±âÀÛÀº À̺¥Æ® Å×À̺íÀ̶ó°í ºÎ¸£¸ç, À̺¥Æ® Çڵ鸵À» ¸Å¿ì °£´ÜÈ÷ ´Ù·ê¼ö ÀÖ°Ô ÇØÁØ´Ù.
3.2. wxWindows À̺¥Æ® Å×ÀÌºí ¶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() ¸ÅÅ©·Î¸¦ ¸í½ÃÇÑ´Ù.
¸¶Áö¸·À¸·Î À̺¥Æ®¸¦ ó¸®ÇÒ ¸â¹öÇÔ¼ö¸¦ ÀÛ¼ºÇؾ߸¸ ÇÑ´Ù. ´ÙÀ½ ¿¹¸¦ »ìÆ캸ÀÚ:
#ifndef BASIC_H #define BASIC_H #include <wx/wx.h> 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 ÀÌ°ÍÀº Çì´õ ÆÄÀÏ·Î, ÀÌÀü¿¡ ºñÇØ »õ·Î Ãß°¡µÈ ³»¿ëÀÌ »ó´çÈ÷ ÀÖ´Ù. Ãß°¡µÈ ³»¿ë ÀüºÎ°¡ À̺¥Æ®¿Í °ü·ÃµÈ °ÍÀº ¾Æ´Ï´Ù.
ù¹ø°·Î ÁÖ¸ñÇÒ Á¡Àº ´ÙÀ½ ºÎºÐÀÌ´Ù:
static const wxChar *TITLE = _T("Basic - Step 3: Responding to events"); ÀÌ ºÎºÐ¿¡¼´Â char¸¦ °¡¸®Å°´Â »ó¼ö, Á¤Àû, Æ÷ÀÎÅ͸¦ ¼±¾ðÇß´Ù¶ó°í ÃßÃøÇÒ ¼ö ÀÖ´Ù. ÀÌ Æ¯º°ÇÑ ¿¹Á¦¿¡¼´Â º¯¼ö¸¦ Á¤ÀûÀ¸·Î ¼±¾ðÇÑ°ÍÀÌ Å« Àǹ̰¡ ÀÖÁö´Â ¾Ê´Ù. ¿Ö³ÄÇϸé, ÀϹÝÀûÀ¸·Î Á¤Àû¼±¾ðÀº ÇÔ¼ö È£Ãâ°£ °ªÀÇ À¯Áö(³»ºÎ Á¤Àû)³ª ´Ù¸¥ ÆÄÀÏ·Î ºÎÅÍÀÇ º¯¼ö Àº´Ð(¿ÜºÎ Á¤Àû)À» º¸ÀåÇϱâ À§ÇØ ÀÌ¿ëÇϱ⠶§¹®ÀÌ´Ù. ¿ì¸®´Â ÀÌ ¿¹Á¦ ÆÄÀÏÀ» ´Ù¸¥ °÷¿¡ »ç¿ëÇÏÁö ¾Ê±â¶§¹®¿¡, Á¤Àû ¸Þ¸ð¸® Ŭ·¡½º´Â Áߺ¹µÈ´Ù. ±×·³¿¡µµ ºÒ±¸ÇÏ°í Á¤Àûº¯¼ö·Î½á ¿ÜºÎ ¶Ç´Â Àü¿ª º¯¼ö(Áï, ÇÔ¼ö ¿ÜºÎ¿¡¼ ¼±¾ðµÈ º¯¼ö)¸¦ ¼±¾ðÇÏ´Â °ÍÀº ÁÁÀº ¿¬½ÀÀÌ´Ù. ±× ÀÌÀ¯´Â ¿ì¸®°¡ ÀÌ ÆÄÀÏÀ» ´Ù¸¥ °÷¿¡ »ç¿ëÇÒ ¼ö Àֱ⿡ À̸§ÀÇ Ãæµ¹ °¡´É¼ºÀ» »çÀü Â÷´ÜÇϱâ À§ÇؼÀÌ´Ù. Á¤Àûº¯¼ö¿¡ ´ëÇؼ´Â ¿ÜºÎ, Á¤Àû, ÀÚµ¿ º¯¼ö¿¡ °üÇÑ Âü°í¹®ÇåÀ» Àо±æ ±ÇÇÑ´Ù.
¸ÅÅ©·Î _T´Â ¶Ç ´Ù¸¥ ¸ÅÅ©·Î wxTRANSLATEÀÇ ¾à¾î·Î ·ÎÄÉÀÏ Á¤º¸¿Í °ü·ÃÀÌ ÀÖÀ¸³ª, ³»°¡ Àß ¸ð¸¥´Ù! ´ÙÀ½Àº À̺¥Æ® Å×ÀÌºí¿¡ ´ëÇؼ »ìÆ캸°Ú´Ù:
¿ÞÂÊÀ» º¸¸é 3°³ÀÇ ¸â¹öÇÔ¼ö°¡ Àִµ¥, °¢°¢Àº void ÇüÀÌ°í, Àμö·Î wxCommandEvent¸¦ °®´Â´Ù. À̰͵éÀº ½ÇÁ¦·Î´Â ¿ì¸®ÀÇ ÄݹéÇÔ¼öÀÌ´Ù.
¶Ç DECLARE_EVENT_TABLE()À» º¼ ¼ö Àִµ¥, ÀÌ ¸ÅÅ©·Î´Â ÄÄÆÄÀÏ·¯¿¡°Ô ÀÌ Å¬·¡½º°¡ À̺¥Æ® Å×À̺íÀ» °®°í ÀÖÀ½À» ¾Ë·ÁÁְԵȴÙ.
¸¶Áö¸·À¸·Î, enum ¼±¾ðÀÌ Àִµ¥, ÀÌ »ó¼öµéÀ» À̺¥Æ®ÀÇ ÀνÄÀÚ·Î »ç¿ëÇϱâ À§ÇÔÀÌ´Ù.
#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() ¸ÅÅ©·Î¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Ù. ±× ¿ÜÀÇ ¸ÅÅ©·Îµé·Î´Â
OnOpenFile ¸â¹öÇÔ¼ö´Â wxTextCtrlÀÇ À¯¿ëÇÔÀ» º¸¿©ÁØ´Ù. wxTextCtrlÀº ÆÄÀÏÀ» Á÷Á¢ ÄÜÆ®·Ñ·Î ºÒ·¯¿À´Â ¸â¹öÇÔ¼ö¸¦ °¡Áö°í ÀÖ´Ù.
¿ì¸®°¡ ÆÄÀÏ ¸Þ´ºÀÇ "Open file" Ç׸ñÀ» Ŭ¸¯Çϸé, À̷κÎÅÍ À̺¥Æ®°¡ Æ®¸®°ÅµÇ¸ç ¿î¿µÃ¼Á¦´Â ÀÌ À̺¥Æ®¸¦ Àâ¾Æ¼ ¿ì¸® ÇÁ·Î±×·¥ÀÌ ÀûÀýÇÑ ÇÔ¼ö(ÆÄÀÏÀ» theText·Î ºÒ·¯¿À±â)¸¦ È£ÃâÇϵµ·Ï ¾Ë·ÁÁØ´Ù.
OnAbout ¸â¹öÇÔ¼ö´Â »õ·Î¿î Ŭ·¡½º wxMessageDialog¸¦ »ç¿ëÇÑ´Ù. ÀÌ Å¬·¡½º¿Í wxCommandEvent¿¡ ´ëÇؼ´Â ³ªÁß¿¡ ÀÌ ¼¼¼Ç¿¡¼ ´Ù·ê°ÍÀÌ´Ù.
¼Ò½ºÄڵ尡 ÇÊ¿äÇÏ¸é ´ÙÀ½¿¡¼ ³»·Á¹ÞÀ» ¼ö ÀÖ´Ù .
3.3. ¿ä¾à ¶»ý°¢ÇØ º¼°Íµé
wxWindows´Â À©µµ¿ì Å©±â º¯°æÀ» µ½±âÀ§Çؼ ´ÙÀ½ À̺¥Æ® ¸ÅÅ©·Î¸¦ Á¦°øÇÑ´Ù:
EVT_SIZE ( BasicFrame::OnSize )
ÀÌ ¸ÅÅ©·Î¿¡¼´Â Å©±âº¯°æÀÌ ÇöÀç À©µµ¿ì¿¡ Àû¿ëµÇ´Â °ÍÀ¸·Î °£ÁÖÇÏ¿© À̺¥Æ® ID°¡ ¸í½ÃµÇÁö ¾Ê¾ÒÀ½À» ÁÖ¸ñÇ϶ó.
À§ ¿¹Á¦¿¡ Å©±â º¯°æ À̺¥Æ®¸¦ Ãß°¡ÇÏ°í, OnSize À̺¥Æ® Çڵ鷯¸¦ ¸¸µé°í , Çڵ鷯 ¾È¿¡ À©µµ¿ìÀÇ Å©±â¸¦ ¾Ë¾Æ³»°í Á¦¸ñ ¸·´ë¿¡ ±× Å©±â¸¦ Ç¥½ÃÇÒ ¼ö ÀÖµµ·Ï Äڵ带 Ãß°¡Ç϶ó.
ÈùÆ®: wxString Ŭ·¡½º¿Í wxString::Printf() ¸É¹öÇÔ¼ö°¡ ÇÊ¿äÇÒ °ÍÀÌ´Ù.
ÇØ´äÀÌ ÇÊ¿äÇÏ¸é ´ÙÀ½¿¡¼ ³»·Á¹ÞÀ» ¼ö ÀÖ´Ù .
ÀÌ ¼¼¼ÇÀÌ ¸Å¿ì Áß¿äÇÏÁö¸¸, ³ª´Â ª°í Á¦ÇÑµÈ ¹üÀ§ ³»¿¡¼ ´Ù·ç¾ú´Ù. ¿ÀÈ÷·Á ÀÌ·± Á¡ÀÌ wxWindows À̺¥Æ®¿¡ ´ëÇÑ ÈǸ¢ÇÑ ±âÃʸ¦ ´ÙÁö°Ô µµ¿ÍÁÖ¾úÀ» °ÍÀÌ¶ó º»´Ù. À̺¥Æ®¸¦ ´Ù·ç´Â °ÍÀº ²Ï º¹ÀâÇÑ ÀÏÀÌ°í, ¼³»ç wxWindows ÇÁ·¹ÀÓ¿÷ÀÌ ´õ ½±°Ô °í¾ÈµÇ¾úÀ½¿¡µµ ºÒ±¸ÇÏ°í ¿©ÀüÈ÷ º¹À⽺·¯¿î Á¡ÀÌ ÀÖ´Ù.
´ÙÀ½ ¼¼¼Ç¿¡¼´Â °øÅë ´ëÈ»óÀÚ¿¡ ´ëÇؼ »ìÆ캸µµ·Ï ÇÏ°Ú´Ù.
|