GUIコール リファレンス マニュアル

目次

概要

アプリケーション関数
ウインドウ操作
描画関数
入力制御関数
クリップボード関数
ドラッグアンドドロップ関数
その他
サンプル
索引

概要

GUIで動作するアプリケーションを作成するには gc_〜 で定義される C 言語の関数を呼び出します(GUIコール)。
必要なファイルは gc.h (mpltype.h, cputype.h) と gc.a (kc.a) です。
以降でGUIコールに必要な型及び、個々の関数を説明します。

MPL で定義される型を以下に記述します。

型名:内容
HANDLE:資源のハンドル

GUIコール用に追加される型を以下に記述します。

typedef struct _RGB {
    unsigned char r ;
    unsigned char g ;
    unsigned char b ;
} RGB ;
typedef struct _RGB_IMG {
    unsigned long w ;
    unsigned long h ;
    RGB *rgb ;
} RGB_IMG ;
typedef struct _RGB_BUF {
    unsigned long type ;
    unsigned long w ;
    unsigned long h ;
    void *buf ;
} RAW_BUF ;
typedef struct _POS {
    long x ;
    long y ;
} POS ;
typedef struct _RECT {
    POS pos[2] ;    /* 左上原点で [0]左上 [1]右下 */
} RECT ;
	

関数

アプリケーション関数

gc_init(), gc_main(), gc_exit() の 3 つの関数は GUI アプリケーション全体を制御します。

int gc_init(void)

引数
有りません
戻り値
0 以外:成功
0:失敗
説明

GUIライブラリーを初期化します。
GUIコールを使う場合は最初にこれを呼び出してください。

void gc_main(void)

引数
有りません
戻り値
有りません
説明

GUIアプリケーションのイベント駆動を開始します。
この関数からは gc_exit() を呼び出してGUI処理を終了するまで戻ってきません。
この関数を呼び出す前に最低1つはウインドウを作成しておいてください。
なんの準備も無く呼び出すと無限ループします。

void gc_exit(void)

引数
有りません
戻り値
有りません
説明

GUIアプリケーションを終了し、ライブラリーを後始末します。
GUIアプリケーションを終了させる操作(例えばメニューやクローズボタン)のイベント処理で呼び出してください。
gc_init() の成功後、他の初期化に失敗して gc_main() を呼び出さない場合は直接これを呼び出してください。

int gc_pump(HANDLE hwnd)

引数
HANDLEhwnd:メッセージ処理を許可するウインドウ
戻り値
0 以外:成功
0:失敗(メッセージ処理終了)
説明

1回だけメッセージ処理を実行します。
引数が0の場合は普通に処理しますがウインドウハンドルを指定した場合はそのウインドウ及び子ウインドウ以外へのメッセージは処理せずに捨てます。

ウインドウ操作

以下の関数はウインドウを操作します。

void gc_get_root_into(long *width, long *height, long *aspect_w, long *aspect_h, long *rawbuf_type)

引数
long*width:スクリーンの幅を受け取る領域
long*height:スクリーンの高さを受け取る領域
long*aspect_w:ピクセルの水平アスペクト比を受け取る領域
long*aspect_h:ピクセルの垂直アスペクト比を受け取る領域
long*rawbuf_type:RAWバッファ形式
戻り値
有りません
説明

スクリーンの情報を取得します。

rawbuf_type は RAWBUF_X68K_1T と RAWBUF_X68K_4G と RAWBUF_X68K_16G の3種類の値を戻します。
それぞれの意味は「テキストVRAM(2色モード)」と「グラフィックVRAM(16色モード)」と「グラフィックVRAM(65536色モード)」です。
2色モードのパレットは固定値で0.黒 1.白です。
16色モードのパレットは固定値で以下の通りです。

NORGBNORGB
0000802550
112812812890128128
2255255255100255255
3128001100128
4255001200255
51281280131280128
62552550142550255
70128015646464

int gc_set_root_img(HIMG img)

引数
HIMGimg:ルートウインドウサイズのイメージ
戻り値
0 以外:成功
0:失敗
説明

ルートウインドウに壁紙を設定します。
指定したイメージはシステムが管理するので削除する必要はありません
※壁紙として使用中に削除した場合は壁紙が解除されます。

int gc_set_root_manager(HANDLE hwnd)

引数
HANDLEhwnd:ルートウインドウのマウスイベントを処理するウインドウ
戻り値
0 以外:成功
0:失敗
説明

ルートウインドウのマウスイベントを処理するウインドウを指定します。
指定したウインドウにはルートウインドウに対するマウスイベントがリダイレクトされるのでポップアップメニュー等、必要な機能拡張ができます。

HANDLE gc_window_open(HANDLE parent, const WINDOW_FUNC *func, const RECT *rect, unsigned long type)

引数
HANDLEparent:親ウインドウ。0 なら親ウインドウはルートウインドウ
const WINDOW_FUNC*func:イベント処理関数
const RECT*rect:親ウインドウに対するウインドウの配置
unsigned longtype:ウインドウのオプション設定
戻り値
0 以外:ウインドウのハンドル
0:失敗
説明

ウインドウを開きます。

rect の書式は3種類有り、そえぞれ意味が異なります。

全て 0:位置・サイズの両方をシステムに任せる(単純なランダム)
pos[0] のみ値指定し pos[1] は 0:pos[0] にはx=幅/y=高さ位置を指定し、位置はシステムに任せる
全て値指定:pos[0] には左上座標、pos[1] には右下座標を指定する

※ウインドウサイズのみをシステムに任せる事はできません。

ウインドウの動作は引数 func によってオープン時に決定します。
WINDOW_FUNC 型は各イベント発生時のコールバック関数のアドレスを羅列した物です。
処理が必要なコールバック関数はアドレスを設定し、他はNULLにしてください。
内容は以下の通りです。

typedef struct _WINDOW_FUNC {
    void (*on_window_open)(HANDLE hwnd) ;
    int  (*on_window_close)(HANDLE hwnd) ;
    void (*on_window_visible)(HANDLE hwnd, int show) ;
    void (*on_window_move)(HANDLE hwnd, const POS *pos) ;
    void (*on_window_size)(HANDLE hwnd, const POS *pos) ;
    void (*on_window_paint)(HANDLE hwnd, const RECT *rect) ;

    void (*on_mouse_enter)(HANDLE hwnd, const POS *pos) ;
    void (*on_mouse_leave)(HANDLE hwnd) ;
    void (*on_mouse_move)(HANDLE hwnd, const POS *pos) ;
    void (*on_mouse_ldown)(HANDLE hwnd, const POS *pos) ;
    void (*on_mouse_lup)(HANDLE hwnd, const POS *pos) ;
    void (*on_mouse_rdown)(HANDLE hwnd, const POS *pos) ;
    void (*on_mouse_rup)(HANDLE hwnd, const POS *pos) ;

    void (*on_keyboard_getfocus)(HANDLE hwnd) ;
    void (*on_keyboard_lostfocus)(HANDLE hwnd) ;
    void (*on_keyboard_push)(HANDLE hwnd, unsigned char ch) ;
    void (*on_keyboard_release)(HANDLE hwnd, unsigned char ch) ;
    void (*on_keyboard_char)(HANDLE hwnd, unsigned char ch) ;

    void (*on_menu)(HANDLE hwnd, const POS *pos) ;

    void (*on_drop)(HANDLE hwnd, int type, void *data, unsigned char opt_key) ;
} WINDOW_FUNC ;
	
void(*on_window_open)(HANDLE hwnd):オープン直後の処理
hwnd…対象のウインドウ
int(*on_window_close)(HANDLE hwnd):クローズ直前の処理
hwnd…対象のウインドウ
戻り値 0.closeをキャンセル !0.クローズする
void(*on_window_visible)(HANDLE hwnd, int show):ウインドウの表示状態が変った直後の処理
hwnd…対象のウインドウ
show…0.非表示化 !0.表示化
void(*on_window_move)(HANDLE hwnd, const POS *pos):ウインドウが移動した直後の処理
hwnd…対象のウインドウ
pos…移動位置
void(*on_window_size)(HANDLE hwnd, const POS *pos):ウインドウがリサイズした直後の処理
hwnd…対象のウインドウ
pos…サイズ
void(*on_window_paint)(HANDLE hwnd, const RECT *rect):描画要求
hwnd…対象のウインドウ
rect…描画が必要な矩形
void(*on_mouse_enter)(HANDLE hwnd, const POS *pos):マウスがウインドウ上に乗った直後の処理
hwnd…対象のウインドウ
pos…位置
void(*on_mouse_leave)(HANDLE hwnd):マウスがウインドウから離れた直後の処理
hwnd…対象のウインドウ
void(*on_mouse_move)(HANDLE hwnd, const POS *pos):マウスがウインドウ上を移動した直後の処理
hwnd…対象のウインドウ
pos…位置
void(*on_mouse_ldown)(HANDLE hwnd, const POS *pos):マウスの左ボタンを押した直後の処理
hwnd…対象のウインドウ
pos…位置
void(*on_mouse_lup)(HANDLE hwnd, const POS *pos):マウスの左ボタンを放した直後の処理
hwnd…対象のウインドウ
pos…位置
void(*on_mouse_rdown)(HANDLE hwnd, const POS *pos):マウスの右ボタンを押した直後の処理
hwnd…対象のウインドウ
pos…位置
void(*on_mouse_rup)(HANDLE hwnd, const POS *pos):マウスの右ボタンを放した直後の処理
hwnd…対象のウインドウ
pos…位置
void(*on_keyboard_getfocus)(HANDLE hwnd):ウインドウがキーフォーカスを得た直後の処理
hwnd…対象のウインドウ
void(*on_keyboard_lostfocus)(HANDLE hwnd):ウインドウがキーフォーカスを失った直後の処理
hwnd…対象のウインドウ
void(*on_keyboard_push)(HANDLE hwnd, unsigned char ch):ウインドウがキー押下を受け取った直後の処理
hwnd…対象のウインドウ
ch…キーコード
void(*on_keyboard_release)(HANDLE hwnd, unsigned char ch):ウインドウがキー開放を受け取った直後の処理
hwnd…対象のウインドウ
ch…キーコード
void(*on_keyboard_char)(HANDLE hwnd, unsigned char ch):ウインドウがキー入力を受け取った直後の処理
hwnd…対象のウインドウ
ch…キーコード
void(*on_menu)(HANDLE hwnd, const POS *pos):ウインドウメニューが要求された時の処理
hwnd…対象のウインドウ
pos…タイトルバーの右クリックされた位置(スクリーン座標)
void(*on_drop)(HANDLE hwnd, int type, void *data, unsigned char opt_key):データがドロップされた時の処理
hwnd…対象のウインドウ
type…データの種類
data…データ
opt_key…ドラッグされた時に押された特殊キー

ウインドウのタイプには以下の物が有り、必要なフラグを or で重ねて指示します。

WINDOW_TYPE_VISIBLE:オープン時に表示状態にする
WINDOW_TYPE_FRAMED:ウインドウマネージャーによるフレームを付加する
WINDOW_TYPE_RESIZEABLE:ウインドウをリサイズ可能にする
※WINDOW_TYPE_FRAMEDが必要
WINDOW_TYPE_ICONBTN:ウインドウをアイコン化可能にする
※WINDOW_TYPE_FRAMEDが必要
WINDOW_TYPE_ALL:上記全てのフラグをON

void gc_window_close(HANDLE hwnd)

引数
HANDLEhwnd:対象のウインドウ
戻り値
有りません
説明

ウインドウを閉じます。

void gc_window_remap(HANDLE hwnd, const RECT *rect, int zorder)

引数
HANDLEhwnd:対象のウインドウ
const RECT*rect:新たな配置矩形
intzorder:重なり状態 0.現状維持 1.最前面 -1.最奥
戻り値
有りません
説明

ウインドウの配置(位置・サイズ)を変更します。

void gc_window_visible(HANDLE hwnd, int show)

引数
HANDLEhwnd:対象のウインドウ
intshow:表示状態 0.非表示にする !0.表示する
戻り値
有りません
説明

ウインドウの表示状態を変更します。

void gc_window_invalidate(HANDLE hwnd, const RECT *rect)

引数
HANDLEhwnd:対象のウインドウ
const RECT*rect:無効化する矩形
戻り値
有りません
説明

ウインドウの表示を無効化し再描画イベントを発生させます。

void gc_window_drawclip(HANDLE hwnd, const RECT *rect)

引数
HANDLEhwnd:対象のウインドウ
const RECT*rect:描画を反映する矩形、NULLならクリップOFF
戻り値
有りません
説明

描画命令に対するクリッピング領域を設定します。
通常 on_window_paint() コールバック内では事前に要求矩形が設定済みで、かつ事後にリセットされます。
on_window_paint() 外での描画時、もしくは on_window_paint() の設定を上書きする場合に呼び出してください。

int gc_set_icon(HANDLE hwnd, const RGB_IMG *image)

引数
HANDLEhwnd:対象のウインドウ
const RGG_IMG*image:アイコン画像 NULLならデフォルト
戻り値
0 以外:成功
0:失敗
説明

ウインドウのアイコン(アイコン化時の画像)を設定します。

int gc_set_caption(HANDLE hwnd, const char *caption)

引数
HANDLEhwnd:対象のウインドウ
const char*caption:タイトル文字列 NULLなら空白
戻り値
0 以外:成功
0:失敗
説明

ウインドウのタイトル文字列を設定します。
ウインドウのタイトル文字列はフレームを持たないウインドウでは無意味です。

unsigned long gc_get_caption(HANDLE hwnd, char *buff, unsigned long buff_len)

引数
HANDLEhwnd:対象のウインドウ
char*buff:タイトル文字列を受け取る領域
unsigned longbuff_len:領域のサイズ
戻り値
タイトル文字列のサイズ
説明

ウインドウのタイトル文字列を取得します。

int gc_set_wls(HANDLE hwnd, void *ptr)

引数
HANDLEhwnd:対象のウインドウ
void*ptr:記憶させるポインタ
戻り値
0 以外:成功
0:失敗
説明

ウインドウ固有の情報として1つのポインタアドレスを記憶させます。

void* gc_get_wls(HANDLE hwnd)

引数
HANDLEhwnd:対象のウインドウ
戻り値
ウインドウ固有の情報(1つのポインタアドレス)
説明

ウインドウ固有の情報としての1つのポインタアドレスを取得します。
エラー終了時には NULL が戻りますがエラーと正常な NULL は区別が付ません。

HANDLE gc_get_parent(HANDLE hwnd)

引数
HANDLEhwnd:対象のウインドウ
戻り値
親ウインドウのハンドル
親がルートウインドウの場合は 0 が戻る
フレームウインドウは無視される
説明

ウインドウの親を取得します。

HANDLE gc_get_frame(HANDLE hwnd)

引数
HANDLEhwnd:対象のウインドウ
戻り値
フレームウインドウのハンドル
説明

フレームウインドウを取得します。
フレームウインドウを持たない場合は自身のハンドルを戻します。

HANDLE gc_get_client(HANDLE hwnd)

引数
HANDLEhwnd:対象のウインドウ
戻り値
ウインドウのハンドル
説明

フレームウインドウからクライアントウインドウを取得します。
フレームウインドウ以外を指定した場合は自身を戻します。

void gc_get_client_rect(HANDLE hwnd, RECT *rect)

引数
HANDLEhwnd:対象のウインドウ
RECT*rect:矩形を受け取る領域
戻り値
有りません
説明

ウインドウの矩形をクライアント座標系で戻します。
クライアント座標系は左上が(0, 0)で右下方向に増加する座標系です。

void gc_get_window_rect(HANDLE hwnd, RECT *rect)

引数
HANDLEhwnd:対象のウインドウ
RECT*rect:矩形を受け取る領域
戻り値
有りません
説明

ウインドウの矩形を親ウインドウの座標系で戻します。
このウインドウが親ウインドウのどの領域かを示します。

void gc_get_screen_rect(HANDLE hwnd, RECT *rect)

引数
HANDLEhwnd:対象のウインドウ
RECT*rect:矩形を受け取る領域
戻り値
有りません
説明

ウインドウの矩形をスクリーン座標系で戻します。
このウインドウがスクリーンのどの領域かを示します。

描画関数

以下の関数は描画処理をします。

void gc_set_color(HANDLE hwnd, const RGB *rgb)

引数
HANDLEhwnd:対象のウインドウ
const RGB*rgb:描画色
戻り値
有りません
説明

ウインドウに対する描画色を設定します。

void gc_get_color(HANDLE hwnd, RGB *rgb)

引数
HANDLEhwnd:対象のウインドウ
const RGB*rgb:描画色を受け取る領域
戻り値
有りません
説明

ウインドウに対する描画色を取得します。

void gc_set_xor(HANDLE hwnd, int flg)

引数
HANDLEhwnd:対象のウインドウ
intflg:描画属性 0.通常 1.XOR
戻り値
有りません
説明

ウインドウに対するXOR描画属性を設定します。

void gc_get_xor(HANDLE hwnd, int *flg)

引数
HANDLEhwnd:対象のウインドウ
int*flg:描画属性を受け取る領域
戻り値
有りません
説明

ウインドウに対するXOR描画属性を取得します。

void gc_draw_pixel(HANDLE hwnd, const POS *pos)

引数
HANDLEhwnd:対象のウインドウ
const POS*pos:描画位置
戻り値
有りません
説明

ウインドウに点を描画します。

void gc_draw_lines(HANDLE hwnd, const POS *pos, unsigned long nof_pos)

引数
HANDLEhwnd:対象のウインドウ
const POS*pos:線分座標の配列
unsigned longnof_pos:配列要素数
戻り値
有りません
説明

ウインドウに連続線分を描画します。

void gc_draw_rect(HANDLE hwnd, const RECT *rect)

引数
HANDLEhwnd:対象のウインドウ
const RECT*rect:描画矩形
戻り値
有りません
説明

ウインドウに矩形を描画します。

void gc_fill_rect(HANDLE hwnd, const RECT *rect)

引数
HANDLEhwnd:対象のウインドウ
const RECT*rect:描画矩形
戻り値
有りません
説明

ウインドウに中を塗りつぶした矩形を描画します。

int gc_copy_rect(HANDLE hwnd, const POS *pos, const RECT *src)

引数
HANDLEhwnd:対象のウインドウ
const POS*pos:コピー先の位置(左上座標)
const RECT*src:コピー元の矩形
戻り値
0 以外:成功
0:失敗
説明

ウインドウ状の矩形イメージを別な場所にコピーします。
コピー元、コピー先の両方の矩形がウインドウによりクリッピングされていない事が条件です。
部分的にでもクリッピングされている場合はコピーせずに処理が失敗します。

void gc_draw_text(HANDLE hwnd, const POS *pos, const char *s, const RECT *clip)

引数
HANDLEhwnd:対象のウインドウ
const POS*pos:描画位置(左上)
const char*s:描画文字列
const RECT*clip:描画許可矩形 NULL.クリップ無し
戻り値
有りません
説明

ウインドウに文字列を描画します。
clip を指定した場合は clip 範囲外にはみ出した部分は描画しません。

HANDLE gc_img_create(unsigned long w, unsigned long h)

引数
unsigned longw:横ピクセル数
unsigned longh:縦ピクセル数
戻り値
イメージハンドル
説明

イメージを作成します。
イメージはウインドウに描画するための画像データです。
描画用に最適化されているため関数を使って間接的に編集して使用します。

void gc_img_delete(HANDLE himg)

引数
HANDLEw:対象のイメージ
戻り値
有りません
説明

イメージを削除します。

void gc_img_update(HANDLE himg, const POS *pos, const RGB_IMG *image, const RECT *rect)

引数
HANDLEhimg:対象のイメージ
const POS*pos:イメージ上の出力先(左上)
const RGB_IMG*image:画像データ
const RECT*rect:画像データ上の入力矩形
戻り値
有りません
説明

イメージの内容を設定します。

int gc_img_copy(HANDLE himg_dest, const POS *pos, const HANDLE himg_src, const RECT *rect)

引数
HANDLEhimg_dest:コピー先イメージ
const POS*pos:コピー先イメージ上の出力先(左上)
const HANDLEhimg_src:コピー元イメージ
const RECT*rect:コピー元イメージの入力矩形
戻り値
0 以外:成功
0:失敗
説明

イメージからイメージへ内容をコピーします。

void gc_img_draw(HANDLE hwnd, const POS *pos, const HANDLE himg, const RECT *src)

引数
HANDLEhwnd:対象のウインドウ
const POS*pos:描画先(左上)
const HANDLEhimg:描画するイメージ
const RECT*src:描画するイメージの矩形
戻り値
有りません
説明

ウインドウにイメージを描画します。

void gc_raw_draw(HANDLE hwnd, const POS *pos, const RAW_BUF *raw_buf, const RECT *src)

引数
HANDLEhwnd:対象のウインドウ
const POS*pos:描画先(左上)
const RAW_BUF*raw_buf:描画するRAWイメージ
const RECT*src:描画するイメージの矩形
戻り値
有りません
説明

ウインドウにRAWイメージを描画します。
RAWイメージとはデバイスに依存したイメージデータの事です。
色データの変換処理が無い分高速ですがモードに応じたデータを渡す必要があります。
モードは gc_get_root_info() で取得できます。

入力制御関数

以下の関数は入力を制御します。

HANDLE gc_window_setfocus(HANDLE hwnd)

引数
HANDLEhwnd:対象のウインドウ
戻り値
変更前にフォーカスを所有していたウインドウ
説明

ウインドウにフォーカスを設定します。

void gc_set_mouse_type(int type)

引数
inttype:マウスの形状 0.非表示 1.矢印 2.時計
戻り値
有りません
説明

マウスカーソルの形状を設定します。

void gc_get_mouse_type(int *type)

引数
int*type:マウスの形状を受け取る領域
戻り値
有りません
説明

マウスカーソルの形状を取得します。
type に付いてはgc_set_mouse_type()を参照してください。

void gc_set_mouse_pos(const POS *pos)

引数
const POS*pos:マウスを移動するスクリーン座標
戻り値
有りません
説明

マウスカーソルの位置を設定します。

void gc_get_mouse_pos(POS *pos)

引数
POS*pos:マウスの位置を受け取る領域
戻り値
有りません
説明

マウスカーソルの位置(スクリーン座標)を取得します。

int gc_grab_mouse(HANDLE hwnd)

引数
HWNDhwnd:マウスを占有するウインドウ
戻り値
0 以外:成功
0:失敗
説明

指定したウインドウにマウスイベントを占有させます。

void gc_free_mouse(HANDLE hwnd)

引数
HWNDhwnd:マウスを占有している
戻り値
0 以外:成功
0:失敗
説明

マウスイベントの占有を止めます。

クリップボード関数

以下にクリップボードを操作する関数を記述します。

int gc_clip_set(int type, void *data, unsigned long size)

引数
inttype:データタイプ
void*data:データ
unsigned longsize:データサイズ
戻り値
0 以外:成功
0:失敗
説明

指定データをクリップボードに貼り付けます。
元々有ったデータは新たなデータにより上書きされます。

type には以下の種類が有ります。

CLIP_NULL:
CLIP_TEXT:文字列
CLIP_IMG:画像(RGB_IMG)
CLIP_PATH:ファイルパス(空白で区切られた複数のフルパス文字列)

画像はRGB_IMG構造体に続けて実データを配置したひと固まりの形式です
ファイルパスは文字列と同じですが複数のパスを含む場合は各パスが空白で区切られます

unsigned long gc_clip_get(int *type, void *data, unsigned long size)

引数
int*type:データタイプを受け取る領域
void*data:データを受け取る領域
unsigned longsize:データを受け取る領域のサイズ
戻り値
0 以外:クリップボードデータのサイズ
0:失敗
説明

クリップボードのデータを取り出します。
size が不足した場合は size 分だけとりだします。

void gc_clip_inf(int *type, unsigned long *size)

引数
int*type:データタイプを受け取る領域
unsigned long*size:データサイズを受け取る領域
戻り値
ありません
説明

クリップボードのデータ情報を取り出します。

ドラッグアンドドロップ関数

以下にドラッグアンドドロップの関数を記述します。

int gc_drag(int type, void *data, unsigned long size)

引数
inttype:データタイプ
void*data:データ
unsigned longsize:データサイズ
戻り値
0 以外:成功
0:失敗
説明

指定データをドラッグ状態にします。
ドラッグしたデータは任意のウインドウでドロップできますが、適切な応答が得られるかはドロップしたウインドウしだいです。
データのタイプ等はクリップボードに準拠します。

その他

以下にその他の関数を記述します。

void gc_draw_reserve(void)

引数
有りません
戻り値
有りません
説明

イベント処理タスクと別タスクで描画処理をする場合に on_paint() イベントとの競合を避けます。
描画処理が終わったらgc_draw_release()を呼び出してロックを解除してください。

void gc_draw_release(void)

引数
有りません
戻り値
有りません
説明

on_paint() イベントに対する排他制御を解除します。

int gc_get_arg(int *argc, char **argv, long *x, long *y, long *w, long *h)

引数
intargc:main()の引数
char**argv:main()の引数
long*x:左上のX座標
long*y:左上のY座標
long*w:
long*h:高さ
戻り値
0 以外:成功
0:失敗
説明

guiアプリ共通のコマンドラインオプションを解析し、値を取得した後に argc/argv から削除します。
x, y, w, h のうち不要なものには NULL を指定できます。
またオプションが指定されていなかった場合は -1 の値が代入されます。

オプションは以下の通りです

-wx数字:左上のX座標
-wy数字:左上のY座標
-ww数字:ウインドウの幅
-wh数字:ウインドウの高さ

指定されたコマンドラインオプションに不備が有った場合は失敗します。

int gc_cnv_arg(long x, long y, long w, long h, RECT *rect)

引数
longx:左上のX座標
longy:左上のY座標
longw:
longh:高さ
RECT*rect:gc_window_openに渡すパラメータを受け取る領域
戻り値
0 以外:成功
0:失敗
説明

x, y, w, h のパラメータからgc_window_openのパラメータを作成します。
x, y, w, h のうち指定しないものには -1 を指定する事でシステムにまかせられますが、組み合わせに制限があります。
制限に付いてはgc_window_openを参照してください。

int gc_calc_size(const RECT *rect, long *w, long *h)

引数
const RECT*rect:矩形
long*w:幅を受け取る領域
long*h:高さを受け取る領域
戻り値
0 以外:成功
0:失敗
説明

矩形の幅と高さを計算します。

const RECT *gc_calc_rect(long x, long y, long w, long h, RECT *rect)

引数
longx:左上のX座標
longy:左上のY座標
longw:
longh:高さ
RECT*rect:矩形を受け取る領域
戻り値
矩形
説明

座標値等から矩形を計算します。

int gc_calc_fit(const RECT *target_rect, RECT *rect)

引数
const RECT*target_rect:最終的な配置
RECT*rect:出力矩形に合わせたい矩形(in/out)
戻り値
0 以外:成功
0:失敗
説明

rectの内容を縦横比を損なわずにtarget_rectいっぱいに合わせて書き換えます。
矩形の縦横比が異なる場合は全体がtarget_rect内に収まり、かつ中心に配置されます。

int gc_rgb_stretch(RGB_IMG *image_dest, const RECT *rect_dest, const RGB_IMG *image_src, const RECT *rect_src)

引数
RGB_IMG*image_dest:出力先の画像データ
const RECT*rect_dest:出力先の矩形
const RGB_IMG*image_src:入力元の画像データ
const RECT*rect_src:入力元の矩形
戻り値
0 以外:成功
0:失敗
説明

RGB_IMG形式の画像データをリサイズします。
リサイズ比は縦横別々に指定可能です。

サンプル

以下はサンプルプログラムです。

#include <stdio.h>
#include <string.h>
#include <gui/gc.h>

int _on_window_close(HANDLE hwnd)
{
    /* GUI終了 */
    gc_exit();

    /* クローズ許可 */
    return 1;
}

void _on_window_paint(HANDLE hwnd, const RECT *rect)
{
    POS pos;
    RGB rgb ;

    /* 背景塗りつぶし */
    rgb.r=rgb.g=rgb.b=255;
    gc_set_color(hwnd, &rgb);
    gc_fill_rect(hwnd, rect);

    /* Hello world. の描画 */
    rgb.r=rgb.g=rgb.b=0;
    gc_set_color(hwnd, &rgb);
    pos.x=pos.y=0;
    gc_draw_text(hwnd, &pos, "Hello world.", NULL);
}

int main(int argc, char *argp[])
{
    WINDOW_FUNC func;
    RECT rect;
    int rc=0;

    /* GUI初期化 */
    if (!gc_init()) {
        fprintf(stderr, "can't init gui.\n");
        return rc;
    }

    /* ウインドウ作成 */
    memset(&func, 0, sizeof(func));
    func.on_window_close=_on_window_close;
    func.on_window_paint=_on_window_paint;
    rect.pos[0].x=rect.pos[0].y=100;
    rect.pos[1].x=rect.pos[1].y=200;
    if (gc_window_open(0, &func, &rect, WINDOW_TYPE_ALL)) {
        rc=1;

        /* GUI開始 */
        gc_main();
    }
    else {
        fprintf(stderr, "can't open window.\n");

        /* GUI後始末 */
        gc_exit();
    }

    /* 終了 */
    return rc;
}
	

索引

アプリケーション関数
gc_init
gc_main
gc_exit
gc_pump

ウインドウ操作
gc_get_root_info
gc_set_root_img
gc_set_root_manager
gc_window_open
gc_window_close
gc_window_remap
gc_window_visible
gc_window_invalidate
gc_window_drawclip
gc_set_icon
gc_set_caption
gc_get_caption
gc_set_wls
gc_get_wls
gc_get_parent
gc_get_frame
gc_get_client
gc_get_client_rect
gc_get_window_rect
gc_get_screen_rect
描画関数
gc_set_color
gc_get_color
gc_set_xor
gc_get_xor
gc_draw_pixel
gc_draw_lines
gc_draw_rect
gc_fill_rect
gc_copy_rect
gc_draw_text
gc_img_create
gc_img_delete
gc_img_update
gc_img_copy
gc_img_draw
gc_raw_draw
入力制御関数
gc_window_setfocus
gc_set_mouse_type
gc_get_mouse_type
gc_set_mouse_pos
gc_get_mouse_pos
gc_grab_mouse
gc_free_mouse

クリップボード関数
gc_clip_set
gc_clip_get
gc_clip_inf

ドラッグアンドドロップ関数
gc_drag

その他
gc_draw_reserve
gc_draw_release
gc_get_arg
gc_cnv_arg
gc_calc_size
gc_calc_rect
gc_calc_fit
gc_rgb_stretch
inserted by FC2 system