- PR -

そもそもオーナードローとは? - ToolBarにも適用できるのか

1
投稿者投稿内容
あぶぽん
大ベテラン
会議室デビュー日: 2005/10/20
投稿数: 205
投稿日時: 2005-10-24 15:03
ToolBarの背景色を変えたいと思っているのですが、

C# での Toolbar と MainMenu のカスタマイズ
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=4539&forum=7&3

で議論したように一筋縄ではいかないようですね。

そこで、オーナードローというお話が出てきたのですが、
.NET初心者の私には「オーナードロー」の概念自体が分かりません。

調べてみると、コントロール毎にそのやり方も異なるようで、
「Tabコントロール背景設定の方法」
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=25091&forum=7
は、分かってもToolBarの背景の設定方法は分かりません。

そこで、そもそもオーナードローというのはどういうものなのか、
その概念を教えて頂けませんでしょうか。

よろしくお願い致します。

まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2005-10-24 16:00
引用:

そこで、そもそもオーナードローというのはどういうものなのか、
その概念を教えて頂けませんでしょうか。


細かい言葉の説明だとつらいのですが、

ウィンドウクラス(ウィンドウハンドルのウィンドウでいいはず)には既定のウィンドウプロシージャがあり、
OSからのメッセージにしたがって既定の描画をおこなっています。
普通何もしなくてもコントロールは目に見えてると思います。
オーナードローは言葉のとおりそのウィンドウの所有者が描画をおこなうことです。
それを自分をトリガーにしておこなうことはできませんので、
有名どころで、MeasureItem,DrawItemというメッセージがウィンドウプロシージャに通知されます。
それを受け取った側はそれぞれでそのときの描画対象の領域の大きさを決めたり、実際の描画をおこないます。
つまりOSから、「今からXXXを描くので大きさを決めてください」「今からXXXが表示されるのでこの用紙に表示するものを書いてください」
というメッセージが届き、答えを返すという仕組みです。
どぼんさんのTips「ListBoxの項目を自分で描画する」を参照してみてください。
http://dobon.net/

#お役に立てるかな
あぶぽん
大ベテラン
会議室デビュー日: 2005/10/20
投稿数: 205
投稿日時: 2005-10-24 17:53
まどかさん、有り難うございます。

オーナードローとは何かということが、良く分かりました。

実は前のプロジェクトで先輩に言われるままにやってたみたいです。
意味が理解できて納得です。

しかしながら、ToolBarに関してはやはりオーナードローはできない
ということなのでしょうか?

DrawModeプロパティもないですし、それらしきものは見当たりません。
ToolBarの背景色を変えるというのは一般的ではないのでしょうか?

デザイナー曰く、アイコンを変えただけでは背景色とマッチしないそうで、
オーナードローとはその名の如く、どんなものでも自由に描画できるもの
かと思ってましたが、無理なのでしょうか?
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2005-10-24 18:22
引用:

オーナードローとはその名の如く、どんなものでも自由に描画できるもの
かと思ってましたが、無理なのでしょうか?


基本的には描画が必要となるメッセージをフックすればできるはずです。
言語(.NET)に装備されていないものは、WndProcをOverrideすることになるでしょう。
#ListViewには付けてほしかった。。。

オーナードローに関してはサンプルなどでそこでやってることを理解しているというのが
私の状況ですので具体的なことは言えません。m(_ _)m

ToolBarに関してはコモンコントロールのメッセージが対象となるようです。
PAPA'n VBさんのサイトです。
http://www.mitene.or.jp/~sugisita/index.html
ここにVB6ですがコモンコントロールにToolBarのオーナードローのサンプルがあります。
土台をドローしているかは微妙ですが。。。
ま、何かのきっかけになれば。
あぶぽん
大ベテラン
会議室デビュー日: 2005/10/20
投稿数: 205
投稿日時: 2005-10-24 18:48
まどかさん、さんきゅーです。

引用:

PAPA'n VBさんのサイトです。
http://www.mitene.or.jp/~sugisita/index.html
ここにVB6ですがコモンコントロールにToolBarのオーナードローのサンプルがあります。
土台をドローしているかは微妙ですが。。。
ま、何かのきっかけになれば。


難しそうですが、がんばって読んでみます。

ありがとうございます。

# デビュー5日目にして「常連さん」の称号が頂けました(*^_^*)
# 皆さま、これからも宜しくお願いします。
あぶぽん
大ベテラン
会議室デビュー日: 2005/10/20
投稿数: 205
投稿日時: 2005-10-24 20:16
みなさん、

良いサイトを見つけちゃいました。

ToolBarの一部のForeColor変更について
http://dobon.net/vb/bbs/log3-18/10962.html

TreeView文字のForeColor変更
http://dobon.net/vb/bbs/log3-17/10338.html

散々、探し回って結局どぼんですが。。。

ずっと、「オーナードロー」で探していたんです。

オーナードローとカスタムドローの違いと云うふうに、
私は認識しましたが、あっていますでしょうか?

  ToolBarボタンの背景色はオーナードローでは不可能であるが、
  カスタムドローなら可能である。

という訳で、システム規約にオーナードローまでは行うが、
カスタムドローは行わないと一行加えて(上司の判断です)、

私の仕事上のミッションは終了しました。

# もちろん、個人的にはToolBarボタンの色が変わったのを見るまで
# 追求しますよ!
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2005-10-24 22:58
引用:

  ToolBarボタンの背景色はオーナードローでは不可能であるが、
  カスタムドローなら可能である。

という訳で、システム規約にオーナードローまでは行うが、
カスタムドローは行わないと一行加えて(上司の判断です)、


ちょっと違和感がありましたので、一応念のため。
カスタムドローは標準外の一部をユーザーが変更できるようにするための専用のメッセージです。
そのメッセージに定義されている構造体のメンバに関しては、オーナードローしなくとも
そのメッセージの変えたいメンバの値を変更するだけで実現されます。
その他の処理は既定のウィンドウプロシージャが処理してくれます。
対してオーナードローは描画のすべてを自前でおこなう処理です。
1

スキルアップ/キャリアアップ(JOB@IT)