5

CStatic結果をコントロールの長方形の垂直方向の中央に配置するテキストの自動折り返し (複数行) を作成するにはどうすればよいですか?

私が解決しようとしている問題は次のとおりです。選択に応じて情報テキストを更新するCStaticの横にコントロールがあります。CComboBoxこのテキストは短くても長くてもかまいCStaticません。複数行を使用する場合と使用しない場合があります。情報テキストを垂直方向に中央揃えにして、CComboBox.

ここに問題があります:

  • 1行だけ高くすればCStatic、1行のテキストは見栄えが良いのですが、複数行は収まらず表示されません。

  • 2行に収まるようにCStatic高くすると、長いテキスト(2行)には見栄えがしますが、テキストが上に配置されるため、1行のテキストは上にシフトしCStaticます。質問に記載されている動作を使用するCStaticと、これが解決されます...

垂直方向に中央に配置された複数行のコントロールを簡単に取得できない場合はCStatic、テキストの量に応じてコントロールの四角形のサイズを変更することもできます。しかし、この場合、別の問題があります。

CStatic特定の幅でテキストに必要な行数をプログラムで調べるにはどうすればよいですか?

4

1 に答える 1

4

残念ながら、複数行のテキストをCStatic.

次の質問には解決策がありますが、使用するのは少し面倒です。フラグを使用CDC::DrawTextExして、DT_CALCRECT書式設定するテキストのサイズ (ピクセル単位) を取得します。それをテキスト行の高さで割ることによって( から取得できるフォント情報DCに加えて、それがどれくらいかはわかりませんが、おそらく固定量だと思います) で行間隔を指定するDrawTextと、得られる行数 (の概算) が得られます。その後、コントロール四角形のサイズを変更できます。

考えてみると、おそらく行に変換せずに、コントロールのサイズを変更した方がよいでしょうDrawTextEx:)

このようなことを正確に行うには、通常、いくつかの実験が必要であり、OS のバージョン間で動作が異なる場合があります。慎重に進んでください。

于 2013-02-12T10:29:45.197 に答える