· 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
He who has imagination without learning has wings but no feet.


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.0224 sec