C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: VB2005 フォームタイトルの色を変更したい


(過去ログ 44 を表示中)

[トピック内 12 記事 (1 - 12 表示)]  << 0 >>

■23031 / inTopicNo.1)  VB2005 フォームタイトルの色を変更したい
  
□投稿者/ ほげほげ (1回)-(2008/08/07(Thu) 14:54:45)

分類:[VB.NET/VB2005] 

(VS2005のVB5におけるwinodwsアプリケーション)
フォームの右上の、タイトルバーに表示される背景色を変更させることはできますか?
初期値は、システムカラーを設定しているように表示されますが、
該当するプロパティがみつからないため困っています。

変更することは、できないのでしょうか?
引用返信 編集キー/
■23038 / inTopicNo.2)  Re[1]: VB2005 フォームタイトルの色を変更したい
□投稿者/ もょもと (3回)-(2008/08/07(Thu) 16:27:49)
2008/08/07(Thu) 16:28:29 編集(投稿者)

APIでシステムカラーの変更をするのはなし、という前提でのお話ですよね?

どうしてもタイトルバーの背景色を変更したいのであれば、
既存のタイトルバーの上に自作のタイトルバーを描画する、
という方法はいかがでしょうか。

…該当するプロパティはないようですね。
引用返信 編集キー/
■23040 / inTopicNo.3)  Re[2]: VB2005 フォームタイトルの色を変更したい
□投稿者/ みきぬ (37回)-(2008/08/07(Thu) 16:43:11)
いっそタイトルバーを消して、自前でイロイロ描いてみるとか。
引用返信 編集キー/
■23047 / inTopicNo.4)  Re[2]: VB2005 フォームタイトルの色を変更したい
□投稿者/ ほげほげ (2回)-(2008/08/07(Thu) 17:43:58)
No23038 (もょもと さん) に返信
> 2008/08/07(Thu) 16:28:29 編集(投稿者)
>
> APIでシステムカラーの変更をするのはなし、という前提でのお話ですよね?
>
> どうしてもタイトルバーの背景色を変更したいのであれば、
> 既存のタイトルバーの上に自作のタイトルバーを描画する、
> という方法はいかがでしょうか。
>
> …該当するプロパティはないようですね。

返信ありがとうございます。
そうですねー。APIでシステムカラーの変更はなしです(泣)。
自作のタイトルバーを描画する方法は、タイトルバーだけの高さで
いまのフォームに描画するような方法で、イメージ的にはあってますか?
引用返信 編集キー/
■23049 / inTopicNo.5)  Re[3]: VB2005 フォームタイトルの色を変更したい
□投稿者/ シャノン (562回)-(2008/08/07(Thu) 17:52:20)
No23047 (ほげほげ さん) に返信
> 返信ありがとうございます。
> そうですねー。APIでシステムカラーの変更はなしです(泣)。
> 自作のタイトルバーを描画する方法は、タイトルバーだけの高さで
> いまのフォームに描画するような方法で、イメージ的にはあってますか?

それでいいと思います。
ただ、タイトルバーをドラッグしてのウィンドウ移動とか、ウィンドウ左上のシステムメニュー、右上の最小化/最大化/閉じるボタン等の挙動も全てコーディングする必要がありますよ。

# GetDCEx API なら、ウィンドウ領域全体の DC を取得できるけど…
引用返信 編集キー/
■23053 / inTopicNo.6)  Re[3]: VB2005 フォームタイトルの色を変更したい
□投稿者/ 高見知英 (13回)-(2008/08/07(Thu) 18:20:28)
高見知英 さんの Web サイト
No23040 (みきぬ さん) に返信
> いっそタイトルバーを消して、自前でイロイロ描いてみるとか。
わたしもこの方法をおすすめします。
タイトルバーのような非クライアント領域は、WM_NCPAINTなどといったメッセージで再描画されているので、そこをオーバーライドしてごにょごにょとすれば何とかできるかと思いますが、その方法はわたしは知りませんので・・・。
非クライアント領域じゃない部分で、非クライアント領域の動作(ウィンドウの移動やリサイズなど)を行いたい場合は、WM_NCHITTESTメッセージをSendMessageするといいですよ。今はコードサンプルを見せられないですが、WM_NCHITTESTでググればきっと出てくるはず。
引用返信 編集キー/
■23058 / inTopicNo.7)  Re[4]: VB2005 フォームタイトルの色を変更したい
□投稿者/ やじゅ (523回)-(2008/08/07(Thu) 19:16:26)
やじゅ さんの Web サイト
VB5らしいので、かなり古いです。
グラデーションバー
http://www.vbstation.net/spec/T1.htm

引用返信 編集キー/
■23213 / inTopicNo.8)  Re[5]: VB2005 フォームタイトルの色を変更したい
□投稿者/ ほげほげ (3回)-(2008/08/11(Mon) 13:35:37)
No23058 (やじゅ さん) に返信
> VB5らしいので、かなり古いです。
> グラデーションバー
> http://www.vbstation.net/spec/T1.htm
>

添付有難うございます。
VB2005にエンコードして試してみます。
結果がでるまで暫らく、かかりますが結果を報告致します。
ありがとうございました。
引用返信 編集キー/
■23676 / inTopicNo.9)  Re[6]: VB2005 フォームタイトルの色を変更したい
□投稿者/ ほげほげ (4回)-(2008/08/20(Wed) 11:22:49)
無事VB.NETバージョンに、変換が完了しました!
情報提供ありがとうございました。

ただ問題点が2つほど、発生しています。

問題1:作成したEXEをタスクバーから起動させると、色が反映されない。
    →(当方で、イベントの種類がわからず、対応できていないかもしれません。)

問題2:変更色で表示している画面のフォーム内に、マウスカーソルを動かしていると
    タイトルバーの描画が、ちらつく。

上記2点とも、イベントドリブンの種類が分かれば、解決できる問題かと思いますが
もし、イベントの種類もしくは対応の方針などアドバイスがありましたら
教えてください。

引用返信 編集キー/
■23684 / inTopicNo.10)  Re[1]: VB2005 フォームタイトルの色を変更したい
□投稿者/ れい (741回)-(2008/08/20(Wed) 12:01:13)
いろいろ解決してるようで、いまさらなんですが。

No23031 (ほげほげ さん) に返信
> 変更することは、できないのでしょうか?

できません。
なので、

No23040 (みきぬ さん) に返信
> いっそタイトルバーを消して、自前でイロイロ描いてみるとか。

No23053 (高見知英 さん) に返信
> わたしもこの方法をおすすめします。

私もそれがオススメです。
で、

No23049 (シャノン さん) に返信
> ただ、タイトルバーをドラッグしてのウィンドウ移動とか、ウィンドウ左上のシステムメニュー、右上の最小化/最大化/閉じるボタン等の挙動も全てコーディングする必要がありますよ。

No23053 (高見知英 さん) に返信
> タイトルバーのような非クライアント領域は、WM_NCPAINTなどといったメッセージで再描画されているので、そこをオーバーライドしてごにょごにょとすれば何とかできるかと思いますが、その方法はわたしは知りませんので・・・。

これらが激しくめんどくさいです。
なのでやじゅさんの示したような既存の誰かがつくったものを使うのがよいです。

ただ自分で描くと将来のWindowマネージャーの変更に対応できません。
Vistaでもかなり変わりましたし。

将来の拡張やバージョン依存の無い方法は難しいのですが、
私が昔使った方法は以下のようなものです。

・DrawCaption、DrawEdgeなどを使って、「キャプションバー」や「枠」をビットマップに描く
・そのビットマップに変更を加える
・WM_NCPAINTで描画する

これだと、

> ただ、タイトルバーをドラッグしてのウィンドウ移動とか、ウィンドウ左上のシステムメニュー、右上の最小化/最大化/閉じるボタン等の挙動も全てコーディングする必要がありますよ。

このコーディングが殆ど要りません。
また、Windowsのバージョンが変わって、UIに変更が加わってもそれほど問題になりません。

Windows98時代に作ったソフトがありますが、
Vistaになった今でも正常に描画されます。

参考になれば。
引用返信 編集キー/
■23688 / inTopicNo.11)  Re[7]: VB2005 フォームタイトルの色を変更したい
□投稿者/ やじゅ (552回)-(2008/08/20(Wed) 12:56:21)
やじゅ さんの Web サイト
2008/08/20(Wed) 18:56:38 編集(投稿者)

No23676 (ほげほげ さん) に返信
> 無事VB.NETバージョンに、変換が完了しました!
>
> 上記2点とも、イベントドリブンの種類が分かれば、解決できる問題かと思いますが
> もし、イベントの種類もしくは対応の方針などアドバイスがありましたら
> 教えてください。
>

VB.NETへ変換する際の注意点として、変換前のVB5のWindowProc処理の部分がありますが
VB.NETでは、フォームのメソッドに↓を定義すればいいだけなので、気をつけて下さい。
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)

http://www.atmarkit.co.jp/fdotnet/dotnettips/327notitlebardlg/notitlebardlg.html

その上で、下記のようにWM_NCPAINT or WM_ACTIVEイベントにて、キャプションを描画
しているなら、問題1は描画されると思われます。
Case WM_NCPAINT : psubM_DrawCaption(hwnd)
Case WM_ACTIVE : psubM_DrawCaption(hwnd)
引用返信 編集キー/
■23721 / inTopicNo.12)  Re[8]: VB2005 フォームタイトルの色を変更したい
□投稿者/ ほげほげ (5回)-(2008/08/20(Wed) 16:38:36)
無事、自己解決できました。
皆さん有難うございました。

参考までに、それぞれの問題点に対しての対処方法を記載します。

問題1:Sub WndProc(ByRef m As System.Windows.Forms.Message)の
 m.MSGの変数値がWM_ACTIVEである場合も、描画できるように変更することで
 解決できました。

問題2:Sub WndProc(ByRef m As System.Windows.Forms.Message)のメソッド内に
 現在、アクティブかどうか判定するフラグを持つことで、対応できました。

VISTA対応は、考えていないので今回の対応で、乗り越えることができました。

皆さんの御協力に大変感謝しております。
次は、皆さんのヘルプに回れるよう精進します。

以上
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -