DrawFormatStringToHandleで右詰めにする方法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kai

DrawFormatStringToHandleで右詰めにする方法

#1

投稿記事 by kai » 15年前

現在、改造している龍神録で、
東方でいうスペルカードの文字を表示させるところを実装中なんですが、
弾幕一つ一つに、文字を描いた画像を表示するのはロードが長くなる原因なので
DrawFormatStringToHandleを使って表示しようとしたのですが、
これって左詰めですよね?
DrawFormatStringToHandle( xxx , yyy , color[0] , font[2] , "テスト『テストテストテスト』");
みたいにプログラムを組むと左詰めに表示されてしまい、
次の弾幕で、名前が違ったりすると
DrawFormatStringToHandle( xxx , yyy , color[0] , font[2] , "テスト『テストテスト』");
その文字の間分、隙間が開いてしまい、見た目が悪くなってしまって困ってます。
右詰めに表示出来たら最高にうれしいのですが、どうしたら出来ますでしょうか?
アドバイスよろしくお願いします。

Dixq (管理人)

Re:DrawFormatStringToHandleで右詰めにする方法

#2

投稿記事 by Dixq (管理人) » 15年前

http://homepage2.nifty.com/natupaji/DxL ... html#R17N2

こちらの関数で、描画する際の表示サイズが取得できます。
これに合わせて描画位置を変えて描画する自作関数を作ればどうでしょうか?

kai

Re:DrawFormatStringToHandleで右詰めにする方法

#3

投稿記事 by kai » 15年前

ありがとうございます。
GetDrawStringWidth関数をどのように扱えば右詰めになるのでしょうか?
出来ましたら、右詰めにする簡単なプログラムがあればありがたいです。 画像

kai

Re:DrawFormatStringToHandleで右詰めにする方法

#4

投稿記事 by kai » 15年前

ついでなので聞きたいのですが、
画像の場合、DrawModiGraphでグラフィックの自由変形描画が出来るのですが、
文字の関数で自由変形描画出来る関数はないのでしょうか?

lbfuvab

Re:DrawFormatStringToHandleで右詰めにする方法

#5

投稿記事 by lbfuvab » 15年前

>GetDrawStringWidth関数をどのように扱えば右詰めになるのでしょうか?

リファレンスに乗っている関数なので関数自体や引数の意味は分かっていると仮定します。
まずはトライ&エラー方式でやりましょう。
最低でも3~5回程度改良してから質問しましょう。


>文字の関数で自由変形描画出来る関数はないのでしょうか?

MakeScreenで描画画面を作成して文字を書き、それをDrawModiGraphすれば出来なくはないです。
ただ、それなら事前に画像を作成する事をお薦めします。

kazuoni

Re:DrawFormatStringToHandleで右詰めにする方法

#6

投稿記事 by kazuoni » 15年前

> GetDrawStringWidth関数をどのように扱えば右詰めになるのでしょうか?

こんな感じですかね。


#う・・・暇だったんで、ついぱぱっと書いてしまいました。。
こういう質問って、普通はlbfuvabさんのおっしゃるように、
導出させる方向での回答のがよいのでしょうか・・・。
最近ではsoftyaさんの様な回答ですね。
とても親切に導出まで導いていらっしゃいます。
宿題の丸投げではないので、また基準が難しいですね。

質問者さんの回答からは逸れるので文字小さくしときます・・・
画像

kai

Re:DrawFormatStringToHandleで右詰めにする方法

#7

投稿記事 by kai » 15年前

>lbfuvabさん
返答ありがとうございます。
>MakeScreenで描画画面を作成して文字を書き、それをDrawModiGraphすれば出来なくはないです。
すみません。いまいちやり方が分からないのですが、もうちょっと詳しく説明していただけないでしょうか?
よろしくお願いします。

>kazuoniさん
返答ありがとうございます。
作成したいただいたサンプルを参考に実装してみたいと思います。ありがとうございます。
私自信、よく会社では、分からないことがあれば(教える時間短縮のために)サンプルをやるから、
後は自分で理解しろということが結構あるので、その方が理解しやすいので助かります。 画像

pooka

Re:DrawFormatStringToHandleで右詰めにする方法

#8

投稿記事 by pooka » 15年前

>>MakeScreenで描画画面を作成して文字を書き、それをDrawModiGraphすれば出来なくはないです。
>すみません。いまいちやり方が分からないのですが、もうちょっと詳しく説明していただけないでしょうか?

こんなかんじでしょうか。
#include "DxLib.h"
#include <string.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    char *str = "サンプルです";
    int len;
    int width;
    int screen;

    ChangeWindowMode(TRUE);

    if (DxLib_Init() == -1)
         return -1;

    len = (int)strlen(str);
    width = GetDrawStringWidth(str, len);
    screen = MakeScreen(width, 20);

    SetDrawScreen(screen);

    DrawString(0, 0, str, GetColor(255, 255, 255));

    SetDrawScreen(DX_SCREEN_BACK);

    DrawModiGraph(100, 100, 300, 200, 300, 250, 100, 150, screen, TRUE);
    
    ScreenFlip();
    
    WaitKey();

    DeleteGraph(screen);

    DxLib_End();

    return 0;    
}
画像

kai

Re:DrawFormatStringToHandleで右詰めにする方法

#9

投稿記事 by kai » 15年前

ありがとうございます!助かりました!

閉鎖

“C言語何でも質問掲示板” へ戻る