· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Programming With Wx Windows

Copyright(c) 1999 - 2001 David Beech

¿ø¹®

1. Programming with wxWindows - ù ´Ü°è


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¿¡ ´ëÇÑ ±âÃʸ¦ ´ÙÁú ¼ö ÀÖÀ» °ÍÀÌ´Ù.

½ÃÀÛ¿¡ ¾Õ¼­ ¸î°¡Áö »çÇ×À» ÀÏ·¯µÎ°íÀÚ ÇÑ´Ù.

  • ³ª´Â Ưº°È÷ ÈǸ¢ÇÑ ÇÁ·Î±×·¡¸Óµµ ¾Æ´Ï¸ç wxWindows¸¦ Åë´ÞÇÏÁöµµ ¾Ê¾Ò´Ù. ±×·¯³ª ³ª´Â ±ÛÀçÁÖ°¡ Á» ÀÖÀ¸¸ç º¹ÀâÇÑ ÁÖÁ¦µéÀ» ¸íÈ®È÷ ¼³¸íÇÒ ¼ö ÀÖ´Ù°í È®½ÅÇÑ´Ù.
  • ¸¹Àº ºÎºÐÀº ¾Æ´ÏÁö¸¸ C¿Í C++¿¡ ´ëÇÑ »çÀü ÀÌÇØ°¡ ÇÊ¿äÇÏ´Ù. wxWindows¸¦ ¹è¿ö°¡´Ùº¸¸é ´ç½ÅÀÇ C/C++ ½Ç·Âµµ ¸¹ÀÌ Çâ»óµÉ °ÍÀÌ´Ù. ´ç½ÅÀÌ ÀÌ À¥»çÀÌÆ®ÀÇ C++°ú °ü·ÃÇÑ ¹®¼­µéÀ» ´ëºÎºÐ Žµ¶Çß´Ù¸é ¾Æ¸¶µµ º° ¹®Á¦°¡ ¾øÀ» °ÍÀÌ´Ù.
  • °´Ã¼ÁöÇâ ÇÁ·Î±×·¡¹Ö°ú Ŭ·¡½º¿¡ ´ëÇÑ »çÀü ÀÌÇØ°¡ ÇÊ¿äÇÏ´Ù. ÀÌ ¶ÇÇÑ ÀÌ À¥»çÀÌÆ®ÀÇ ¹®¼­°¡ µµ¿òÀÌ µÉ °ÍÀÌ´Ù.
  • Ãʱâ ÀÛ¾÷Àº MS À©µµ¿ì ȯ°æ (Win95/98/2K) ¿¡¼­ ÀÌ·ç¾îÁ³´Ù. MingW ÆÐÅ°Áö¿Í wxWindows·Î °³¹ß ȯ°æÀ» ±¸¼ºÇÏ¿´´Ù.

¸¸¾à ´ç½ÅÀÌ C++ ÇÁ·Î±×·¥¿¡ Àͼ÷ÇÏÁö ¾ÊÁö¸¸ wxWindows¸¦ »ç¿ëÇÏ¿© ½ÇÁ¦ GUI ÇÁ·Î±×·¥À» ¾î¼­ »¡¸® °³¹ßÇÏ°í½Í´Ù¸é ÀÌ ¹®¼­´Â ¸Å¿ì Å« µµ¿òÀÌ µÉ °ÍÀÌ´Ù. ÀÚ ÇÔ²² °¡º¸ÀÚ!

1.2. wxWindowsÀÇ ±¸Á¶¿Í ù¹ø° ÇÁ·Î±×·¥

¿©±â°¡ Ãâ¹ßÁ¡À̱⠶§¹®¿¡, ¸ðµç °É ¸Å¿ì °£´ÜÇÏ°Ô ½ÃÀÛÇÏ°Ú´Ù. wxWindows¿ÍÀÇ Ã¹ ´ë¸éÀº ±× °¡Àå ´Ü¼øÇÑ ¸ð½ÀÀÌ´Ù. °è¼Ó °øºÎ¸¦ ÇØ°¡¸é¼­ ÇÁ·¡ÀÓ¿öÅ©ÀÇ ¼¼ºÎ»çÇ×À» Çϳª¾¿ »ìÆ캼 °ÍÀÌ´Ù.

wxWindows GUI ÇÁ·Î±×·¥Àº ´ÙÀ½À¸·Î ±¸¼ºµÇ¾îÀÖ´Ù.

  • ¾îÇø®ÄÉÀÌ¼Ç °´Ã¼ - wxApp Ŭ·¡½ºÀÇ ÀνºÅϽºÀÌ´Ù
  • ÇÁ·¡ÀÓ °´Ã¼ - wxFrame Ŭ·¡½ºÀÇ ÀνºÅϽºÀ̸ç ÇÁ·¡ÀÓÀº ¸Þ´º¹Ù, »óŹÙ, ¾ÆÀÌÄܵîÀ» °¡Áú ¼ö ÀÖ´Ù
  • ÇÁ·¡ÀÓ °´Ã¼´Â ÅؽºÆ® ÄÁÆ®·ÑÀ̳ª ¹öÆ°, ºÐ¸®ÀÚµîÀÇ ´Ù¸¥ °´Ã¤¸¦ ´ãÀ» ¼ö ÀÖ´Â ÄÁÅ×À̳ÊÀÌ´Ù



°¡Àå °£´ÜÇÑ ÇÁ·Î±×·¥Àº ºó ÇÁ·¡ÀÓ Çϳª·Î¸¸ ÀÌ·ç¾îÁ®ÀÖÀ¸¸ç, ÀÌ°ÍÀÌ ±× ù¹ø° ±âº» ¿¹Á¦ÀÌ´Ù. ÀÌ ¿¹Á¦°¡ ¾î¶² À¯¿ë¼ºÀÌ ÀÖ´ÂÁö ±Ã±ÝÇØ ÇÏ´Â °ÍÀÌ ´ç¿¬ÇÏ´Ù. ÇÁ·¡ÀÓ¸¸ ´Þ¶û ÀÖ´Â ¿¹Á¦ÀÌÁö¸¸ ±³À°Àû°¡Ä¡´Â ÃæºÐÇÏ´Ù. ±×·¡¼­ ¿ì¸®°¡ ÀÌ°ÍÀ» Á¦ÀÏ Ã³À½À¸·Î »ìÆ캸´Â °ÍÀÌ´Ù. ÀÌ ´Ü¼øÇÑ ÇÁ·Î±×·¥Àº À©µµ¿ì ÇÁ·Î±×·¥À¸·Î¼­ ¸ðµç À¯¿ëÇÑ ÇൿÇÒ ¼ö ÀÖ´Ù. ÀÌ ÇÁ·Î±×·¥Àº ½Ã½ºÅÛ ¸Þ´º¸¦ °®°í ÀÖÀ¸¸ç, À̵¿½Ãų ¼öµµ ÀÖ°í, Å©±â¸¦ Á¶ÀýÇÒ ¼ö ÀÖ°í, ¶ÇÇÑ ¾ø¾Ù ¼ö µµ ÀÖ´Ù.

ÀÌ ÇÁ·Î±×·¥ÀÌ ´ë´ÜÇغ¸ÀÌÁö´Â ¾Ê°ÚÁö¸¸, ¿ì¸®°¡ ¼Õ¼ö ÀÛ¼ºÇÑ °ÍÀÌ´Ù. ÀÌ ÇÁ·Î±×·¥Àº ¶ÇÇÑ ¿ì¸®¿¡°Ô ½Ã½ºÅÛ ÀÚüÀÇ 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°³ÀÇ Å¬·¡½º¸¦ ¼±¾ðÇÑ´Ù:

  • wxApp·Î ºÎÅÍ »ó¼ÓµÈ BasicApplication
  • wxFrameÀ¸·Î ºÎÅÍ »ó¼ÓµÈ BasicFrame

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



ÇÁ·Î±×·¥À» ºôµåÇϱâ À§ÇØ Àû´çÇÑ µð·ºÅ丮¿¡ ¼Ò½ºÆÄÀϵéÀ» »ý¼ºÇÑ´Ù.

  • basic.h
  • basic.cpp
  • basic_resources.rc
  • Makefile
ÆÄÀÏÀÌ ÀúÀåµÈ µð·ºÅ丮¿¡¼­ make¸¦ ½ÇÇàÇÑ´Ù.

  • make
ÇÁ·Î±×·¥À» ½ÇÇàÇÑ´Ù.

  • basic
ÆÄÀÏÀÌ ÇÊ¿äÇÒ °æ¿ì ´ÙÀ½À» ³»·Á¹ÞÀ» ¼ö ÀÖ´Ù ([http]http://www.bzzt.net/downloads/wxbasic0.zip).

¿ªÀÚ ÁÖ

  • wx-config ¶ó´Â ÇÁ·Î±×·¥À» »ç¿ëÇصµ µË´Ï´Ù.
  • wx-config --cxxflags
  • wx-config --libs
  • ex) gcc -o outfile sourcefile wx-config --cxxflags --libs

1.4. »ç¿ëÇÑ wxWindows Ŭ·¡½º


¿ì¸®´Â ¿ÀÁ÷ 2°³ÀÇ Å¬·¡½º¸¸À» »ç¿ëÇß´Ù:

  • wxApp
  • wxFrame
À̷κÎÅÍ ¿ì¸® ÀÚ½ÅÀÇ Å¬·¡½ºÀÎ BasicApplication°ú BasicFrameÀ» À¯µµÇß´Ù. ÀÌÁ¦ ÀÌ µÎ Ŭ·¡½º¿¡ ´ëÇؼ­ ÀÚ¼¼È÷ ¾Ë¾Æº¸·Á°í ÇÑ´Ù. ´Ü, ´õ¿í ¿ÏÀüÇÑ Å¬·¡½º ¼³¸íÀº wxWindows ¹®¼­¸¦ ÂüÁ¶ÇÏ±æ ¹Ù¶õ´Ù.

  • wxApp

wxApp Ŭ·¡½º´Â 30°³°¡ ³Ñ´Â ÂüÁ¶°¡´ÉÇÑ ¸â¹ö¸¦ °¡Áö°í ÀÖÁö¸¸, ÀÌ ´Ü°è¿¡¼­ °¢°¢À» ÀÚ¼¼È÷ »ìÆ캼 ÇÊ¿ä´Â ¾ø´Ù. ÃßÈÄ¿¡ wxWindows À̺¥Æ® ½Ã½ºÅÛÀ» ´Ù·ê ¶§, wxApp¿¡ ´ëÇؼ­ ÀÚ¼¼È÷ ¾Ë¾Æº¸±â·Î ÇÏÀÚ.

  • wxFrame

wxFrame Ŭ·¡½º°¡ ÇÏ´Â ÀÏÀº "´«¿¡ º¸À̱â" ¶§¹®¿¡ ½Ã°£À» ÇÒ¾ÖÇÏ¿© °¢°¢ÀÇ ¼Ó¼º¿¡ ´ëÇØ ¾Ë¾Æº¸±â·Î ÇÏÀÚ.

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¿Í °°ÀÌ ÇÁ·Î±×·¡¸Ó¿¡ ÀÇÇؼ­ ÁöÁ¤µÉ ¼ö ÀÖÀ¸¸ç ÇÁ·¡ÀÓÀÌ ÂüÁ¶µÇ°í ÀÖ´Ù¸é À¯¿ëÇÏ´Ù. ÇÁ·¡ÀÓ ½ºÅ¸ÀÏÀº ¸Å¿ì ´Ù¾çÇÑ °ªÀ» °¡Áú ¼ö ÀÖ´Ù:

À©µµ¿ì ½ºÅ¸ÀÏ

  • 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ÀÇ ½ºÅ¸ÀÏ ¼Ó¼ºÀ» °®°Ô µÈ´Ù.

ÀÌ·¸°Ô ¹Ù²Ù¾î º»´Ù¸é ...


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 ¸â¹ö ÇÔ¼ö¿¡ ´ëÇؼ­ ¿¬½ÀÀ» Çغ¸ÀÚ.

ÇÁ·¡ÀÓ Á¦¸ñ°ú ÇÁ·¡ÀÓ À̸§


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. Programming with 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¿Í ¶È°°´Ù.

  • 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

¿øÇÏ¸é ¿¹Á¦ ÆÄÀÏÀ» ´ÙÀ½¿¡¼­ ³»·Á¹ÞÀ» ¼ö ÀÖ´Ù .

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.

ºôµå ÇÏ´Â ¹ý:

ÇÑ µð·ºÅ丮¿¡ ´ÙÀ½ ¼Ò½ºÆÄÀÏÀ» ¸¸µç´Ù.

  • basic.h
  • basic.cpp
  • basic_resources.rc
  • Makefile

¿©±â¼­ make¸¦ ½ÇÇàÇÏ°í, ÇÁ·Î±×·¥À» ½ÇÇàÇÑ´Ù.

  • make
  • basic
´ÙÀ½¿¡¼­ ¼Ò½ºÆÄÀÏÀ» ¾òÀ» ¼ö ÀÖ´Ù .

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. ¿ä¾à


»ý°¢ÇØ º¼°Íµé

  • ÀÌ ¼¼¼ÇÀÇ °£´ÜÇÑ ¿¹Á¦¸¦ °¡Á®´Ù°¡ ¸î°¡Áö ¸Þ´ºÇ׸ñÀ» ´õ Ãß°¡Çغ¸ÀÚ.
  • ¿Ö ´ÙÀ½°ú °°Àº ÃʱâÈ­¸¦ Çϴ°¡? theText = (wxTextCtrl *) NULL;
  • frame->Show(TRUE); ¿Í frame.Show(TRUE); ÀÇ Â÷ÀÌ´Â ¹«¾ùÀΰ¡?

ÀÌ ¼¼¼Ç¿¡¼­´Â ¸î°¡Áö ÀϹÝÀûÀÎ À©µµ¿ì ±â´ÉÀ» ÷°¡ÇÔÀ¸·Î½á ±âº» ÀÀ¿ëÇÁ·Î±×·¥À» ´õ¿í ¹ßÀü½ÃÄ×´Ù. Èï¹Ì·Î¿î °ÍÀº ±×´ÙÁö ÈûµéÁö ¾Ê¾Ò´Ù´Â °ÍÀÌ´Ù. ÀÌ´Â wxWindows°¡ Àß °í¾ÈµÈ ÇÁ·¡ÀÓ¿÷ÀÓÀ» ¹ÝÁõÇÑ´Ù. ¶ÇÇÑ ¿ì¸®´Â ÅؽºÆ® ÄÁÆ®·ÑÀ» ½±°Ô ¼öÁ¤ÇÒ ¼ö ÀÖÀ½À» º¸¾Ò°í, wxMenu Ŭ·¡½ºÀÇ À¯¿¬¼º¿¡ ´ëÇØ ÈùÆ®¸¦ ¾ò¾ú´Ù.

3. Programming with wxWindows - À̺¥Æ® »ç¿ëÇϱâ

3.1. ¼Ò°³


¿À·¡Àü ³ª´Â µÎ°³ÀÇ ´Ù¸¥ ¿î¿µÃ¼Á¦¿¡¼­ ÀÛ¾÷À» ÇÏ¿´´Ù. Çϳª´Â ½ÃºÐÇÒ ½Ã½ºÅÛÀ¸·Î ¿î¿µÃ¼Á¦ ½ºÄÉÁÙ·¯°¡ °¢ »ç¿ëÀÚ¿¡¼­ ÄÄÇ»ÅÍ ¸®¼Ò½º¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â ½Ã°£À» ÇÒ´çÇØÁÖµµ·Ï µÇ¾îÀÖ´Ù. ´Ù¸¥ Çϳª´Â À̺¥Æ® µå¶óÀÌºê ½Ã½ºÅÛÀ¸·Î, ÀÌ°ÍÀº ÀÏÁ¾ÀÇ »ê¾÷¿ë ÇÁ·Î¼¼¼­ Á¦¾î±âÀε¥ ÇÁ·Î¼¼½º´Â °¢ »ç¿ëÀÚ°¡ ¸®¼Ò½º¸¦ °øÀ¯Çϵµ·Ï ±â´Ù·ÁÁÖÁö ¾Ê´Â´Ù. ´ë½Å ½Ã½ºÅÛÀº °©ÀÛ½º·± ¿øÀÚ·Î ³ë½ÉÀÇ ¿ëÀ¶°ú °°Àº ¿ÜºÎÀ̺¥Æ®¿¡ ºü¸£°Ô ÀÀ´äÇϵµ·Ï °í¾ÈµÇ¾ú´Ù. ¾î¶² ¸é¿¡¼­ º¸¸é, GUI ½Ã½ºÅÛÀº À̺¥µå µå¶óÀÌºê ¸ðµ¨À» ½ÃºÐÇÒ ¸ðµ¨¿¡ °áÇÕÇß´Ù°í º¼ ¼ö ÀÖ´Ù.

"À̺¥Æ®"´Â ÇÁ·Î±×·¥ ¿ÜºÎ¿¡¼­ ¹ß»ýÇÑ ¾î¶² Èï¹Ì·Î¿î »ç°ÇÀ» ÀÏÄ´´Ù. À̺¥Æ®´Â ´ÜÃà±â¸¦ ´©¸£°Å³ª ¸Þ´ºÇ׸ñÀ» ¼±ÅÃÇÔÀ¸·Î½á ¹ß»ýÇÒ ¼ö ÀÖ°í, ¶Ç ŸÀÌ¸Ó ÀÛµ¿ ¿Ï·á½Ã³ª Åë½ÅÆ÷Æ®¿¡ µ¥ÀÌŸ°¡ ´ë±âÇÒ ¶§, ½Ã½ºÅÛ Á¾·á ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§¿Í °°ÀÌ ÇÁ·Î±×·¥ ¿ÜºÎÀÇ ÄÄÇ»ÅÍ È¯°æÀÇ º¯È­·ÎºÎÅÍ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. À̺¥Æ®ÀÇ ¹ß»ý¿øÀÌ ¹«¾ùÀ̵簣¿¡ À̰͵éÀº ÀûÀýÈ÷ ´Ù·ïÁú ÇÊ¿ä°¡ÀÖ´Ù.

³»°¡ ÀÌ ±ÛÀ» ¾²´Â µ¿¾È, ³» À©µµ¿ì 98 ½Ã½ºÅÛ¿¡´Â 10°³ÀÇ ÀÀ¿ëÇÁ·Î±×·¥ÀÌ ¿Ã·ÁÁ®ÀÖ´Ù. ÀÌ ÆíÁý±â¸¦ Á¦¿ÜÇÑ ´Ù¸¥ ÀÀ¿ëÇÁ·Î±×·¥Àº ¶§¶§·Î Çϵåµð½ºÅ© ºÒÀÌ ±ô¹ÛÀÌ´Â ¿Ü¿¡ ±×´ÙÁö ¸¹Àº ÀÏÀ» ÇÏ´Â °Í °°Áö¾Ê´Ù. ±×·¯³ª, ³»°¡ ÀÛ¾÷Ç¥½ÃÁÙÀÇ ¾î¶² ÀÀ¿ëÇÁ·Î±×·¥À» Ŭ¸¯ÇÑ´Ù¸é, ±× ÀÀ¿ëÇÁ·Î±×·¥Àº È°¼ºÈ­µÇ¸é ÀÛ¾÷ÇÒ Áغñ¸¦ ÇÑ´Ù. ÀÛ¾÷Ç¥½ÃÁÙÀº ¸¶¿ì½º Ŭ¸¯ À̺¥Æ®¸¦ ¼ö½ÅÇÏ°í, À̺¥Æ®¿Í °ü·ÃµÈ Á¤º¸¸¦ ¿î¿µÃ¼Á¦°¡ °ü¸®ÇÏ´Â ¸Þ½ÃÁöÅ¥¿¡ Àü´ÞÇÑ´Ù. ±×¸®°í ÇØ´çÇÏ´Â ÀÀ¿ëÇÁ·Î±×·¥Àº ¸Þ½ÃÁö¸¦ ¹Þ°Ô µÈ´Ù. <somehow the appropriate application gets a message to say it's been called.>

ÀϹÝÀûÀÎ À̺¥Æ® Çڵ鸵 ÇÁ·Î±×·¡¹Ö Å×Å©´ÐÀº Äݹé ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ´Â °ÍÀÌ´Ù. ¾Æ·¡´Â [http]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() ¸ÅÅ©·Î¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Ù. ±× ¿ÜÀÇ ¸ÅÅ©·Îµé·Î´Â

  • EVT_BUTTON
  • EVT_CHECKBOX
  • EVT_RADIOBUTTON
  • EVT_SLIDER
  • EVT_SCROLLBAR
µîÀÌ Àִµ¥, À̵鿡 ´ëÇؼ­´Â ³ªÁß¿¡ ¹è¿ì±â·Î ÇÏ°í, ¿©±â´Â ±âÃÊ¿¡ ´ëÇؼ­ ÁýÁßÇϵµ·Ï ÇÏ°Ú´Ù.

OnOpenFile ¸â¹öÇÔ¼ö´Â wxTextCtrlÀÇ À¯¿ëÇÔÀ» º¸¿©ÁØ´Ù. wxTextCtrlÀº ÆÄÀÏÀ» Á÷Á¢ ÄÜÆ®·Ñ·Î ºÒ·¯¿À´Â ¸â¹öÇÔ¼ö¸¦ °¡Áö°í ÀÖ´Ù. ¿ì¸®°¡ ÆÄÀÏ ¸Þ´ºÀÇ "Open file" Ç׸ñÀ» Ŭ¸¯Çϸé, À̷κÎÅÍ À̺¥Æ®°¡ Æ®¸®°ÅµÇ¸ç ¿î¿µÃ¼Á¦´Â ÀÌ À̺¥Æ®¸¦ Àâ¾Æ¼­ ¿ì¸® ÇÁ·Î±×·¥ÀÌ ÀûÀýÇÑ ÇÔ¼ö(ÆÄÀÏÀ» theText·Î ºÒ·¯¿À±â)¸¦ È£ÃâÇϵµ·Ï ¾Ë·ÁÁØ´Ù.

OnAbout ¸â¹öÇÔ¼ö´Â »õ·Î¿î Ŭ·¡½º wxMessageDialog¸¦ »ç¿ëÇÑ´Ù. ÀÌ Å¬·¡½º¿Í wxCommandEvent¿¡ ´ëÇؼ­´Â ³ªÁß¿¡ ÀÌ ¼¼¼Ç¿¡¼­ ´Ù·ê°ÍÀÌ´Ù.

¼Ò½ºÄڵ尡 ÇÊ¿äÇÏ¸é ´ÙÀ½¿¡¼­ ³»·Á¹ÞÀ» ¼ö ÀÖ´Ù .

3.3. ¿ä¾à

»ý°¢ÇØ º¼°Íµé

wxWindows´Â À©µµ¿ì Å©±â º¯°æÀ» µ½±âÀ§Çؼ­ ´ÙÀ½ À̺¥Æ® ¸ÅÅ©·Î¸¦ Á¦°øÇÑ´Ù:

EVT_SIZE ( BasicFrame::OnSize )

ÀÌ ¸ÅÅ©·Î¿¡¼­´Â Å©±âº¯°æÀÌ ÇöÀç À©µµ¿ì¿¡ Àû¿ëµÇ´Â °ÍÀ¸·Î °£ÁÖÇÏ¿© À̺¥Æ® ID°¡ ¸í½ÃµÇÁö ¾Ê¾ÒÀ½À» ÁÖ¸ñÇ϶ó.

À§ ¿¹Á¦¿¡ Å©±â º¯°æ À̺¥Æ®¸¦ Ãß°¡ÇÏ°í, OnSize À̺¥Æ® Çڵ鷯¸¦ ¸¸µé°í , Çڵ鷯 ¾È¿¡ À©µµ¿ìÀÇ Å©±â¸¦ ¾Ë¾Æ³»°í Á¦¸ñ ¸·´ë¿¡ ±× Å©±â¸¦ Ç¥½ÃÇÒ ¼ö ÀÖµµ·Ï Äڵ带 Ãß°¡Ç϶ó.

ÈùÆ®: wxString Ŭ·¡½º¿Í wxString::Printf() ¸É¹öÇÔ¼ö°¡ ÇÊ¿äÇÒ °ÍÀÌ´Ù.

ÇØ´äÀÌ ÇÊ¿äÇÏ¸é ´ÙÀ½¿¡¼­ ³»·Á¹ÞÀ» ¼ö ÀÖ´Ù .

ÀÌ ¼¼¼ÇÀÌ ¸Å¿ì Áß¿äÇÏÁö¸¸, ³ª´Â ª°í Á¦ÇÑµÈ ¹üÀ§ ³»¿¡¼­ ´Ù·ç¾ú´Ù. ¿ÀÈ÷·Á ÀÌ·± Á¡ÀÌ wxWindows À̺¥Æ®¿¡ ´ëÇÑ ÈǸ¢ÇÑ ±âÃʸ¦ ´ÙÁö°Ô µµ¿ÍÁÖ¾úÀ» °ÍÀÌ¶ó º»´Ù. À̺¥Æ®¸¦ ´Ù·ç´Â °ÍÀº ²Ï º¹ÀâÇÑ ÀÏÀÌ°í, ¼³»ç wxWindows ÇÁ·¹ÀÓ¿÷ÀÌ ´õ ½±°Ô °í¾ÈµÇ¾úÀ½¿¡µµ ºÒ±¸ÇÏ°í ¿©ÀüÈ÷ º¹À⽺·¯¿î Á¡ÀÌ ÀÖ´Ù. ´ÙÀ½ ¼¼¼Ç¿¡¼­´Â °øÅë ´ëÈ­»óÀÚ¿¡ ´ëÇؼ­ »ìÆ캸µµ·Ï ÇÏ°Ú´Ù.



ID
Password
Join
The attacker must vanquish; the defender need only survive.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2006-04-25 00:32:50
Processing time 0.0242 sec