VC6やVC2005で、自作アプリ内のスクロールバーを
独自の画像で描画したいと思っています。
CEditやCListBoxやCListCtrlを使用しているのですが、
これらのコントロールが標準で持つスクロールバーを
独自に描画することはできるのでしょうか?
サンプルなどをご存じのかたがいらっしゃれば情報をいただけると嬉しいです。よろしくお願いいたします。
>CEditやCListBoxやCListCtrlを使用しているのですが、
>これらのコントロールが標準で持つスクロールバーを
>独自に描画することはできるのでしょうか?
標準コントロールに描画されるスクロールバーの
表示変更はできません。これらのスクロールバーは、
独立したコントロールではありません。
自前の窓に好きなスクロールバーを実装することは
もちろん可能です。
> 標準コントロールに描画されるスクロールバーの
> 表示変更はできません。これらのスクロールバーは、
> 独立したコントロールではありません。
ということは、エディットボックスやリストボックスを使っている限りは
スクロールバーの表示はOSの設定に依存してしまい、
そのスクロールバーの表示をオーナー描画しようと思ったら
コントロール自体から自前で作るしかないということになるのでしょうか?
標準コントロールを「スクロールバーなし」スタイルで作って、スクロールバーは自前で作って子コントロールとして追加し、スクロール処理も自前で実装してやればできそうな気がします。
面倒な割に得るものが少ない気がしますけど。
Prof-UISというライブラリを見つけ、サンプルに含まれている
リストボックスやエディットボックスをSpy++で調べてみたところ、
スクロールバーコントロールを上に重ねているようでした。
aetosさんの提案された方法そのもののようです。
同じサンプル内でも、内部のスクロールバーをそのまま使っているサンプルは
Officeスタイルなどにしても標準のスクロールバーのまま描画されていました。
この方法を自前で作れば可能なのだとは思いますが、
たしかに面倒な割に得るものが少ないですね…。
ありがとうございます。
> 自前の窓に好きなスクロールバーを実装することは
> もちろん可能です。
すみません、CScrollBarを派生させて自分で描画するサンプルって
なにかご存じないでしょうか。
ボタンなどのサンプルはいろいろ見つかるのですが、
スクロールバーに関しては探し方が下手なのか、見つかりません。
サンプルは知りません。すみません。
CWndをpublicに継承しているだけなので
OnPaint()等の描画処理を書けば良いだけなのでは?
なんかもっと難しいことがしたいのでしょうか。
もっとも、この程度のシンプルなコントロールなら
全て自前で実装してもたいした事ありませんけど。
すみません。ちょっと訂正。
WindowProc()をオーバーライドしたほうが簡単かも。
ツイート | ![]() |