MNW 1.0 for PocketBSD
Programmers' Gudie

目次


MNWについて

MNWは軽量簡易なウィンドウライブラリです.
リソースが乏しい環境で, イベント駆動スタイルのプログラミングを実現します.

MNWの設計目標
イベント駆動スタイルのためのプリミティブなインタフェースを提供します. プリミティブなため, プログラマが実行時の動作を意識しなければなりませんが, 逆にプログラマが気を付けることによって,効率的なプログラムができます. MNWの特徴

考え方と用語

ウィンドウ

イベント

イベント配送

イベント委譲と継承

ダイアログ

コンポ

フォーカス


コード片

ウィンドウの登録・削除

  mnwWindow win;
  mnwRect r;

  mwnRect_SetXYWH(&r,                     /* self */
                  10, 10, 100, 100);      /* ウィンドウの位置,サイズ */
  /* 登録 */
  mnwWindow_Register((mnwWindow *)&win,                     /* self */
                     (mnwWindowCallback)mnwWindow_Callback, /* コールバック */
                     (mnwWindow *)&gRootWin,                /* 親ウィンドウ */
                     &r);                                   /* 領域 */

  /* 削除 */
  mnwWindow_UnRegister((mnwWindow *)&win);

イベントの生成・送信

  mnwEvent e;

  /* 生成 */
  mnwEvent_SetAll(&e,              /* self */
                  kEvent_Redraw,   /* 種類 */
                  nil, 0, 0);      /* 引数 */
  /* 送信 */
  mnwEvent_SendTo(&e,              /* self */
                  &win);           /* 宛先 */

イベントループ

    while ((event = mnwEvent_GetNext(true)) != nil){  /* 次のイベント */
        if (!mnwEvent_Translate(event)){              /* 変換 */
            mnwEvent_Dispatch(event);                 /* 配送 */
        }
    }

コールバック

bool
mnwButton_Callback(mnwButton *self, mnwEvent *event)
{
    mnwEvent e;

    switch (event->type){
        case kEvent_Create:
        mnwWindow_Callback((mnwWindow *)self, event); /* super */
        return mnwButton_Initialize(self);
        break;
        case kEvent_Destroy:
        mnwWindow_Callback((mnwWindow *)self, event); /* super */
        return mnwButton_Finalize(self);
        break;
        case kEvent_AddChild:
        case kEvent_RemoveChild:
        return false;
        break;
    <略>
        case kEvent_KeyDown:
        return mnwButton_KeyDown(self, event);
        break;
        default:
        /* superにdelegate */
        return mnwWindow_Callback((mnwWindow *)self, event);
        break;
    }

    /* イベントを処理しない */
    return false;
}


イベントの種類

汎用イベント
    kEvent_None
    kEvent_Create
    kEvent_Destroy
    kEvent_Show
    kEvent_Hide
    kEvent_SetFocus
    kEvent_GainFocus
    kEvent_LostFocus
    kEvent_Timer
    kEvent_KeyDown
    kEvent_KeyUp
    kEvent_Command
    kEvent_Redraw
    kEvent_Quit
    kEvent_SetRect
    kEvent_SetParent
    kEvent_AddChild
    kEvent_RemoveChild
    kEvent_SetForeColor
    kEvent_SetBackColor
    kEvent_GetRect
    kEvent_SetID
    kEvent_GetID
    kEvent_SetOption
ダイアログ関係イベント
    kEvent_SetTabStop
    kEvent_DoModal
    kEvent_EndModal
クリップボード関係イベント
    kEvent_Cut
    kEvent_Paste
    kEvent_Copy
    kEvent_Clear
コンポ関係イベント
    kEvent_SetFont
    kEvent_SetAlign
    kEvent_SetStyle
    kEvent_SetBuffer
    kEvent_SetText
    kEvent_UnsetText
    kEvent_InsertText
    kEvent_SetCommand
    kEvent_GetResult
    kEvent_SetCursor
    kEvent_SetMultiLine
    kEvent_SetPixmap
    kEvent_GainFocusNotify
    kEvent_LostFocusNotify
    kEvent_ChangedNotify

コンポの種類

ラベルコンポ

ボタンコンポ

リストコンポ

エディットコンポ

NOTE: 書きかけ


プログラミング上の注意

$Id: mnwapi.html,v 1.1.1.1 1999/02/28 06:47:50 furukawa Exp $

Copyright (c) 1998 FURUKAWA Yo. All rights reserved.
E-mail: you@ss.iij4u.or.jp