0

CStaticでカスタムコントロールを作成しようとしていますvc++が、いくつか問題があります。

私はもともと、スタイルのあるCStaticコントロールを使用していました。SS_BLACKRECTこれは、オンデマンドでコントロール上に画像を表示する必要があるまでの状況に適していました。

私は実際に画像をコントロールに描画する背後にあるすべてのロジスティクスを理解しましたが、他のものに干渉せずにそれを行う方法を理解できないようです。

基本的に、私はコントロールがほとんどの場合スタイルで通常として機能することを望んでCStaticSS_BLACKRECTます。

次に、代わりにコントロール上に画像を描画するメソッドを呼び出すことができる必要があります。私はを使って描画を行っていますが、メソッドとメソッドGDIの両方で試しましたが、成功しませんでした。描画することはできますが、ベースを呼び出すと、イメージの上に描画されます。OnPaint()DrawItem()OnPaint()CStatic::OnPaint()

通常のように描画できるようにする必要がありますが、その上に画像を挿入するだけです。メソッドでそれを実行しようとすると、DrawItem()明らかにSS_BLACKRECTスタイルを使用して描画しているのではなく、想定どおりにコントロールを描画するのを待っているため、問題が発生しました。

私が探しているのは、3つのうちの1つだと思います。GDI基本OnPaint()メソッドが終了した後に使用して描画する方法。コントロールにデフォルトSS_BLACKRECTのスタイルを描画させ、その後OWNERDRAW画像を描画させる方法。または、の描画を模倣するコードSS_BLACKRECT

CStatic最後のものが最も簡単かもしれませんが、デフォルトのDrawItemのようにコントロールを描画するために設定する必要があるすべてのものがわかりません。

4

2 に答える 2

1

ハンドラーを呼び出しDefault()てみてください。OnPaint()

CStatic次に、画像を描画しているかどうかに応じて、標準コントロールの上に描画できます。

于 2009-08-02T22:21:01.960 に答える
0

ここにいくつかのアイデアがあります:

画像の上に描画する場合CStatic::OnPaint()は、最初にそれを呼び出し、後で画像を描画してみてください。

それ以外の場合は、SS_BLACKRECTについて私がほとんど見たことがないので、CDC::FillSolidRect()取得したコントロールの長方形を渡して、GetClientRect()によって返された色を使用するだけで、描画を複製できるはずです。GetSysColor(COLOR_WINDOWFRAME)

于 2009-07-31T00:39:40.573 に答える