커뮤니티 | 큐티/임베디드/큐토피아 | PODO | SDL | 마이크로윈도우 | 리눅스프로그래밍 | 기타 | 포인트순위 | 최근게시물최근게시물 RSS  
korone.net에 다루었으면 하는것은요?
 
 
 
 
 
828
1,243
3,878
3,702,349
  현재접속자 : 60 (회원 0)






배너 신청 문의

 
작성일 : 05-08-08 16:41
왕초보를 위한 Nano-X 1편 (helloworld.c 분석하기)
 글쓴이 : 냐옹이
조회 : 14,987  
정말 왕초보를 위한 설명입니다.
프로그램에 조금이라도 자신이 있으신 분은, 아니 아시는 분은 !!!절대로!!! 보실 필요가 없습니다. 보시다가 짜증나셔도 책임못집니다. -_-;

들어가기에 앞서
Microwindows (Nano-X Window System의 이전명칭)은 포팅된 상태라고 가정합니다.
다른분들이 앞에 써 놓으신 것도 있고, 어려우니까 넘어갑니다...
전 Microwindows 대신 nano-X라고 부를껍니다....

소스는 장진혁님이 올려놓으신 hello.c를 보겠습니다. (장진혁님 감사합니다.)
원래 helloworld.c 코드를 짜야하나, 제가 귀찮고 이미 좋은 소스가 있길래...^^;
일반 C프로그램과 같은 방식으로 코딩하시고, 보시면 됩니다.

// nano-X에서 자주 사용하는 16가지 색에 대해 정의해 놓은 겁니다.
// 그걸 사용하겠다고 define한 것입니다. 밑에 나오는 WHITE, BLUE가 그 색입니다.
#define MWINCLUDECOLORS

// 이건 C에서도 많이 쓰셨을 테니 패스...
#include <stdio.h>

// nano-X에서 필수로 써야하는 구문이죠. Gr~로 시작하는 함수들이 여기 들어있습니다.
// nano-X에서 프로그래머가 사용할 수 있도록 제공하는 함수들은 Gr로 시작합니다.
#include "nano-X.h"

int main(int ac,char **av)
{
    // nano-X에서 사용할 window를 선언했습니다.
    // 여기서 window는 MS Windows의 window와 비슷하게 생각하시면 됩니다.(같던가?)
    GR_WINDOW_ID w;

    // GC는 Graphic Context입니다. Graphic에 관련된 내용이 저장됩니다.
    GR_GC_ID gc;

    // 발생할 event를 저장할 곳입니다. event란 어떤 사건이 발생하는 것을 말합니다.
    // 예를 들면 마우스 왼쪽버튼이 눌렸다. 사용자가 프로그램 종료를 눌렀다 등등...
    GR_EVENT event;

    // nano-X를 실행하기에 앞서 초기화 해주는 부분입니다.
    // Keyboard, mouse, display등 다 초기화 합니다. 이거 실패하면 당연히 아무것도 안됩니다.
    if (GrOpen() < 0)
    {
        fprintf (stderr, "Can't open graphics\n");
        exit(1);
    }

    // 새로운 윈도우를 생성합니다. 인자로 GR_ROOT_WINDOW_ID는 지금 생성하는 w란
    // 윈도우의 부모는 최상위 윈도우라는 것을 말합니다. 이거 말곤 부모 윈도우가 없다는 뜻이죠.
    // child window를 만들고 싶으시면 여기다가 다른 걸 적어주시면 되겠죠.
    // 뒤에 나오는 숫자 네 개는 윈도우 x,y,w,h입니다.
    // 숫자 4는 window의 border 크기입니다. 테두리 두께입니다.
    // WHITE는 window의 바탕색입니다.
    // BLUE는 window의 border, 테두리 색입니다.
    w = GrNewWindow(GR_ROOT_WINDOW_ID, 20, 20, 100, 60, 4, WHITE, BLUE);

    // 새로운 Graphic Context를 생성합니다.
    gc = GrNewGC();

    // GC의 전경색(?)을 검정색으로 설정합니다. 쉽게 붓 색깔을 검정색으로 했다고 생각하세요.
    GrSetGCForeground(gc, BLACK);
   
    // GC의 Background를 사용할지 설정합니다. 안사용하는 걸로 했네요. 이건 넘어갑니다.
    GrSetGCUseBackground(gc, GR_FALSE);

    // 이벤트 중에서 EXPOSURE만 이 프로그램에서 허용하도록 합니다.
    GrSelectEvents(w, GR_EVENT_MASK_EXPOSURE);

    // window를 show합니다. 눈에 나타나도록 하죠.
    // 아마 여기서 EXPOSURE 이벤트를 발생시킬 겁니다.
    GrMapWindow(w);

    // 무한루프네요...-_-;
    // 이벤트가 한 번밖에 발생하지 않았으니 한번 출력하고 계속 서 있겠네요.
    for (;;)
    {
        // 발생한 이벤트를 잡아냅니다. 위에서 EXPOSURE이벤트를 발생시켰으니 여기서 잡겠죠.
        GrGetNextEvent(&event);

        // 발생한 이벤트의 종류에 따라 분류합니다.
        switch (event.type)
        {
            // 여기서 이벤트 별로 다른 처리를 해 줍니다.
            case GR_EVENT_TYPE_EXPOSURE:
           
            // 단순히 텍스트만 출력하네요. Hello World
            // GrText는 텍스트를 출력하는 함수인데, 인자로 출력할 윈도우(w)와
            // 텍스트를 그릴 방식(gc), 좌표(10,30), 출력될 내용(Hello World),
            // 출력될 내용의 길이(-1), 내용의 인코딩방식(GR_TFASCII)를 받습니다.
            // 알아둘 것은 ASCII인 경우는 길이를 -1로 넣으면 됩니다. 내부에서 길이를 구합니다.
            // 나중에 유니코드를 사용하실 때는 인코딩방식을 다르게 넣어주면 되겠죠.
            // 아까 위에서 전경색을 검정색으로 했으니 검정색 Hello World가 출력되겠네요.
            GrText(w, gc, 10, 30, "Hello World", -1, GR_TFASCII);
            break;
        }
    }
}

이상 helloworld.c 분석을 마치겠습니다.
여기까지 허접한 글을 읽어주셔서 감사합니다....^^;



 
 

Total 17
번호 제   목 글쓴이 날짜 조회
17 timer 사용하는 방법 입니다.. 토마토 08-28 18247
16 마이크로윈도우 nano-X api 간단 [tip] 토마토 09-01 20534
15 nano-x에서의 이벤트 처리 (1) 조규봉 01-24 23342
14 왕초보를 위한 Nano-X 5편 (freetype font) 냐옹이 01-02 21135
13 왕초보를 위한 Nano-X 4편 (한글 기본 폰트) 냐옹이 12-28 23952
12 왕초보를 위한 Nano-X 3편 (window 생성) 냐옹이 08-24 19151
11 왕초보를 위한 Nano-X 2편 (이미지 관련 함수 분… 냐옹이 08-11 15437
10 왕초보를 위한 Nano-X 1편 (helloworld.c 분석하기) 냐옹이 08-08 14988
9 microwindows 한글 TrueType fonts 출력하기 최고관… 06-16 14081
8 Cygwin 에서 Microwindows 컴파일 하기 (2) 채영훈 04-07 20389
7 메뉴구성 및 글자색 변경 참고 소스 (8) 장진혁 12-17 20720
6 한글 출력 방법 및 예제 소스 (2) 장진혁 12-13 14362
5 Keyboard Event 입력 처리 소스 장진혁 12-13 15882
4 이미지 출력 소스 장진혁 12-13 13917
3 Hello World 소스 장진혁 12-13 13220
2 Microwindows 0.90 설치 (1) 장진혁 12-13 17253
1 microwindows 한글 TrueType fonts 출력하기 (5) 김용오 12-16 15143


About korone.net | Copyright 2003 korone.net. All rights reserved.