MSFlexGridでテキストを回転するには?

[戻る]
花子 2007/10/12(金) 14:36:58
環境:Windows Xp VC++6.0(MFC)

MSFlexGridで特定のセルのテキストの書式を変更しています。
太字や下線付きなどの変更はできたのですが、
テキストを回転する方法が分かりません。

MSFlexGridで特定のセルのテキストを90度回転する方法を
教えて頂けませんか?
よろしくお願い致します。

たいちう 2007/10/12(金) 16:08:21
MSFlexGridにそのような機能は用意されていないと思う。
代替案として思いつくのは以下の通り。

1.自前で描画。グリッドが描画されるタイミングをつかんで、
    セルの位置に自分で回転させたテキストを書く。
    (Viewに90度回転させて書くことはできますか?
      CreateFontの3番目の引数を900か2700にします。)

2.MSFlexGridのセルにビットマップを表示させることができるので、
    この機能を使う。
    表示するテキストが予め判っていて、数があまり多くないなら、
    ビットマップを作っておく。
    実行時にしか判らないならば、実行時にメモリ上でビットマップを作る。

3.CodeGuruやCodeProjectで、使えそうなサンプルを探す。
    そのものずばりが無かったりすると、それを改造できるスキルが必要。

4.Grape CityのVS-FlexGridなら、セル毎にフォントを変えるくらいできそうなので、
    これを購入する。あるいは、他社の同様な製品。
    (私は使ったことがないので、本当にできるかどうかと、
      VC6で使えるかは調べてね。)

5.使い勝手のよいグリッドを自作する。


予めビットマップを用意することができれば良いけど。
そうでない場合、4が1番賢いかな。

花子 2007/10/12(金) 17:37:50
たいちうさん、ありがとうございます。

テキストの内容は任意であるためビットマップは準備できません。
ここで質問する前にサンプルも探したのですが探しきれませんでした。
VS-FlexGridを購入する予算はないんです。。。

なので、1番を行いたいです。

>Viewに90度回転させて書くことはできますか?
  すみません。できないです。
  教えて頂けますか?
  

花子 2007/10/12(金) 17:48:14
連続ですみません。
CreateFontで検索したらサンプルが見つかりそうなので、
もう少し調べてみます。

たいちう 2007/10/12(金) 18:00:20
> >Viewに90度回転させて書くことはできますか?
>   すみません。できないです。
>   教えて頂けますか?

Viewに描くのはホンの第一歩で、FlexGridに描くためのタイミングを掴むために、
WndProcを書き換えたり、セルの位置と場所を取得してそこに描いたり、
フォーカスの当たり具合によって表示を変えたりとか、
しなくてはならないことが多いけど、、、
難しいし手間もかかるし、あまりお勧めできないんだけど。

1.Viewにとにかく文字を描く。
2.フォントを作って大きな文字を描く。
3.回転させたフォントを作って文字を描く。
4.場合によっては、一文字ずつ位置を計算して別々に描く。

ここまでがViewに90度回転させて描くです。
どこまでできますか?

PATIO 2007/10/15(月) 10:37:17
もし違っていたらごめんなさい。

90度回転させて書くと言うのは、縦書きにすると言う意味ではなくて
文字が寝転んだ状態になるように書くと言う意味なんでしょうか?
いえ、縦書きで良いなら最悪一文字毎に改行させると言う手もあるかなと
思ったんですけれど。固定ピッチフォントで良いのであれば、
それが一番簡単な気がします。

普通に横書きにした物をそのまま90度回転させたようなものを
必要としているのであれば、恐らくたいちうさんが言われた方法をとるしか
ないのでしょうけれど。
ちなみにたいちうさんの2の案で実行時にメモリ上でビットマップを
作成すると言う案は駄目なんでしょうか?
自前で描画する場合は、FlexGridに描くために色々やらなきゃいけない事が多いと
思うので、ビットマップを作成して設定した方が楽かなと思います。
但し、ビットマップを作るにしてもView上で文字を90度回転して描くと言う部分は
できる必要がありますね。

たいちう 2007/10/15(月) 13:11:26
FlexGridのセル毎に設定するのは無理だけど、
縦書き用のフォントを使うと少し楽かも。
フォント名が"@"で始まるやつ。

古いスレッドには追加発言できません。