= [WinBinder] Window 종류 =

 

지난 강좌에서는 winbinder를 설치해서 간단하게 window를 뛰움으로써 실행하는 방법을 알아보았습니다.  
오늘은 window 프로그래밍의 가장 기본인 window에 대해서 조금 알아보겠습니다. 
(php로 winbinder 를 한다는 것은 거의 대부분 하나 이상의 Window 형태로 프로그래밍을 한다는 것을 의미합니다. )

자, 그럼 Window 종류에는 어떤 것이 있는지 한번 알아보죠. 
 
winbinder에서 제공하는 Window의 종류는 아래와 같이 7가지 입니다. (참조 : http://winbinder.org/manual/reference/classes_window.html)

* AppWindow 
* ModalDialog 
* ModelessDialog  <- 주의 
* NakedWindow 
* PopupWindow 
* ResizableWindow 
* ToolDialog 

위의 Window 형태는 모두 상수로 지정이 되어 있으며 easylogic lib 에서는 아래와 같은 형태로 구현됩니다. 

* [[PObject]]
** [[WBObject]]
*** [[WBComponent]] 
**** [[WBContainer]]
***** [[WBWindow]] 
****** [[WBAppWindow]] 
****** [[WBModalDialog]] 
****** [[WBModalessDialog]] 
****** [[WBNakedWindow]] 
****** [[WBPopupWindow]] 
****** [[WBResizableWindow]]
****** [[WBToolDialog]]  

위의 상수가 지정된 형태와 같은 윈도우 클래스들을 제공합니다. 

그럼 실제 화면을 보면서 윈도우를 살짝 엿보도록 하죠. 

 

== 1. AppWindow ==

고정크기 윈도우 입니다. 최소화 버튼만 지원을 합니다. 고정크기 이기 때문에 최대화는 하지 않습니다.

[[그림:WBAppWindow.jpg]]

== 2. ModalDialog ==
 
modal 형태의 dialog 입니다. 
modal 은 자신이 활성화 되어 있을 때는 다른 윈도우는 활성화 되지 않는 윈도우를 이야기합니다. 
아래에 보는 바와 같이 parent Window는 비활성화가 됩니다.

[[그림:ModalDialog.jpg]]

== 3. ModalessDialog ==

 
modaless dialog 입니다. modal 과는 조금 틀리게 자신이 살아있더라도 다른 윈도우가 활성화 될 수 있습니다. 
다이얼로그가 뛰워져 있더라도 내부에서 다른 작업을 하고 싶다면 이 기능을 쓰시면 됩니다.

[[그림:ModalessDialog.jpg]]

== 4. NakedWindow ==


윈도우의 border와 titlebar 가 없는 윈도우입니다.
아래에 보시는 바와 같이 그냥 비어 있는 영역만 있습니다. 
winbinder 에서는 http://winbinder.org/manual/functions/wb_set_area.html 에 있는 함수를 사용하여 titlebar 영역을 지정해 줄 수 있습니다. 
영역을 지정하게 되면 윈도우를 마우스를 가지고 움직일 수 있습니다. 
지금은 아무것도 없는 관계로 윈도우를 마우스로 움직일 수가 없습니다. 

[[그림:NakedWindow.jpg]]

그리고 한가지 유의할 점은 titlebar 가 없는 관계로 닫기 버튼이 없습니다. 

직접 만들어 주셔야 합니다. 간단한 예제는 파일로 같이 첨부합니다.

== 5. PopupWindow ==

팝업 윈도우입니다. 최소화 버튼이 없는 고정크기의 일반적인 Window 입니다.

[[그림:PopupWindow.jpg]]

== 6. ResizableWindow ==
 
가장 일반적인 윈도우 입니다. 
윈도우의 사이즈를 조절 할 수 있습니다. 최소, 최대, 닫기 버튼이 모두 있습니다.

[[그림:ResizableWindow.jpg]]

== 7. ToolDialog ==

작은 titlebar 를 가진 Modaless Dialog 입니다. 닫기 버튼만 존재합니다. 
포토샵의 툴바와 같인 작은 아이콘의 모음을 윈도우 형태로 뛰워서 같이 사용합니다. 
modaless 형태이기 때문에 활성화 되지 않았더라도 다른 윈도우를 사용가능합니다. 

[[그림:ToolDialog.jpg]]

간단하게 윈도우 모습들을 알아봤습니다. 
앞으로 winbinder를 계속 하게 되면 위의 7가지 종류 중에 하나의 Window를 사용하게 될 것입니다. 
외형적인 window는 알아봤으니깐 실제로 윈도우의 몇가지 특징을 더 알아보겠습니다.

= 윈도우의 생성 =

 
<php>
int wb_create_window (int parent, int wclass [, string caption [, int xpos [, int ypos [, int width [, int height [, int style [, int param]]]]]]])

or

int wb_create_window (int parent, int wclass [, string caption [, int width [, int height]]])
</php>
 

winbinder 에서는 위와 같은 형태의 window 생성 함수를 지원합니다. 

하지만 easylogic lib 은 WBWindow 라는 클래스를 사용하여 같은 기능을 구현합니다. 

WBWindow 클래스는 Window 생성 함수 이외에 window에서 사용하는 함수를 모두 가지고 있습니다. 

 
<php>
<?

$window = new WBAppWindow(array(
    'title' => '제목', 
    'width' => 300, 
    'height' => 400,
));

?>
</php>

 

oop형태로 생성할때는 위와 형태로 options을 매개변수로 넘겨주어서 윈도우를 생성합니다. 

매개변수로 들어가는 options에 관해서는 다음에 정리해서 올리겠습니다.

= 이벤트 =

Window 프로그래밍에서 이벤트를 빼고는 프로그래밍이 되지를 않죠.
winbinder에서도 마찬가지입니다. 모든 것은 이벤트로 이루어져있다고 해도 과언이 아닙니다. 
실제 우리가 동작할려는 프로그램은 위의 7가지 종류의 window에 이벤트를 추가함으로써 이루어 집니다. 

winbinder 에 이벤트를 다룰려면 아래와 같은 기본적인 절차가 필요합니다. 

<php>
<?

// 윈도우 생성 
$window = wb_create_window();

// 이벤트 핸들러 등록 
wb_set_handler($window, 'process_main');

// 이벤트 대기 시작 
wb_main_loop();

// 이벤트를 실행 
function process_main(....) { 

}

?>
</php>
 

Window를 생성하고 그 Window에 이벤트 핸들러를 설정하고 wb_main_loop(); 를 실행해서 이벤트를 받을 준비를 합니다. 
wb_main_loop(); 를 실행하지 않으면 프로그램이 바로 종료가 됩니다. 
 
위와 같은 절차로 생성한 Window는 하나의 이벤트 핸들러를 가집니다. 
이 이벤트 핸들러는 생성된 윈도우 상에서 일어나는 모든 이벤트를 감시하고 실행하는 역할을 하게 됩니다. 

이것이 winbinder에서 이벤트를 받아 들이는 가장 기본적인 방법입니다.  
하지만 Window에서 일어나는 모든 이벤트 처리를 하나의 함수에서 해야하는 복잡한 점이 있습니다. 
(참조 : http://winbinder.org/manual/functions/wb_create_window.html)

 easylogic lib는 핸들러를 좀 더 사용하기 쉽게 설계되어 있습니다. 

<php>
<?

$window = new WBAppWindow(...);

$window->add(new WBPushButton(array(
     ....

     'event' => array ('click' => 'click'),
)));

WBApplication::start();   // wb_main_loop() 함수를 그대로 실행합니다. 

function click($eo) { 
    // 클릭 이벤트 구현 
}

?>
</php>
 

각각의 생성되는 Window와 Control 들에 대해서 이벤트 핸들러를 직접 지정할수 있습니다. 
오늘은 간단하게 window 형태와 이벤트 실행되는 과정을 알아보았습니다. 
다음 강좌에서는 window와 이벤트에 대해서 좀 더 자세히 알아보도록 하겠습니다.
