/* WMGRAPH Reference

WMGRAPH Reference


Graphics functions based on Win32 metafiles in C++ Languages

Version 1.13.09.10.06

developed by

Kenji MATSUMORI, Hitomi OHTAKE, Ryoji YANASE and Hiroshi FUKUDA

School of Administration and Informatics, University of Shizuoka

(since 1996)


目次


はじめに目次へ

VC++4.0での使い方

VC++5.0での使い方

VC++6.0での使い方

VC++7.0(.NET)での使い方

VC++7.1(.NET 2003)での使い方

Visual Studio 2005(VC++8.0)での使い方

Visual Studio 2008での使い方

Visual Studio 2010での使い方


プログラム例目次へ

簡単なサンプルプログラム集

コピー & ペーストしてお使い下さい(拡張子はcpp).


メイン関数と標準入出力関数目次へ

インクルードファイルについて

main関数

バッファド・コンソール入出力(MSC準拠)

プロセス制御


モード,環境目次へ

画面の描画は_setactivepage関数が呼ばれた時のみ.



int _countpage(int type); 
  /*
    使用中のグラフィックス・ページ,又はイメージ・メモリ数を返す.

    引数
    type   数えたいページの種類.以下のいずれか.
           PAGETYPE グラフィックス・ページ
           FULLSCREENTYPE フルスクリーンページ
           MEMORYTYPE イメージメモリ
           BMAPTYPE   _bmap型イメージメモリ

    戻り値 
    使用中のグラフィックス・ページ,又はイメージ・メモリ数を返す.

   【目次へ】
  **



int _getactivepage(void); 
  /*
    現在アクティブなグラフィックス・ページ,又はイメージ・メモリ番号を返す.

    戻り値 
    現在アクティブなグラフィックス・ページ,又はイメージ・メモリ番号.

    互換性 
    MSC準拠.戻り値の型が short -> int

   【目次へ】
  **



int _getcommandline(char *cmd);
  /*
    コマンドライン又は起動時にドロップされたファイル名を取得します.

    引数
    cmd コマンドライン又は起動時にドロップされたファイル名が格納される.

    戻り値 
    0 = コマンドライン,1=ドロップされたファイル名.

   【目次へ】
  **



int _hidefullscreen();
  /*
    フルスクリーン・ページを隠します.

    戻り値
    隠されたフルスクリーン・ページ数.

   【目次へ】
  **



int _newpage(int page, const char *title, double x, double y, double w, double h, 
             int parent=0, int style=0);
int _newpage(int page, COLORREF bkcolor=RGB(0,0,0), int style=0);
  /*
    新しいグラフィックス・ページ(ウインドウ)を生成する.
    
    引数
    page   生成するグラフィックス・ページ(ウインドウ)の番号(>0,<4000)
           注1)番号0はコンソール・ウインドウを表すので使用不可.
           注2)引数が3つ以下の場合は,タイトルバーや境界をもたない
              フルスクリーンウインドウを生成する.
    title  ウインドウのタイトル文字列
    x, y   ウインドウの位置(左上隅の座標)
    w, h   ウインドウの幅,高さ.
           wが正なら,ウインドウの幅が,負なら描画領域の幅が|w|となる.
           hが正なら,ウインドウの高さが,負なら描画領域の高さが|h|となる.
    parent (省略可)
           parent & 1 == 0 ページをコンソールの子ウインドウにする.
                      != 0 ページを親ウインドウにする.
           parent & 2 == 0 ページを表示しない.
                      != 0 ページを表示する.
           parent & 4 == 0 ページにダイレクトに描画する.
                      != 0 ページに描画用子ウインドウを貼付てそこに描画する.
                           描画用子ウインドウのHWNDは_gethwndc関数で取得できる.
           parent & 8 == 0 標準メニュー.
                      != 0 空メニュー.
           省略時はparent=0,すなわち,ページをコンソールの子ウインドウにして
           表示し,ダイレクトに描画,標準メニュー.
    bkcolor (省略可)
           フルスクリーンの場合の背景色
    style (省略可)
           ウインドウスタイル(CreateWindow の dwStyle).
           parent & 4 != 0 の時は描画用子ウインドウに適用される.

    戻り値
    成功1,失敗0.
    
    【目次へ】
  **



int _rmpage(int page);
  /*
    グラフィックス・ページ(ウインドウ)を破棄する.
    
    引数
    page   破棄するグラフィックス・ページ(ウインドウ)の番号(>0,<4000)
           番号0はコンソール・ウインドウを表すので使用不可.

    戻り値
    成功1,失敗0.
    
    【目次へ】
  **



int _scrollpage(int page, double x, double y);
  /*
    グラフィックス・ページ(ウインドウ)の原点を変更(スクロール)する.
    
    引数
    page   グラフィックス・ページ(ウインドウ)の番号(>0)
    x, y   表示原点(左上隅の座標).
   
    戻り値
    成功1,失敗0.
    
    【目次へ】
  **



void _setaccel(HWND hWnd, HACCEL hAccTable);
   /*
     メニューのアクセラレータテーブルを登録する.

    引数
    hWnd      メニューをもつウインドウのハンドル.
    hAccTable アクセラレータのハンドル
             (WIN32 API LoadAccelerators関数を参照)
    
    使用例
    _setaccel(hWnd,LoadAccelerators(hInst,MAKEINTRESOURCE(IDR_ACCELERATOR1)));

    【目次へ】
   **



int _setactivepage(int page, int update=0);
  /*
    pageで指定されるグラフィックス・ページ,又はイメージ・メモリを
    アクティブ(書き込み対象)にする.
    pageが現在アクティブなグラフィックス・ページ番号と同一の場合は,
    そのグラフィックス・ページの描画をおこなう.

    引数
    page   アクティブにするグラフィックス・ページ,
           又はイメージ・メモリの番号.
    update (省略可)0ならばpageがグラフィックスページの場合に
           画面を更新しない.0以外ならば,更新する.
           省略時は,画面を更新しない.
    
    戻り値
    成功1,失敗0.
    
    互換性
    MSC準拠.戻り値の型が short far -> int,引数の型が short -> int
   
    【目次へ】
  **



void _setconsolefont(int size=-1);
  /*
    コンソールのフォントの大きさを変更する.
    
    引数
    size (省略可)フォントの大きさ.次の何れか.
         -1 小さいフォント
          0 デフォルトのフォント
          1 大きいフォント
  */

void _setconsolefont(char *out=WMGRAPH_FONT_NAME, char *in=NULL);
  /*
    コンソールのフォントを変更する.
    
    引数
    out   (省略可)標準出力のフォント名. "MS 明朝"など.
    in    (省略可)標準入力のフォント名. "MS 明朝"など.
    
    
    変更したくない引数はNULLポインタにして下さい.
   
    【目次へ】
  **



void _setconsolefontbld(int out=0, int in=0);
  /*
    コンソールのフォントの太さを変更する.
    
    引数
    out (省略可)標準出力のフォントの太さ.1=bold,0=normal
    in  (省略可)標準入力のフォントの太さ.1=bold,0=normal
   
    【目次へ】
  **



void _setconsolefontcolor(COLORREF out=WMGRAPH_COLOR_STDOUT, COLORREF in=WMGRAPH_COLOR_STDIN);
  /*
    コンソールのフォントの色を変更する.

    引数
    out (省略可)標準出力のフォントの色.
    in  (省略可)標準入力のフォントの色.
   
    【目次へ】
  **



void _setconsolefontit(int out=0, int in=0);
  /*
    コンソールのフォントの傾斜を変更する.

    引数
    out (省略可)標準出力のフォントの傾斜.1=italic,0=normal
    in  (省略可)標準入力のフォントの傾斜.1=italic,0=normal
   
    【目次へ】
  **



void _setconsolefontsize(int out=WMGRAPH_FONT_NORMAL, int in=WMGRAPH_FONT_NORMAL);
  /*
    コンソールのフォントの大きさを変更する.
    大きさの単位は,標準の大きさが15である単位.

    引数
    out (省略可)標準出力のフォントの大きさ.
    in  (省略可)標準入力のフォントの大きさ.
   
    【目次へ】
  **



void _setconsolefontst(int out=0, int in=0);
  /*
    コンソールのフォントの打ち消し線を変更する.

    引数
    out (省略可)標準出力のフォントの打ち消し線.1=有,0=無
    in  (省略可)標準入力のフォントの打ち消し線.1=有,0=無
   
    【目次へ】
  **



void _setconsolefontul(int out=0, int in=0);
  /*
    コンソールのフォントの下線を変更する.

    引数
    out (省略可)標準出力のフォントの下線.1=有,0=無
    in  (省略可)標準入力のフォントの下線.1=有,0=無
   
    【目次へ】
  **



void _setconsolefontup(int out=0, int in=0);
  /*
    コンソールのフォントのベースラインを変更する.単位はフォントの大きさと同じ.
    
    引数
    out (省略可)標準出力のフォントのベースライン.
         正なら上,負なら下方向ベースラインを移動する.
    in  (省略可)標準入力のフォントのベースライン.
         正なら上,負なら下方向ベースラインを移動する.
   
    【目次へ】
  **



void _setconsolelimit(int limit);
  /*
    コンソールに出力できる文字数をKB単位で指定する.
    デフォルトはWMGRAPH_TEXT_LIMIT=256KB.
    
    引数
    limit コンソールに出力できる文字数(KB).
   
    【目次へ】
  **



void _setcursor(const char *type=IDC_ARROW);
//void _setcursor(LPWSTR type = IDC_ARROW);
  /*
    マウスカーソルの形を設定する.
    
    引数
    type (省略可)マウスカーソルの形.次の何れか.
       IDC_APPSTARTING  Standard arrow and small hourglass
       IDC_ARROW       (省略時)Standard arrow
       IDC_CROSS       Crosshair
       IDC_IBEAM       Text I-beam
       IDC_ICON        Windows NT only: Empty icon
       IDC_NO          Slashed circle
       IDC_SIZE        Windows NT only: Four-pointed arrow
       IDC_SIZEALL     Same as IDC_SIZE
       IDC_SIZENESW    Double-pointed arrow pointing northeast and
                       southwest
       IDC_SIZENS      Double-pointed arrow pointing north and south
       IDC_SIZENWSE    Double-pointed arrow pointing northwest and
                       southeast
       IDC_SIZEWE      Double-pointed arrow pointing west and east
       IDC_UPARROW     Vertical arrow
       IDC_WAIT        Hourglass
   
    【目次へ】
  **



int _setpage(int page, const char *title); 
int _setpage(int page, const char *title, double x, double y, double w, double h); 
  /*
    グラフィックス・ページ,又はコンソールのタイトル,位置,大きさを設定.
    
    引数
    page   グラフィックス・ページ番号(0ならばコンソール)
    title  ウインドウのタイトル文字列
    x, y   ウインドウの位置(左上隅の座標)
    w, h   ウインドウの幅,高さ
    
    戻り値
    成功1,失敗0.
   
    【目次へ】
  **



int _setpagecenter(int page, const char *title=NULL, double w=0, double h=0);
  /*
    グラフィックス・ページ,コンソールのタイトル,大きさを設定.
    ウインドウは画面中央に配置される.

    引数
    page   グラフィックス・ページ番号(0ならばコンソール)
    title  (省略可)ウインドウのタイトル文字列
    w, h   (省略可)ウインドウの幅,高さ
    
    戻り値
    成功1,失敗0.
   
    【目次へ】
  **



int _setpagepos(int page, double x, double y);
  /*
    グラフィックス・ページの大きさを変えず位置を変更.
    
    引数
    page   グラフィックス・ページ番号(0ならばコンソール)
    x, y   ウインドウの位置.
    
    戻り値
    成功1,失敗0.
   
    【目次へ】
  **



int _setpagesize(int page, double w, double h);
  /*
    グラフィックス・ページの位置を変えず大きさを変更.
    
    引数
    page   グラフィックス・ページ番号(0ならばコンソール)
    w, h   ウインドウの幅,高さ
           wが0ならば,幅不変.
           w>0ならば,ウインドウの幅がwになる.
           w<0ならば,描画領域の幅が|w|になる.
           hについても同様.
    
    戻り値
    成功1,失敗0.
   
    【目次へ】
  **



void _setpagetop(int page, int active=0);
  /*
    グラフィックス・ページを画面表面へもってくる.
    
    引数
    page   グラフィックス・ページ番号(0ならばコンソール)
    active (省略可)
           0ならばページをアクティブにしない.
           1ならばページをアクティブにする.
   
    【目次へ】
  **



int _statusbar(int page, const char *format, ...);
  /*
    ステータス・バーに文字列を書き込む.
    
    引数
    page   グラフィックス・ページ番号(0ならばコンソール)
           コンソールのステータスバーは常に表示されているが,
           グラフィックス・ページのステータスバーは,初めて文字列を
           書き込むときに生成される.
    format printfと同じように文字列を指定する.
   
    【目次へ】
  **



int _statusbar_get(int page, char *txt);
  /*
    ステータス・バーの文字列を取得する.
    
    引数
    page   グラフィックス・ページ番号(0ならばコンソール)
    txt    ステータスバーの文字列が格納される.
   
    【目次へ】
  **



HWND _statusbar_hwnd(int page);
  /*
    ステータス・バーのウインドウ・ハンドルを取得する.
    
    引数
    page   グラフィックス・ページ番号(0ならばコンソール)
   
    戻り値
    ステータス・バーのウインドウ・ハンドル.取得できない場合はNULLを返す.

    【目次へ】
  **



void _statusbar_progress(int page, double p, double p_min=0, double p_max=1);
  /*
    ステータス・バーにプログレス・メータを表示する.
    
    引数
    page   グラフィックス・ページ番号(0ならばコンソール)
    p      p_minを最小,p_maxを最大とした■■□□□のような進捗の割合.
           p==p_minの時は□を表示しない.
    p_pmin (省略可)pの最小値.省略時は0.
    p_pmax (省略可)pの最大値.省略時は1.

    【目次へ】
  */

void _statusbar_progress(int page, const char *format, ...);
  /*
    ステータス・バーのプログレス・メータ部分に文字列を表示する.
    
    引数
    page   グラフィックス・ページ番号(0ならばコンソール)
    format printfと同じように文字列を指定する.

    【目次へ】
  **



void _statusbar_time(const char *msg="");
  /*
    コンソールにプログラム開始からの経過時間を表示する.
    
    引数
    msg   時間とともに表示する文字列

    【目次へ】
  **

  

情報関数目次へ




int _getdpix(void);
  /*
    ディスプレーのインチ当たりピクセル数(X方向)を得る.
    
    戻り値
    インチ当たりピクセル数(X方向).
    
     【目次へ】
  **



int _getdpiy(void);
  /*
    ディスプレーのインチ当たりピクセル数(Y方向)を得る.
    
    戻り値
    インチ当たりピクセル数(Y方向).
  
    【目次へ】
  **



int _getdx(void);
  /*
    ウインドウのX方向の枠の幅(左の枠の幅+右の枠の幅)を得る.
    
    戻り値
    ウインドウのX方向の枠の幅(左の枠の幅+右の枠の幅).
  
    【目次へ】
  **



int _getdy(void);
  /*
    ウインドウのY方向の枠の高さ(上の枠の高さ+下の枠の高さ)を得る.
    
    戻り値
    ウインドウのY方向の枠の長さ(上の枠の高さ+下の枠の高さ).
  
    【目次へ】
  **



int _getdys(void);
  /*
    ステータスバーの高さを得る.
    
    戻り値
    ステータスバーの高さ.
  
    【目次へ】
  **



HINSTANCE _gethinst();
  /*
    wmgraphのインスタンスハンドルを得る.

    戻り値
    インスタンスハンドル.
  
    【目次へ】
  **



HWND _gethwnd(int page);
  /*
    グラフィックス・ページ番号からウインドウ・ハンドルを得る.pageが0なら,コンソール.

    引数
    page   グラフィックス・ページ番号(0ならばコンソール)
    
    戻り値
    成功した場合はウインドウ・ハンドル,失敗した場合はNULL.
  
    【目次へ】
  **



HWND _gethwndc(int page);
  /*
    グラフィックス・ページ番号から描画用子HWND(_newpage参照)を得る.
    pageが0ならコンソールのエディットウインドウのHWNDを得る.

    引数
    page   グラフィックス・ページ番号(0ならばコンソール)
    
    戻り値
    成功した場合はウインドウ・ハンドル,失敗した場合はNULL.
  
    【目次へ】
  **



int _getpage(HWND hWnd);
  /*
    ウインドウ・ハンドルからグラフィックス・ページ番号を得る
    
    引数
    hWnd   ウインドウ・ハンドル
    
    戻り値
    成功した場合はグラフィックス・ページ番号(0ならばコンソール),
    失敗した場合は-1を返す.
  
    【目次へ】
  **
  
以下はWinAPIの簡単な情報関数
GetSystemMetrics(SM_CXSCREEN) 画面の巾
GetSystemMetrics(SM_CYSCREEN) 画面の高さ
SetFocus(HWND hWnd)           ウインドウにフォーカス
GetWindowRect(HWND hWnd, RECT *rect) ウィンドウの大きさ
GetClientRect(HWND hWnd, RECT *rect) 描画領域の大きさ 
ScreenToClient(HWND hWnd, POINT *point); 絶対座標を座標変換
ClientToScreen(HWND hWnd, POINT *point); 絶対座標に座標変換
【目次へ

描画目次へ

  座標は全てピクセル単位でdouble型で指定.



int _arc(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4);
  /*
    アクティブなグラフィックス・ページに楕円の弧を現在の前景色で描く.
    弧の中心は境界になる矩形の中心.この矩形は点(x1,y1)と
    (x2,y2)で定義される.弧の始点は弧の中心から(x3,y3)を
    通ってのびる線と弧の交点.弧は弧の中心に対して左回りに描
    かれ,弧の中心から(x4,y4)を通ってのびる線と弧の交点が終点
    となる.弧は閉じた領域でないため,塗りつぶすことはできない.
    
    引数
    x1, y1 境界になる矩形の左上の角
    x2, y2 境界になる矩形の右下の角
    x3, y3 開始ベクトルの2番目の点(境界になる矩形の中心が最初の点)
    x4, y4 終了ベクトルの2番目の点(境界になる矩形の中心が最初の点)
    
    戻り値
    成功すると0以外の値.それ以外の場合には0を返す.
    
    互換性
    MSC準拠.戻り値の型が short far -> int,座標が short -> double
    
    【目次へ】
  **



void _clearscreen(int area=_GVIEWPORT);
  /*
    アクティブなグラフィックス・ページの対象となる領域を消去し,
    その領域を現在の背景色で塗りつぶす.
    
    引数
    area  (省略可)消去する領域.次の定数の何れかを指定.
          _GCLEARSCREEN  アクティブなグラフィックス・ページと
                         コンソールウィンドウ
          _GVIEWPORT     (省略時)アクティブなグラフィックス・ページ
          _GWINDOW       コンソールウィンドウ

          _GNOUPDATE     グラフィックス・ページを更新したくない場合に,
                         _GCLEARSCREEN,_GVIEWPORTとあわせて(ORで)
                         指定する.
    互換性
    MSC準拠.戻り値の型が void far -> void,引数の型が short -> int
    
    【目次へ】
  **



int _ellipse(int control, double x1, double y1, double x2, double y2);
int _ellipse(double x1, double y1, double x2, double y2);
  /*
    アクティブなグラフィックス・ページに
    楕円または円を現在の前景色で描く.
    楕円の中心は座標点(x1,y1)と(x2,y2)で定義される矩形の中心.
    矩形が点,垂直線,または水平線を表している場合には,図形の描画はされない.
    
    引数
    control (省略可)塗りつぶしフラグ
      以下の定数のいずれかを指定します.
            定数           意味
            _GFILLINTERIOR 現在のカラーと塗りつぶしマスクを使用して,
                           楕円を塗りつぶす
            _GBORDER       楕円を塗りつぶさない(省略時)
    x1, y1  境界の矩形の左上の角
    x2, y2  境界の矩形の右下の角
    
    戻り値
    成功1失敗0.
    
    互換性
    MSC準拠.戻り値の型が short far -> int,controlの型がshort -> int
    
    【目次へ】
  **



int _floodfill(double x, double y, COLORREF boundary);
  /*
    アクティブなグラフィックス・ページの現在のカラー
    (前景色は_settextcolor,背景色は_setbkcolorで設定された色)と
    塗りつぶしマスク(_setfillmaskで設定)を使用して
    表示領域を塗りつぶす.座標点(x,y)から塗りつぶしを開始.
    開始位置が図形の内側にあると内部が塗りつぶされ,
    外側にあるとバックグラウンドが塗りつぶされる.
    開始位置は塗りつぶされる図形の内側か外側になければならず,
    図形の境界上にあってはならない.
    塗りつぶしはすべての方向に向かって,
    boundaryで指定されたカラーの境界まで行われる.
    
    引数
    x, y     開始位置
    boundary 塗りつぶす領域の境界のカラー
    
    戻り値
    塗りつぶしに成功すると0以外の値を返す.
    塗りつぶしを完了できない場合,開始点がboundary上にある場合,
    または開始点がクリッピング領域の外側にある場合には0を返す.
    
    互換性
    MSC準拠.戻り値の型がshort far -> int,引数x,yの型がshort->double.
    引数boundaryの型が short -> COLORREF
    
    【目次へ】
  **



struct xycoord _getcurrentposition(void);
  /*
    アクティブなグラフィックス・ページの現在のグラフィックス出力位置の座標を取得.
    この位置は,xycoord構造体に返す.
    xycoord構造体は,以下のメンバーから構成される.
        メンバー      内  容
        double xcoord  x座標
        double ycoord  y座標
    現在の位置は,_lineto関数,_moveto関数で変更される.

    これらの関数は,現在のテキスト出力位置から始まるテキスト出力には
    影響を及ぼさない(詳細については,_settextposition関数を参照).
    
    戻り値
    現在のグラフィックス出力位置の座標を返す.
    エラーを表す戻り値はない.
    
    互換性
    MSC準拠.戻り値の型が struct xycoord far -> struct xycoord
    
    【目次へ】
  **



COLORREF _getpixel(double x, double y);
  /*
    アクティブなグラフィックス・ページの点(x,y)の色を返す.
    
    引数
    x, y 位置
    
    戻り値
    成功すると色を返す.失敗すると−1を返す.
    
    互換性
    MSC準拠.引数x,yの型がshort->double.戻り値の型が short far -> COLORREF

    【目次へ】
  **



int _lineto(double x, double y);
  /*
    アクティブなグラフィックス・ページの現在のグラフィックス出力位置から終点まで線を描く.
    線は,現在のカラー,論理書き込みモード,およびラインスタイルを使用して描かれる.
    エラーがない場合には,現在のグラフィックス出力位置を座標点(x,y)に更新する.
    _lineto関数の呼び出しで描いた閉じた図形の内側を _floodfill関数を使用して塗りつぶす場合には,
    図形は実線で描かなければならない.

    引数
    x, y 終点
    
    戻り値
    描画に成功すると0以外の値,それ以外の場合には0.
    
    互換性
    MSC準拠.戻り値の型が short far -> int,引数x,yの型がshort->double.
    
    【目次へ】
  **



int _moveto(double x, double y);
  /*
    アクティブなグラフィックス・ページの
    指定した点に現在のグラフィックス出力位置を移動.
    描画は行われない.
    
    引数
    x, y 座標点
    
    戻り値
    描画に成功すると0以外の値,それ以外の場合には0.
    
    互換性
    MSC準拠.戻り値の型が short far -> int,引数x,yの型がshort->double.
    
    【目次へ】
  **



int _pie(short control, double x1, double y1, double x2, double y2, 
   double x3, double y3, double x4, double y4);
int _pie(double x1, double y1, double x2, double y2, 
   double x3, double y3, double x4, double y4);
  /*
    アクティブなグラフィックス・ページに現在のカラーで
    両端とその中心が直線で結ばれた楕円形の弧を描くことでおうぎ形を描く.
    おうぎ形の中心は境界となる矩形の中心.
    この矩形は,点(x1,y1)と(x2,y2)で定義される.
    おうぎ形の始点は,弧の中心から点(x3,y3)を通って伸びる直線と弧の交点.
    おうぎ形は弧の中心に対して左回りに描かれ,弧の中心から点(x4,y4)を通って
    伸びる直線と弧の交点が終点となる.おうぎ形は,左回りに描かれる.
    
    引数
    control (省略可)塗りつぶしオプション
            以下の定数のいずれかを指定.
            定  数         意 味
            _GFILLINTERIOR 現在のカラーと塗りつぶしマスクを使用して,
                           おうぎ形を塗りつぶす
            _GBORDER       おうぎ形を塗りつぶさない(省略時)
    x1, y1  境界となる矩形の左上の角
    x2, y2  境界となる矩形の右下の角
    x3, y3  開始ベクトル
    x4, y4  終了ベクトル
    
    戻り値
    成功すると0以外の値を返す.それ以外の場合には0を返す.
    
    互換性
    MSC準拠.戻り値の型が short far -> int,座標引数の型がshort->double.
    
    【目次へ】
  **



int _rectangle(short control, double x1, double y1, double x2, double y2);
int _rectangle(double x1, double y1, double x2, double y2);
  /*
    アクティブなグラフィックス・ページに
    現在のラインスタイルを使用して矩形を描く.
    座標の点(x1,y1)と(x2,y2)は,
    矩形の対角線上に相対する2つの角を指定する.
    _floodfill関数を使用して矩形を塗りつぶすときは,
    その矩形の境界は実線でなければならない.
    
    引数
    control  (省略可)塗りつぶしフラグ
             以下の定数のいずれかを指定.
             定 数          意 味
             _GFILLINTERIOR  現在のカラーと塗りつぶしマスクを使用して,
                             矩形を塗りつぶす
             _GBORDER        矩形を塗りつぶさない(省略時)
    x1, y1   左上の角
    x2, y2   右下の角
    wx1, wy1 左上の角
    wx2, wy2 右下の角

    
    戻り値
    描画に成功すると0以外の値.それ以外の場合には0.
    
    互換性
    MSC準拠.戻り値の型が short far -> int,座標引数の型がshort->double.
    
    【目次へ】
  **



COLORREF _setpixel(double x, double y);
  /*
    アクティブなグラフィックス・ページの
    指定された位置のピクセルを現在の前景色に設定します.
    
    引数
    x, y 対象ピクセル
    
    戻り値
    成功すると対象ピクセルの直前の色を返す.
    
    互換性
    MSC準拠.引数の型がshort->double.戻り値の型がshort far -> COLORREF
    
    【目次へ】
  **

描画属性関数目次へ

色はCOLORREF型のRGB(r,g,b)で指定(0<=r,g,b<=255).線のパターンはWindowsの線種指定の定数で指定 



int _choosecolor(HWND owner, COLORREF *c, COLORREF *cc, const char *title=NULL);
int _choosecolor(int page, COLORREF *c, COLORREF *cc=NULL, const char *title=NULL);
  /*
    色を選択・作成するダイアログ・ボックスを表示.

    引数
    page ダイアログ・ボックスを所有するグラフィックス・ページ番号.
         (0ならばコンソール)
    owner ダイアログ・ボックスを所有するウインドウのハンドル.
    c    はじめの色.戻った時は,選択された色.
    cc   (省略可)作成した色を保存するCOLORREF型の要素数16の配列
        (例えば COLORREF cc[16];)へのポインタ.
    title(省略可)ダイアログボックスのタイトルを表す文字列へのポインタ.
    
    戻り値
    成功1失敗0.
    
    【目次へ】
  **



COLORREF _getbkcolor(void);
  /*
    アクティブなグラフィックス・ページの背景色を取得.
    (背景色は,塗りつぶしパターンの背景色として使われる).
    
    戻り値
    アクティブなページの背景色.
    
    互換性
    MSC準拠.戻り値の型: long far -> COLORREF
    
    【目次へ】
  **



COLORREF _getcolor(void);
  /*
    アクティブなグラフィックス・ページの
    (線,曲線の描画に使われる)前景色を取得.
    塗りつぶしの前景色は,_gettextcolorで取得する.
    
    戻り値
    アクティブなページの前景色.
    
    互換性
    MSC準拠.戻り値の型: short far -> COLORREF
    
    【目次へ】
  **



unsigned char* _getfillmask(unsigned char *mask);
  /*
    アクティブなグラフィックス・ページの現在の塗りつぶしマスクを取得.
    いくつかのグラフィックス関数
    (_ellipse,_floodfill,_pie,_polygon,_rectangle)は,
    スクリーンの一部または全体を現在のカラーや
    バックグラウンドカラーで塗りつぶす.
    塗りつぶしマスクは,塗りつぶしに使用されるパターンを制御する.
    
    引数
    mask 取得したい塗りつぶしマスクを格納するマスク配列.
         _setfillmask関数参照.
    
    戻り値
    現在の塗りつぶしマスクを返す.
    
    互換性
    MSC準拠.戻り値,引数の型が unsigned char far * -> unsigned char*
    
    【目次へ】
  **



int _getlinestyle(void);
  /*
    アクティブなグラフィックス・ページの現在のラインスタイルを取得.
    グラフィックスルーチンには,_lineto,_polygon,_rectangle関数など
    スクリーンに直線を表示する関数があり,その線の種類は,
    現在のラインスタイルを使用して制御できる.
    デフォルトのスタイルは実線.
    
    戻り値
    現在のラインスタイルを返す.ラインスタイル定数は,
    _setlinestyle関数を参照.
    
    互換性
    MSC準拠.MSC標準ではラインスタイルをマスク返すが,定数で返す.
    戻り値の型が unsigend short far -> int.
    
    【目次へ】
  **



COLORREF _setbkcolor(COLORREF col);
  /*
    アクティブなグラフィックス・ページの「塗りつぶしパターンの背景色」を設定.

    引数
    col 塗りつぶしパターンの背景色.
    
    戻り値
    以前の背景色.エラーは返さない.
    
    互換性
    MSC準拠.引数の型 long -> COLORREF,戻り値の型: long far -> COLORREF
    
    【目次へ】
  */

int _setbkcolor(COLORREF color, int page);
  /*
    グラフィックス・ページpageの背景色を設定.

    引数
    col 背景色.
    
    戻り値
    成功1失敗0.
    
    【目次へ】
  **



COLORREF _setcolor(COLORREF col);
  /*
    アクティブなグラフィックス・ページの前景色を設定.
    この前景色は,線,曲線の描画に使われる.
    塗りつぶしの前景色は,_settextcolorで設定する.
    
    引数
    col 前景色.
    
    戻り値
    成功すると以前の前景色を返す.失敗すると−1を返す.
    
    互換性
    MSC準拠.
    引数の型 short -> COLORREF,戻り値の型: short far -> COLORREF
    
    【目次へ】
  **



void _setfillmask(unsigned char *mask);
  /* 
    アクティブなグラフィックス・ページの
    現在の塗りつぶしマスクを設定して塗りつぶしパターンを決定する.
    
    引数
    mask マスク配列.
         マスクは,各ビットが1つのピクセルを表す8×8ビット=8バイトの配列.
         値が1のビットは対応するピクセルに_settextcolorで設定された
         前景色(デフォルトは黒)を設定し,
         0のビットは対応するピクセルに_setbkcolorで設定された
         背景色(デフォルトは白)を設定する.
         パターンは塗りつぶし領域全体にわたって繰り返される.
         塗りつぶしマスクが設定されていない場合(maskがデフォルトのNULL)には,
         _settextcolorで設定された前景色(デフォルトは黒)
         だけが塗りつぶし処理に使用される(パターンなし).
    
    互換性
    MSC準拠.戻り値の型が void far -> void,
    引数の型が unsigned char * -> unsigned char*

    fillmaskの例
    unsigned char fm[]={0xf0,0xf0,0xf0,0xf0,0x0f,0x0f,0x0f,0x0f};
       1 1 1 1 0 0 0 0
       1 1 1 1 0 0 0 0
       1 1 1 1 0 0 0 0
       1 1 1 1 0 0 0 0
       0 0 0 0 1 1 1 1
       0 0 0 0 1 1 1 1
       0 0 0 0 1 1 1 1
       0 0 0 0 1 1 1 1
    unsigned char f0[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; 
       0 0 0 0 0 0 0 0
       0 0 0 0 0 0 0 0
       0 0 0 0 0 0 0 0
       0 0 0 0 0 0 0 0
       0 0 0 0 0 0 0 0
       0 0 0 0 0 0 0 0
       0 0 0 0 0 0 0 0
       0 0 0 0 0 0 0 0
    
    【目次へ】
  **



void _setlinestyle(int nStyle=PS_SOLID);
  /*  
    線を描くのに使用するスタイルを設定.
    グラフィックス関数のいくつか(_lineto関数,_polygon関数や,_rectangle関数)は,
    スクリーン上に直線を描き,その線の種類は,現在のラインスタイルによって決定される.
    デフォルトは実線.

    引数
    nStyle (省略可)要求するラインスタイル.次の何れか.
           PS_SOLID      実線                                  
           PS_DASH       破線(幅が1のときだけ有効).
           PS_DOT        点線(幅が1のときだけ有効).
           PS_DASHDOT    一点鎖線(幅が1のときだけ有効).
           PS_DASHDOTDOT 二点鎖線(幅が1のときだけ有効). 
    
    互換性
    MSC準拠.引数にマスクでなく,ラインスタイル定数を渡す.
    戻り値の型が void far -> void,引数の型が unsigned short far -> int
    
    【目次へ】
  **



int _setlinewidth(double nWidth);
  /*
    線を描くのに使用する線の幅を設定.
    
    引数
    nWidth 要求する線の幅.
    
    戻り値
    成功1失敗0.
    
    【目次へ】
  **

簡単なWinowsカラー属性関数目次へ

/*-->
以下はWinAPI
GetBValue(COLORREF) ブルーの輝度を得る.
GetGValue(COLORREF) グリーンの輝度を得る.
GetRValue(COLORREF) レッドの輝度を得る.

グラフィックス文字出力目次へ




COLORREF _gettextcolor(void);
  /*
    アクティブなグラフィックス・ページの現在のテキストカラーを取得する.
    テキストカラーは,_settextcolor関数によって設定され,
    _outgtext関数によるテキスト出力と塗りつぶしの
    前景色に影響を及ぼす.

    デフォルトは黒.
    
    戻り値
    現在のテキストカラーを返す.エラーを表す戻り値はない.
    
    互換性
    MSC準拠.戻り値の型がshort far -> COLORREF
    
    【目次へ】
  **



struct xycoord _gettextposition(void);
  /*

    アクティブなグラフィックス・ページの
    現在のテキスト出力位置をxycoord構造体で返す.
    構造体は次のメンバーから構成されている.
      メンバー      内  容
      double xcoord x座標
      double ycoord y座標
    _outgtext関数からのテキスト出力は,
    現在のテキスト出力位置から開始される.

    戻り値
    現在のテキスト出力位置.
    互換性
    MSC準拠.戻り値の型がrccoord far -> xycoord
    【目次へ】
  **



COLORREF _settextcolor(COLORREF col=RGB(0,0,0));
  /* 

    現在のテキストカラーとしてcolで指定された色を設定.
    デフォルトのテキストカラーは黒.
    _settextcolor関数は,_outgtext関数と塗りつぶしの
    前景色に関してのみカラーを設定する.
    printf関数などで出力されるテキストのカラーには影響を及さない.


    引数
    col (省略可)要求する色

    戻り値
    直前のテキストカラーを返す.エラーを表す戻り値はない.
    
    互換性
    MSC準拠.引数の型が short -> COLORREF,戻り値の型が short _far -> COLORREF
    
    【目次へ】
  **



struct xycoord _settextposition(double x, double y);
  /* 

    アクティブなページの現在のテキスト出力位置として出力点(x,y)を設定.
    _outgtext関数
    
    はこの位置にテキストを出力する.

    直前のテキスト出力位置をxycoord構造体で返す.
    構造体は次のメンバーから構成されている.
      メンバー      内  容
      double xcoord x座標
      double ycoord y座標

    引数
    x, y    新しい出力開始位置
    
    戻り値
    xycoord構造体で直前のテキスト出力位置を返す.
    
    互換性
    MSC準拠.座標引数の型がshort->double.戻り値の型がrccoord far -> xycoord
    
    【目次へ】
  **

フォント表示




double _getgtextextent(const char *text);
  /* 

    _outgtext関数を使用して現在のフォントでtext文字列を表示するために
    必要になる幅をピクセル単位で取得.
    この関数はプロポーショナルフォントを使用したテキストのサイズを決定する場合に特に有効.
    
    引数
    text    分析されるテキスト

    戻り値
    幅をピクセル単位で返す.フォントが登録されていない場合には−1を返す.
    
    互換性
    MSC準拠:引数の型が unsigend char far *text → char *text
          :戻り値が short _far -> double

    【目次へ】
  **



double _getgtextextenth(const char *text);
  /* 

    _outgtext関数を使用して現在のフォントでtext文字列を表示するために
    必要になる高さをピクセル単位で取得.
    
    引数
    text    分析されるテキスト

    戻り値
    高さをピクセル単位で返す.フォントが登録されていない場合には−1を返す.
    
    【目次へ】
  **



void _outgtext(const char *text, int background=OPAQUE);
  /*
    アクティブなグラフィックス・ページに
    textが指すnull文字(’\0’)で終了する文字列を出力.
    テキストは現在のフォントと_settextcolorで設定されたカラーを使用し,
    現在のグラフィックス出力位置に出力される.
    _outgtext関数は,テキストの出力後に現在のグラフィックス出力位置を更新する.

    
    引数
    text        出力するテキスト文字列
    background  (省略可)文字列の背景.
                OPAQUE 現在の背景色で塗りつぶす(デフォルト)
                TRANSPARENT 透明にする
    
    互換性
    MSC準拠:戻り値の型が void far -> void,
    引数の型が unsigend char far *text → char *text
    
    【目次へ】
  **



int _setfont(const char *options);
  /*
    Windowsのフォントの中からoptions文字列で指定されたフォントを検索し,
    フォントが見つかると,それが現在のフォントとなり,その後のすべての
    _outgtext関数の呼び出しで使用される.アクティブなフォントは常に1つだけ.
    
    引数
    options フォントの特性を示す文字列
    
    options文字列は,希望するフォントの特性を指定する文字の集合.

    特 性 要 約
    t’fontname’ 文字の書体(Windowsのフォント名).
    hx  文字の高さ.xはピクセルの数.

    オプションは,options文字列に空白を入れて分離する.
    _setfont関数は,そのほかの文字はすべて無視する.
    optionsのt(書体に関する仕様)は,
    その後に単引用符(’)で囲んだfontnameを付けて指定する.

    
    戻り値
    
    エラーが発生すると負の数を返す.
    
    
    互換性
    MSC準拠:戻り値の型が short far -> int,
    引数の型が unsigned char *options → char *options.
    
    options文字列の例
    高さ10ピクセルのMS明朝 "t'MS 明朝' h10" 
    
    【目次へ】
  **



void _setfontangle(int anglebase, int anglefont);
  /*
     _outgtextで出力されるフォントの角度を設定する.
    
     引数
     anglebase 文字列の角度
     anglefont 文字の角度(文字列の角度から測る)
    
     【目次へ】
  **



void _setfontproperty(int bold=0, int italic=0, int underline=0, int strikeout=0);
  /*
     _outgtextで出力されるフォントのプロパティを設定する.
     全ての引数が省略すると,デフォルトのプロパティ.
     
     引数
     bold      太字の設定(1なら太字,0なら太字でない)
     italic    斜体の設定(1なら斜体,0なら斜体でない)
     underline 下線の設定(1なら下線有り,0なら下線なし)
     strikeout 打消し線の設定(1なら打消し線有り,0なら打消し線なし)
    
     【目次へ】
  **



void _settextalign(int alignX, int alignY);
  /*
     _outgtextで出力されるフォントの文字揃えを設定する.
     
     引数
     alignX 水平方向の文字そろえ.次の何れかの定数を指定.
            TEXT_CENTER  中央よせ
            TEXT_RIGHT   右寄せ
            TEXT_LEFT    左寄せ
     alignY 垂直方向の文字そろえ.次の何れかの定数を指定.
            TEXT_TOP     上よせ
            TEXT_BOTTOM  下よせ
    
     【目次へ】
  **

イメージ目次へ

  MSCではイメージ用バッファ(buf)をユーザーが用意するが,
  wmgraphでは,番号で指定(内部で自動的に確保).



_bmap構造体
  **

    ビットマップイメージを格納する構造体.

    メンバ
    int w,h;          巾,高さ
    unsigned char *b; バッファ
    int s;            バッファのサイズ(s=lw*h)
    int lw;           1ラインのバイト数
    int bpp;          ピクセル当たりビット数

    メンバ関数
    _bmap(int ws, int hs, int bpp=24); //コンストラクタ
    巾ws高さhsピクセル当たりbppビットのメモリーをbに確保し,
    全てのメンバの値を設定する.

    ~_bmap(); //デストラクタ
    確保したメモリーを解放し,構造体を破棄する.

    void setparam();
    メンバ関数allocでメモリを確保した後に,
    巾ws高さhsピクセル当たりbppビット数を変更(縮小のみ)する.
    
    【目次へ】
  **



int _bmapimage(int page);
  /*
    イメージ・メモリを_bmap型に変換する.
    
    引数
    page グラフィックス・ページ,イメージ・メモリの番号.
    
    戻り値
    成功1,失敗0.
    
    【目次へ】
  **



int _countcolor(const _bmap *bmap);
  /*
    _bmap型イメージ・メモリに格納された画像の色数を数え,
	グレースケールかどうか調べる.
    
    引数
    bmap _bmap型イメージ・メモリへのポインタ.
    
    戻り値
    色数.値が負ならグレースケール.
    
    【目次へ】
  **



_bmap* _get_bmap(int image);
  /*
    imageが指すイメージ・メモリを_bmap型の
    メモリビットマップに格納し,そのポインタを返す.
    
    引数
    image    イメージ・メモリの番号.
    
    戻り値
    _bmap型のメモリビットマップへのポインタへのポインタ.
    失敗した時はNULL.
    
    【目次へ】
  */

_bmap* _get_bmap(const BITMAPINFO *p, const BYTE *pb=NULL);
  /*
    BITMAPINFO構造体に格納されたイメージを_bmap構造体へ格納する.
    (BI_RGB 24, 8, 4, 1bitにのみ対応).

    引数
    p       BITMAPINFO構造体へのポインタ
    pb      イメージのデータ配列へのポインタ.
            NULLの時はpに引き続くデータが使われる

    戻り値
    _bmap型のメモリビットマップへのポインタ.失敗するとNULL.
  **



int _getclipbrd(int image);
  /*
    クリップボードからimageが指すイメージ・メモリにイメージを格納.
    イメージ・メモリは,イメージを格納できるサイズで自動的に確保される.
    
    引数
    image   イメージを格納するイメージ・メモリの番号.
            存在しないイメージ・メモリの番号を指定すると新規作成,
            既に存在するイメージ・メモリの番号を指定すると
            そのイメージ・メモリを新しいイメージで置き換える.
            サイズはイメージに合わせて自動的に調整される.
            グラフィックス・ページ番号との重複不可.
    
    戻り値
    成功1,失敗0.
    
    【目次へ】
  **



void _getimage(double x1, double y1, double x2, double y2, int image);
  /*

    指定された矩形を境界として定義されるグラフィックス・ページ上の
    イメージを,imageが指すイメージ・メモリに格納する.
    境界になる矩形は座標(x1,y1)と(x2,y2)で定義する.
    イメージ・メモリは,イメージを格納できるサイズで自動的に確保される.
    
    引数
    x1, y1  境界になる矩形の左上の角
    x2, y2  境界になる矩形の右下の角
    image   スクリーンイメージを格納するバッファの番号
            (グラフィックス・ページ番号との重複不可).

            バッファの情報は,_imagesize関数を呼び出すことで取得できます.

    
    互換性
    MSC準拠.戻り値の型が void far -> void,
    座標引数が short -> double,imageが char __huge * -> int.
    
    【目次へ】
  **




imagesize _imagesize(int page);
  /*
    グラフィックス・ページ,イメージ・メモリの情報を取得する. 
    
    引数
    page グラフィックス・ページ,イメージ・メモリの番号.
    
    戻り値
    以下のimagesize構造体で情報を返す.
    失敗した時はメンバwが0になる.
    
    互換性
    MSCの同名関数の機能を拡張.

   struct imagesize
    {
      int type;   //イメージメモリの場合はMEMORYTYPE
                  //_bmap型の場合はBMAPTYPE
                  //グラフィックスウインドウの場合はPAGETYPE
                  //フルスクリーンの場合はFULLSCREENTYPE
      HDC hDC;    //デバイスコンテキストハンドル(イメージ・バッファのみ)
      HDC hBM;
      double w,h; //幅と高さ.

      _bmap *p_bmap; //_bmap型の場合,_bmapへのポインタ
    };
    
    【目次へ】
  **



int _isbmp(const char* fname);
  /*
    ファイルfnameがbmpファイルかどうか調べる.
    
    引数
    fname ファイル名.
    
    戻り値
    ファイルfnameがbmpファイルなら1,そうでなければ0.
    
    【目次へ】
  **



int _newimage(int w, int h, int image);
  /*
    イメージ・メモリを新規に確保する.
    imageが既に存在するイメージ・メモリ番号の場合は,
    既存のメモリ・イメージを破棄してから新規にイメージ・メモリを確保する.
    
    引数
    w, h イメージ・バッファの幅と高さ.
    image イメージ・バッファの番号(>0,<4000).
          グラフィックス・ページ番号との重複不可.
    
    戻り値
    成功1,失敗0.
    
    【目次へ】
  */

int _newimage(_bmap *b, int image);
  /*
    _bmap型イメージ・メモリbをイメージ・メモリに変換する.
    
    引数
    b     _bmap型のメモリビットマップへのポインタ.
    image イメージ・バッファの番号(>0,<4000).
          グラフィックス・ページ番号との重複不可.
    
    戻り値
    成功1,失敗0.
    
    【目次へ】
  **



int _put_bmap(const _bmap *pbmap, int image, int ox=0, int oy=0);
  /*
    imageが指すイメージ・メモリに
    _bmap型のメモリビットマップへのポインタpbmapからイメージを格納.
    イメージ・メモリは,イメージを格納できるサイズで自動的に確保される.
    
    引数
    pbmap   _bmap型のメモリビットマップへのポインタ
    image   イメージを格納するイメージ・メモリの番号.
            存在しないイメージ・メモリの番号を指定すると新規作成,
            既に存在するイメージ・メモリの番号を指定すると
            そのイメージ・メモリを新しいイメージで置き換える.
            サイズはイメージに合わせて自動的に調整される.
            グラフィックス・ページ番号との重複不可.
    ox,oy   イメージを格納する位置(省略時は0,0)
    
    戻り値
    スキャンしたライン数.失敗した時は0.
    
    【目次へ】
  **



int _putbmp(const char* fname, const _bmap* buf);
  /*
    _bmap型のメモリビットマップbufから
    ファイル名fnameのBMPファイルを作成.
    
    引数
    fname    作成するBMPファイル名.
    buf      _bmap型のメモリビットマップへのポインタ

    戻り値
    成功1,失敗0.
    
    【目次へ】
  */

int _putbmp(const char* bmpName, int image, int bitcount=24);
  /*
    imageが指すイメージ・メモリからbmpファイルを作成.
    
    引数
    bmpName  ビットマップファイル名
    image    イメージ・メモリの番号.
    bitcount (省略可)ピクセル当たりのビット数.16か24.省略時は24.

    戻り値
    成功1,失敗0.
    
    【目次へ】
  **



int _putclipbrd(int image);
  /*
    imageが指すイメージ・メモリ,または,
	ページ(ウインドウ)をクリップボードにコピー.
    
    引数
    image   イメージ・メモリ,ページの番号.
    
    戻り値
    成功1,失敗0.
    
    【目次へ】
  */

int _putclipbrd(const _bmap* buf);
  /*
    _bmap型のメモリビットマップbufを
    クリップボードにコピー.
    
    引数
    buf   _bmap型のメモリビットマップ
    
    戻り値
    成功1,失敗0.
    
    【目次へ】
  */

int _putclipbrd(const char* fname);
  /*
    ファイルfname(.bmp, .emf, または.wmf)をクリップボードにコピー.
    emf, wmfファイルはメタファイル形式(ベクトル形式)で
    クリップボードにコピーされる.
    
    引数
    fname   ファイル名
    
    戻り値
    成功1,失敗0.
    
    【目次へ】
  **



void _putimage(double x1, double y1, int buf, DWORD action=_GPSET, double ratio=1);
  /*

    bufが指すページまたはイメージ・メモリに格納されたイメージを
    アクティブなグラフィックス・ページに送る.
    イメージの左上の角が座標点(x,y)に設定される.
    
    引数
    x, y    イメージの左上の角の位置
    image   イメージの格納されているバッファの番号
    action  (省略化)現在表示されているスクリーンイメージとの相互作用
            この引数には以下に示す定数のいずれかを指定.
            定 数 意 味
            _GAND   画面上の現在のイメージに重複させてイメージを送る.
                    結果として得られるイメージは,2つのイメージの論理ANDになる.
                    現在のイメージと新しいイメージのカラーが同じ点では,
                    カラーは元のままである.カラーが異なる点では,
                    論理ANDで結合されたカラーになる
            _GOR    現在のイメージに重ねてイメージを表示.
                    新しいイメージは以前の画面の内容を消さない
            _GPRESETデータを点ごとに画面上に送る.
                    各点は,_getimage関数によって画面から取り出したときとは
                    反転したカラー属性を持ち,ネガティブイメージを生成
            _GPSET  (省略時)データを点ごとに画面上に送る.
                    各点は,_getimage関数によって
                    画面から取り出したときと同じカラー属性を持つ
            _GXOR   imageバッファに点がある場合には,
                    それに対応する画面上の点は反転される.
                    この動作はカーソルと同様である.イメージを2度出力すると,
                    複雑なバックグラウンドも元通りに復元される.これによって,
                    バックグラウンドを消すことなく対象を動かすことができる.
                    _GXOR定数は,アニメーションによく使用される特殊なモードである.
    ratio   (省略可)貼り付けるときの倍率.省略時は1.
    
    互換性
    MSC準拠.戻り値の型が void far -> void,座標引数が short -> double,
    imageが char __huge * -> int.actionが short -> DWORD.
    
    【目次へ】
  */

void _putimage(double x1, double y1, const _bmap* buf, DWORD action=_GPSET, double ratio=1);
  /*
    bufが指す_bmapメモリに格納されたイメージを
    アクティブなグラフィックス・ページに送る.
    イメージの左上の角が座標点(x,y)に設定される.
    
    引数
    x, y    イメージの左上の角の位置
    buf     _bmapイメージ
    action  _putimage()参照.
    ratio   _putimage()参照.
    
    互換性
    MSC準拠.戻り値の型が void far -> void,座標引数が short -> double,
    imageが char __huge * -> const _bmap*.actionが short -> DWORD.
    
    【目次へ】
  **



int _putjpg(const char* fname, const _bmap* buf, int quality=0);
  /*
    _bmap型のメモリビットマップbufから
    ファイル名fnameのJPEGファイルを作成.
    (IMAGEライブラリ_wmimage.libが必要)
    
    引数
    fname    作成するJPEGファイル名.
    buf      _bmap型のメモリビットマップへのポインタ
    quality  (省略可)JPEG圧縮の品位.0〜100.
             0はデフォルト.大きいほど高品位(ファイルサイズ大).

    戻り値
    成功1,失敗0.
    
    【目次へ】
  **



int _putpng(const char* fname, const _bmap* buf, const int type=0, const int bit_depth=8);
  /*
    _bmap型のメモリビットマップbufから
    ファイル名fnameのPNGファイルを作成.
    (IMAGEライブラリ_wmimage.libが必要)
    
    引数
    fname    作成するPNGファイル名.
    buf      _bmap型のメモリビットマップへのポインタ
    type  (省略可)PNGファイルタイプの指定.
           0 (デフォルト)パレット
              パレットの大きさは1,2,4,8ビットのいずれか.
              最適な大きさが自動的に選択される.
              色数が8ビットを超える場合はフルカラーRGBで保存される.
           1 フルカラーRGB.
           2 グレースケール.
    bit_depth (省略可)
           グレースケール(type=1)の場合のビット数.
           1,2,4,8のいずれか.

    戻り値
    成功1,失敗0.
    
    【目次へ】
  **



int _puttif(const char* fname, const _bmap* buf, const int type=0);
  /*
    _bmap型のメモリビットマップbufから
    ファイル名fnameのTIFFファイルを作成.
    (IMAGEライブラリ_wmimage.libが必要)
    
    引数
    fname    作成するTIFFファイル名.
    buf      _bmap型のメモリビットマップへのポインタ
    type  (省略可)TIFFファイルタイプの指定.
           0 (デフォルト)フルカラーRGB.無圧縮.
           1 グレースケール.無圧縮.
           2 白黒2値.CCITT G4圧縮.

    戻り値
    成功1,失敗0.
    
    【目次へ】
  **



_bmap* _read_bmap(const char *fname, double scale=1, int fast=0);
  /*
    画像ファイルfnameから_bmap型のメモリビットマップ
    にイメージを格納.
    画像ファイルでない場合は,関連づけられたアイコンを得る.
   (BMP,EMF,WMFファイルは他のライブラリは不必要)
   (JPEG,GIF,PDF,PNG,PSD,TIF ファイルを読むにはIMAGEライブラリ_wmimage.libが必要)
    (PDFファイルを読むにはAcrobat/Adobe Reader 7以上が必要)
    (PDFファイルを読むと,クリップボードにPDFファイルの画像が入ってしまう)
   (上記以外のファイルはインストールされたSusiePluginで読む)
    
    引数
    fname   ファイル名
    scale  (省略可)wmf, emfの場合:縮小サイズ.(0戻り値
    _bmap型のメモリビットマップへのポインタ.失敗するとNULLを返す.
    
    【目次へ】
  **



int _readimage(const char* fname, int image, COLORREF col=RGB(255,255,255));
  /*
    bmpファイルからimageが指すイメージ・メモリにイメージを格納.
    イメージ・メモリは,イメージを格納できるサイズで自動的に確保される.
    bmpファイルでない場合は,関連づけられたアイコンを得る.
    
    引数
    fname   ファイル名
    image   イメージを格納するイメージ・メモリの番号.
            存在しないイメージ・メモリの番号を指定すると新規作成,
            既に存在するイメージ・メモリの番号を指定すると
            そのイメージ・メモリを新しいイメージで置き換える.
            サイズはイメージに合わせて自動的に調整される.
            グラフィックス・ページ番号との重複不可.
    col     アイコンの場合の背景色(デフォルトは白)
    
    戻り値
    成功1,失敗0.
    
    【目次へ】
  **



int _readimage_size(const char *fname, int *w, int *h, int *dpix, int *dpiy);
  /*
    画像ファイルfnameの画像の大きさと解像度を取得する.
   (JPEG,GIF,PNG,PSD,PDF,TIF ファイルを読むにはIMAGEライブラリ_wmimage.libが必要)
    (PDFファイルを読むにはAcrobat/Adobe Reader 7以上が必要)
    (PDFファイルを読むと,クリップボードにPDFファイルの画像が入ってしまう)
   (上記以外のファイルはインストールされたSusiePluginで読む)
    
    引数
    fname   ファイル名
    w       画像の巾が格納される.
    h       画像の高さが格納される.
    dpix    画像のX方向の解像度(dpi)が格納される.
    dpiy    画像のY方向の解像度(dpi)が格納される.

    戻り値
    成功1,失敗0.
    
    【目次へ】
  **



int _readmf(const char* fileName);
  /*
    アクティブ・ページに_savemf関数で保存したメタファイルを読み込む.
    
    引数
    fileName ファイル名
    
    戻り値
    成功1,失敗0.
    
    【目次へ】
  **



#define _rmimage(image) _rmpage(image)
  /*
    イメージ・メモリを破棄する.(_rmpageの別名)
    
    引数
    image イメージ・バッファの番号.
    
    戻り値
    成功1,失敗0.

   【目次へ】
  **



_bmap* _rotate(const _bmap* buf, int angle);
  /*
    _bmap型のメモリビットマップbufを
    反時計回りにangle度回転する.
    (今のところangle=90,-90,180にのみ対応)
    
    引数
    buf     _bmap型のメモリビットマップへのポインタ
    angle   回転する角度(度).
    
    戻り値
    回転された_bmap型のメモリビットマップへのポインタ.
    
    【目次へ】
  **



int _rotate_lj(int angle, const char *ifname, const char *ofname);
  /*
    jpegファイルifnameを反時計回りにangle度非劣化回転する.
    (angle=90度の倍数にのみ対応)
    
    引数
    angle   回転する角度(度).
    ifname  非劣化回転するファイル.
    ofname  非劣化回転したファイル.
    
    戻り値
    成功1, 失敗0
    
    【目次へ】
  **
  


int _savemf(const char* fileName);
  /*
     アクティブ・ページをメタファイルとしてファイルに保存する.
    
    引数
    fileName ファイル名
    
    戻り値
    成功1,失敗0.
    
    【目次へ】
  **



void _sethwnd_wmimage(HWND h);
  /*
     _wmimage.libのエラーメッセージを表示するウインドウの
     親ウインドウを指定する.
    (IMAGEライブラリ_wmimage.libが必要)
    
    引数
    h 親ウインドウのハンドル.
    
    【目次へ
  **



int _sizeof_bmap(int w, int h, int bitcount=24);
  /*
    _bmapに必要なメモリ容量をbyte単位で計算する.
    
    引数
    w イメージの巾
    h イメージの高さ
    bitcount ピクセル当たりビット数(省略時は24)
    
    戻り値
    _bmapに必要なメモリ容量(byte)
    
    【目次へ】
  **



int _spi_info(const char *fname, char *info=NULL);
  /*
    インストールされたSusiePlug-inに関する情報を得る.
    情報とは,Plug-in名,バージョン及び copyright.
    (imageライブラリ_wmimage.libが必要)
    
    引数
    fname   ".tif"のように拡張子を指定する.
    info    情報が文字列で格納される.


    戻り値
    infoに格納された文字数.
    0ならば,そのタイプのSusiePluginがインストールされていない.
    
    【目次へ】
  **



int _spi_loaded(char *info);
  /*
    ロードされたSusiePlug-inに関する情報を得る.
    情報とは,Plug-in名,バージョン及び copyright.
    (imageライブラリ_wmimage.libが必要)
    
    引数
    info    情報が文字列で格納される.
            NULLならばロードされたSusiePlug-inの数を返すのみ.

    戻り値
    ロードされたSusiePlug-inの数.
    
    【目次へ】
  **



_bmap* _spi_read_bmap(const char *fname);
  /*
    インストールされたSusiePluginで読める画像ファイルfnameから
    _bmap型のメモリビットマップにイメージを格納.
    (imageライブラリ_wmimage.libが必要)
    
    引数
    fname   ファイル名
    
    戻り値
    _bmap型のメモリビットマップ
    
    【目次へ】
  **



_bmap* _stretch(const _bmap* buf, const double r, const int rot);
_bmap* _stretch(const _bmap* buf, const double r, const double eps, const int rot);
  /*
    _bmap型のメモリビットマップbufを高品位に
    r倍に縮小拡大,回転する.(現在はr<1にのみ対応)
    
    引数
    buf     _bmap型のメモリビットマップへのポインタ
    r       縮小拡大倍率.
    eps     縮小拡大処理がなるべく高速になるように
            倍率rをrからr-epsの範囲で変えることを許す.
    rot     90度単位の回転角(0=0度,1=+90度,-1=-90度,+-2=180度)
    
    戻り値
    縮小拡大された_bmap型のメモリビットマップへのポインタ.
    
    【目次へ】
  **



_tempimage構造体
  **
    一時利用のイメージ・メモリを確保する.
    _tempimageが宣言されたブロックからぬけると,イメージメモリは
    破棄される.

    メンバ
    _tempimage(int w, int h) 幅w,高さhのイメージメモリを確保する
                             コンストラクタ.
    page                     確保されたイメージ・メモリ番号.
                             0は確保失敗.

    【目次へ】
  **
  


int _tifsplit(const char *fname);
  /*
    複数のページからなるTIFF画像fnameを,
	拡張子を除いた同じ名前のフォルダを作り,
	1からはじまる6桁通し番号のTIFFファイルに分割する.
    (imageライブラリ_wmimage.libが必要)
    
    引数
    fname 分割したいTIFF画像ファイル名.

    戻り値
    成功1,失敗0.
    
    【目次へ】
  **



_bmap* _twain_get();
  /*
    TWAIN機器から画像を得る.
    画像を得る毎に_twain_open
    でTWAIN機器を開かねばならない.
    (imageライブラリ_wmimage.libが必要)
    
    戻り値
    TWAIN機器から取得した画像の_bmap型のメモリビットマップへのポインタ.
    画像が得られない等の場合はNULL.
    
    【目次へ】
  **



int _twain_load(HWND hWnd);
  /*
    TWAIN機器を使用するためのモジュールをロードする.
    はじめに一回だけロードすればよい.
    (imageライブラリ_wmimage.libが必要)
    
    引数
    hWnd TWAINダイアログボックスの親ウインドウのハンドル.
         NULLならば,モジュールがロードできるかどうか調べる.

    戻り値
    1 成功,0 失敗.
    
    【目次へ】
  **



int _twain_open(int select_source=0);
  /*
    TWAIN機器を開く._twain_getで
    画像を得る毎に必ず呼ばねばならない.
    (imageライブラリ_wmimage.libが必要)
    
    引数
    select_source =1 ダイアログボックスでTWAIN機器を選択する.
                  =0 TWAIN機器を選択しない.デフォルトの機器を使う.

    戻り値
    1 成功,0 失敗.
    
    【目次へ】
  **

Windowsとのインターフェイス目次へ

メッセージ処理とコールバック関数





void _do_message();
   /*
     マウスでクリックした等のウインドウズからのメッセージ処理
     をおこなう.この関数を呼ばなくても,
     コンソール(含むステータスバー)入出力の間,
     あるいはmain()終了後にはメッセージは自動的に処理される.
    
    【目次へ】
   **



int _isdoubleclick(HWND hWnd, UINT message);
   /*
     ウインドウプロシジャ関数の受け取ったWM_LBUTTONDOWN,
     WM_RBUTTONDOWNメッセージがダブルクリックに先立つものかどうか調べる.
    
    引数
     hWnd    メッセージを受け取ったウインドウのハンドル
     message メッセージ(WM_LBUTTONDOWNまたはWM_RBUTTONDOWN)
    
    戻り値
    YES=1, NO=0

    【目次へ】
   **



void _setuserproc(int (USERPROC *func)(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam));
   /*
     マウスでクリックした等のウインドウズからのメッセージを受け取る関数を定義する.
     プログラムの最初で一度だけ_setuserproc(_userproc); と呼び出す.
     メッセージを受け取る関数の型は,
       int USERPROC _userproc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
     であり,引数の意味は,
       hWnd    メッセージを受け取ったウインドウのハンドル
       message メッセージ
        wParam  メッセージの追加情報
        lParam  メッセージの追加情報
     である.
     さらにメッセージの処理が必要でない時は1,必要な時は0を返すこと.
     メッセージについては Windows3.1 SDK ヘルプ 参照

     【目次へ】
   **



void _setdrop(void (*func)(int page, int nfile, char **filename));
   /*
     ファイルがドロップされた時に呼び出される関数を定義する.
     プログラムの最初で一度だけ_setdrop(droped); などのように呼び出す.
     ファイルがドロップされた時に呼び出される関数の型は,
       void dropped(int page, int nfile, char **filename)
     で,pageにドロップされたpage,nfileにドロップされたファイル数,
     filename[0],...,filename[n-1]にドロップされたファイル名がはいる.
    
     【目次へ】
   **



void _setfinalproc(void (*func)());
   /*
     プログラム終了時に呼び出される関数を定義する.
     プログラムの最初で一度だけ_setfinalproc(final); などのように呼び出す.
     プログラム終了時に呼び出される関数の型は,
       void final(void)
    
     【目次へ】
   **



void _sethelp(void (*func)());
   /*
     ヘルプ・メニューを選択した時に呼び出される関数を定義する.
     プログラムの最初で一度だけ_setuserproc(help); などのように呼び出す.
     ヘルプ・メニューが選択された時に呼び出される関数の型は,
       void help(void)
    
    
    void help()
    {
        char f[256];
        GetModuleFileName(_gethinst(),f,sizeof(f));
        strcpy(strrchr(f,'.'),".hlp");
        _exec("winhlp32.exe %s",f);
    }
    
     【目次へ】
   ** 

メニューIDについて

メニューなどを新たに追加するときは以下のメニューIDと重複しないように.


#define IDC_MAINEDIT     65500  //handle to menu, or child-window identifier
                                //for console
#define IDM_EXIT_        65501  //Console Exit
#define IDM_PRINT_       65502  //Graphic Print
#define IDM_COPY_        65503  //ConsoleとGraphicのCopy
#define IDM_PASTE_       65504  //ConsoleのPaste
#define IDM_CUT_         65505  //ConsoleのCut
#define IDM_CLEAR_       65506  //ConsoleのClear
#define IDM_SELALL_      65507  //ConsoleのSelect All
#define IDM_UNDO_        65508  //ConsoleのUndo
#define IDM_FIND_        65509  //ConsoleのFind
#define IDM_HELP_        65510  //ConsoleのHelp
#define IDM_BIG_         65511  //ConsoleのFont Big
#define IDM_NORMAL_      65512  //ConsoleのFont Normal
#define IDM_SMALL_       65513  //ConsoleのFont Small
#define IDM_WINDOW_      65514  //ConsoleとGraphicのWindow 


WinAPIメモ

以下のキーワードでWinAPIのヘルプを引けば必要なAPIの知識が得られます. メニュー:AppendMenuItem,WM_COMMAND, マウスのイベント:WM_LBUTTONDOWN,WM_RBUTTONDOWN ウインドウサイズ変更:WM_SIZE DLLの使用:LoadLibrary

定数,変数一覧【目次へ


MSCのグラフィック関数との相違点【目次へ


イメージ関数の新旧対応表【目次へ

旧バージョン 現バージョン
int _closeimage(int page); _bmapimage
DIB構造体 _bmap構造体
DIB _getbmp(const char *fname); _read_bmap
int _getbmp(DIB buf, int page); _put_bmap
int _getbmp(DIB buf, int page, int ox, int oy); _put_bmap
int _getbmp_size(const char *fname, int *w, int *h, int *dpix, int *dpiy); _readimage_size
int _getcur_size(const char *fname, int *w, int *h, int *dpix, int *dpiy); _readimage_size
int _getDIB(DIB *buf, int page); _get_bmap
int _getico_size(const char *fname, int *w, int *h, int *dpix, int *dpiy); _readimage_size
DIB _getjpg(const char *fname, int scale=1, int fast=0); _read_bmap
int _getjpg_size(const char *fname, int *w, int *h, int *dpix, int *dpiy); _readimage_size
DIB _getpng(const char *fname); _read_bmap
int _getpng_size(const char *fname, int *w, int *h, int *dpix, int *dpiy); _readimage_size
DIB _getpsd(const char *fname); _read_bmap
int _getpsd_size(const char *fname, int *w, int *h); _readimage_size
DIB _getspi(const char *fname); _spi_readimage
int _getspi_info(const char *fname, char *info); _spi_info
int _getspi_size(const char *fname, int *w=NULL, int *h=NULL, int *dpix=NULL, int *dpiy=NULL); _readimage_size, _spi_info
DIB _getwmf(const char* fname, double r=1); _read_bmap
int _getwmf_size(const char *fname, int *w, int *h, int *dpix, int *dpiy); _readimage_size
int _newimage(DIB *b, int image); _newimage
int _putbmp(DIB buf); _putclipbrd
int _putbmp(const char* fname); _putclipbrd
void _putimage(double x1, double y1, DIB buf, DWORD action=_GPSET, double ratio=1); _putimage
int _putjpg(const char* fname, DIB buf, int quality=0); _putjpg
int _putpage(int page, double x, double y); _putimage
int _putwmf(const char* fname); _putclipbrd
DIB _rotate(DIB buf, int angle); _rotate
void _sethwnd_jpg(HWND h); _sethwnd_wmimage
int _sizeof_DIB(int w, int h, int bitcount=24); _sizeof_bmap
DIB _stretch(DIB buf, const double r, const int rot); _stretch
DIB _stretch(DIB buf, const double r, const double eps, const int rot); _stretch

History【目次へ

長所と欠点