· 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
You have an ability to sense and know higher truth.


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