トップ回答者
ダイアログ上のスタティックテキストの背景色をスタティックテキストの長さに合わせて変更したい

質問
-
お世話になります、鏑木と申します。
現在、Windows CE 6.0にてVisual Studio 2005のC++のダイアログベースアプリケーションの開発をしております。
今回お聞きしたい内容はタイトルの通りなのですが、これは当たり前の動作ではないかと自分では思っていました。
ダイアログ上にスタティックテキストを置き、そのスタティックテキストのメンバ変数CStatic m_st_textを作成し、
m_st_text.SetBkColor(RGB(0,0,0))とすれば、そのスタティックテキストの大きさに対応した背景全ての色
が変化すると思います。
ですが、現在の開発環境(Widows CE)ではなぜか、そのようにするとスタティックテキスト領域内の入力された文字部分
の背景のみの色が変化され、その外の、文字が入力されていないスタティックテキスト領域の余った部分はアプリケーションの
下の画像(デスクトップの画像)が表示されてしまいます。
この原因や対応策として考えられることがありましたら、ご意見を頂ければと思っております。
尚、今までの私の対応としては
SetBkColorではなく、ブラシを作成し、それをSelectObjectする。
OnEraseBkgndを呼び出し、背景処理をさせる
としたのですが、結果は同じでした。
開発環境は前述しましたとおり
Windows CE 6.0
Visual Studio 2005
です。
回答
-
皆さんのご指摘の通りですが、更新領域のみが背景も再描画されます。
おそらく、MFC の DDX を利用していると思われますが、この場合、MFC は TextOut を利用しているのでは、とも思います。
DDX を利用せず、API の DrawText あるいは DrawTextEx を利用すれば、描画テキストと描画 RECT を指定する形式なので、背景色の再描画も行われると思います。
すべての返信
-
皆さんのご指摘の通りですが、更新領域のみが背景も再描画されます。
おそらく、MFC の DDX を利用していると思われますが、この場合、MFC は TextOut を利用しているのでは、とも思います。
DDX を利用せず、API の DrawText あるいは DrawTextEx を利用すれば、描画テキストと描画 RECT を指定する形式なので、背景色の再描画も行われると思います。 -
ミッヒー様、いつもご回答ありがとうございます。
>おそらく、MFC の DDX を利用していると思われますが、この場合、MFC は TextOut を利用しているのでは、とも思います。
>DDX を利用せず、API の DrawText あるいは DrawTextEx を利用すれば、描画テキストと描画 RECT を指定する形式なので、背景色の再描画も行われると思います。
現在のテキストの出力方法はDrawTextです。ミッヒー様の言うとおり、背景色の再描画をすることが出来るのですが、その対応する背景部分がどうも文字の下のみのようです。。
なので、文字を入力するまえに空白文字を入力した後に、その上に文字を重ねて表示させることで、スタティックテキストの文字以外の隙間をうめるような操作をしています。。
ただ、これだとちらつきが。。