- 題名: 垂直スクロールバーの背景色の設定
- 日時: 2004/07/27 19:19:42
- ID: 5149
- この記事の返信元:
- (なし)
- この記事への返信:
- [5271] Re[1]: 垂直スクロールバーの背景色の設定2004/08/02 3:46:20
- ツリーを表示
■No5274に返信(平ちゃんさんの記事)
平ちゃんさん、こんにちは。深山と申します。
然して必要ではなかったのかも知れませんが、興味があったので調べてみました。
スクロールバーから親ウィンドウに通知される WM_CTLCOLORSCROLLBAR メッセージを
トラップすることで背景色の変更が出来るようです。
# ただ、 HTML のスタイルシートのような細かい制御は出来ないようです。
WM_CTLCOLORSCROLLBAR Notification
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/scrollbars/scrollbarreference/scrollbarmessages/wm_ctlcolorscrollbar.asp
簡単なサンプルを作成してみたので、よろしければ参考にして下さいな。
# なお、このサンプルを作成するにあたって、以下のサイト及び書込みを参考にさせて頂きました。
第14章 スクロールバー
http://homepage2.nifty.com/Mr_XRAY/Halbow/Chap14.html
[AB3] エディットコントロールの色変更
http://dbp.cool.ne.jp/patio/patio.cgi?mode=view&no=158
Private Const WM_CREATE As Int32 = &H1
Private Const WM_DESTROY As Int32 = &H2
Private Const WM_CTLCOLORSCROLLBAR As Int32 = &H137
<System.Runtime.InteropServices.DllImport("Gdi32.dll")> _
Private Shared Function CreateSolidBrush(ByVal crColor As Int32) As IntPtr
End Function
<System.Runtime.InteropServices.DllImport("Gdi32.dll")> _
Private Shared Function DeleteObject(ByVal hObject As IntPtr) As Boolean
End Function
Private hBrush As IntPtr
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
Select Case m.Msg
Case WM_CREATE
hBrush = CreateSolidBrush(&HFF0000)
Case WM_DESTROY
DeleteObject(hBrush)
Case WM_CTLCOLORSCROLLBAR
If m.LParam.Equals(VScrollBar1.Handle) Then
m.Result = hBrush
Return
End If
End Select
MyBase.WndProc(m)
End Sub
# 少しだけ補足(蛇足?)
# CreateSolidBrush の引数は COLORREF で、 RGB 値の並びは 0x00bbggrr となっています。
# 一方 Color.ToArgb メソッドで得られる値は 0xaarrggbb ですので、コーディングの際には
# 注意が必要です。<いや、自分が最初それで失敗したというだけなのですけど(汗)
COLORREF
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/colors_9xiq.asp
Color.ToArgb メソッド
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfSystemDrawingColorClassToArgbTopic.asp
分類:[.NET]
いつもお世話様です。
VB.NET 初心者の質問です。
垂直スクロールバーの背景色を設定する方法を教えてください。
垂直スクロールバーをフォームに貼り付けてコードを書いたのですが背景色が変わりません。
VScrollBar1.BackColor = Color.Blue
念のため
VScrollBar1.ForeColor = Color.Blue
ともしましたが背景色は元のままです。
他に設定する必要のあるプロパティ等があるのでしょうか。
すみませんがお願いします。