C言語でグラフィックス  
  【2】図形の描画と消去 次へ 

(14)フォント設定(GWsettxt関数)とテキスト描画(GWputtxt関数)

サンプルプログラム 〔gr217.c〕
 フォントを「MS 明朝」に設定し、文字列をグラフィックス・ウィンドウに描画する。

#include <GrWin.h>

int main(void)
{
    int     width = 640, height = 400;
    char    *pt = "ABC123文字列描画のテスト";

    GWopen(0);
    GWsize(-5, &width, &height);
    GWsize(-3, NULL, NULL);
    GWvport(0.0, 0.0, (float)width / (float)height, 1.0);
    GWindow(0.0, 0.0, (float)width - 1.0, (float)height - 1.0);
    /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
    GWclear(-1);
    GWsettxt(0.0, 0.0, 1, -1, -1, "MS 明朝");   /* フォント設定 */
    GWputtxt(50.0, 350.0, pt);                   /* 文字列描画 */
    GWline(50.0, 350.0, 300.0, 350.0);           /* 確認用の線 */
    /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
    GWquit();
    return 0;
}
int GWsettxt(float フォント高さ, float フォント傾き, int 基準点,
       int 文字色, int 背景色, char *フォント名);
 フォントを設定する。
・フォント高さは、ワールド座標系で指定する。0.0でデフォルト、負数で現在値の高さとなる。
・フォント傾きは、角度の単位を“度/360”とし、反時計回りを正にとって、水平方向(3時の方向)からの角度で指定する。
・基準点は、次の値で指定する。
0:中央 1:左下(デフォルト) 2:右下 3:右上 4:左上
5:左 6:下 7:右 8:上  
 文字列を描画するとき、指定した座標を文字列のどの位置にするかを指定する。
・フォント名は、TrueTypeのみ指定できる。空白のときはデフォルトのフォント名または前回使用のフォント名となる。「*」のときはフォントダイアログが開く。
 
int GWputtxt(float X, float Y, char *文字列);
 ワールド座標系で座標(X, Y)を基準点とする位置に文字列を描画する。



(15)文字列の長さ(GWgettxt関数)

サンプルプログラム 〔gr218.c〕
 前のサンプルプログラムで、文字列の長さ分だけ線を引くためには、文字列の長さを知る必要がある。文字列の長さ分だけ線(下線)を描く。

#include <GrWin.h>

int main(void)
{
    int     width = 640, height = 400;
    char    *pt = "ABC123文字列描画のテスト";
    float   w, h, x, y;

    GWopen(0);
    GWsize(-5, &width, &height);
    GWsize(-3, NULL, NULL);
    GWvport(0.0, 0.0, (float)width / (float)height, 1.0);
    GWindow(0.0, 0.0, (float)width - 1.0, (float)height - 1.0);
    /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
    GWclear(-1);
    GWsettxt(0.0, 0.0, 1, -1, -1, "MS 明朝");
    GWgettxt(&w, &h, &x, &y, pt);               /* 文字列のサイズ取得 */
    GWputtxt(50.0, 350.0, pt);
    GWline(50.0, 350.0, w + 50.0, 350.0);
    /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
    GWquit();
    return 0;
}
int GWgettxt(float *幅, float *高さ, float *X, float *Y, char *文字列);
 文字列のサイズを取得する。
・幅と高さは、指定した文字列の大きさをワールド座標系で取得する。
・XとYは、基準点のオフセット値を取得する。
・文字列は、調べたい文字列を指定する。

 ここでは、文字列の長さ(幅)だけが知りたいので変数wだけを使って直線を描画している。直線はx座標50.0から描画しているので、終点のx座標は50.0+wとなる。y座標は変わらない。

 このサンプルに次の文を追加して、コンソールに値を表示すると次のようになった。
#include <stdio.h>    ←プログラムの先頭
printf("%f %f %f %f\n", w, h, x, y);    ←GWgettxt()の次(以降)
 
    167.835495 12.938650 0.000000 0.000000
 
 幅167.835495は全角12文字分(半角24文字分)の大きさである。全角1文字分の幅は約14ピクセル(ドット)である。文字列の高さは約13ピクセル(ドット)である。 


  次へ 
 Copyright © 2005 Hiroshi Masuda 

 

 

inserted by FC2 system