ツールバーの背景にビットマップ

解決


たこ  2009-03-31 08:48:27  No: 69904

初投稿です。よろしくお願いします。

タイトルのようにツールバーの背景をビットマップにしたいと思ってますがうまくいきません。
イメージとしてはVistaのウィンドウズムービーメーカーのような、背景が黒色のツールバーを作りたいです


仲澤@失業者  2009-03-31 20:04:08  No: 69905

1.MFCなのかSDKなのかくらいは書きましょう。
2.何がどのようにうまく行かなかったのか、詳しく書きましょう。

など、不明な点が多すぎて的確ではない回答になるかも
しれませんが、
もし、ツールバーコントロールを使用しているのなら、
Create時にTBSTYLE_CUSTOMERASEを指定すればNM_CUSTOMDRAW 
が受け取れるので好きにできます。


たこ  2009-03-31 22:21:19  No: 69906

回答ありがとうございます

>不明な点が多すぎて的確ではない
すいませんでした

開発環境は
WindowsVista
VisualC++ 2008 Express Edition
SDK
です

方法としてはいろいろと試しました
1) ツールバーのクラスの背景ブラシをビットマップブラシに変える
2) ツールバーのウィンドウスタイルにTBSTYLE_TRANSPARENTとTBSTYLE_FLATを指定してツールバーの後ろの親ウィンドウに描画する
(TBSTYLE_TRANSPARENTで後ろが透き通ると思ったから)
3) 仲澤@失業者さんが言う通りTBSTYLE_CUSTOMERASEを指定してWM_NOTIFYで描画を試みましたが、やり方が悪いのか、一瞬だけしか描画されているのが見えてすぐに消えてしまいました。

ちなみにWMMのツールバーのスタイルは
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CCS_TOP | CCS_NORESIZE | CCS_NOPARENTALIGN | CCS_NODIVIDER | TBSTYLE_TOOLTIPS | TBSTYLE_LIST | TBSTYLE_TRANSPARENT | TBSTYLE_FLAT
となってました
つまり、TBSTYLE_CUSTOMERASEなしであのようなことができているということです

もしWMMと同じやり方をするのが難しいのであれば、TBSTYLE_CUSTOMERASEを使って目的を実現できるやり方を教えていたただきたいと思います

(WMMにこだわるのはプロのやり方が一番効率が良くてパソコンに優しいやり方だと思ったからです)


subaru  2009-03-31 23:13:31  No: 69907

ツールバー単体ではわかりませんが、Rebarコントロールを使えばできます。
ここがわかりやすいかな。
http://hp.vector.co.jp/authors/VA016117/coolbar.html


仲澤@失業者  2009-03-31 23:51:57  No: 69908

Vistaが手元にないので詳しく調べられませんが、
WMMのツールバーがTBSTYLE_TRANSPARENT なら、ツールバー
の背景は透明です。この場合、ツールバーの背景は、
その親のクライアント領域が透けて見えていることになります。
ただし、MFCの場合は当該の親はたいていコントロールバーだったり
するので、WMMと同じ方法はとれない可能性があります。

んで、TBSTYLE_CUSTOMERASEを使う場合は、NM_CUSTOMDRAW 時の戻り値が
dwDrawStageにからんで複雑です。正しい値を設定して戻さないと、
おっしゃる通りまた消されてしまう場合もあるでしょう。
この辺はマニュアルを参考にしてください。自分も全てを把握
できているわけではありません。

んで、そんな面倒なことはやめて、ツールバーをサブクラス化
して、WM_ERASEBKGNDなり、WM_PAINTなりで、ビットマップを
描画する。っていう、はるかに手っ取り手段もあります(笑)。


たこ  2009-04-01 01:12:27  No: 69909

subaruさん, 仲澤@失業者1さん
回答ありがとうございます

はじめにWMMをさらに詳しく調べてみたところ
1ドットだけReBarWindow32が使われていたのは発見しました
なので、ReBarコントロールを使っていきたいと思います

>ツールバーをサブクラス化
>して、WM_ERASEBKGNDなり、WM_PAINTなりで、ビットマップを
>描画する
やってみたところボタンもビットマップで塗りつぶされてしまいましたw
けれど、ウィンドウサイズの変更時に画面がチカチカするのを防ぐのにWM_ERASEBKGNDが使えることを知っていい勉強になりました

ありがとうございました


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加