tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^6: DataGridView右のスクロールバーの模様を変える方法
投稿日: 2009/10/29(Thu) 14:36
投稿者camputer
 こんにちは。
ご報告になります。なんとかDataGridViewスクロールバーの背景と、
他のVScrollBarの背景を変更することができました。

http://msdn.microsoft.com/ja-jp/library/system.windows.forms.datagridview(VS.80).aspx
 で、「Inherits Control」となっている部分がビルドできるのでそのまま書き写して
いましたが、Case WM_CTLCOLORSCROLLBARが取れず検証にかなり時間を費やしました。。。

Public Class DGV
    Inherits DataGridView
    Private Const WM_CREATE As Int32 = &H1
    Private Const WM_DESTROY As Int32 = &H2
    Private Const WM_CTLCOLORSCROLLBAR As Int32 = &H137
    Private Const WM_PAINT As Int32 = &HF
    <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(&HFF)
            Case WM_DESTROY
                DeleteObject(hBrush)
            Case WM_CTLCOLORSCROLLBAR
                    hBrush = CreateSolidBrush(&HFF)
                    m.Result = hBrush
                    Return
            Case WM_PAINT
        End Select
        MyBase.WndProc(m)
    End Sub
End Class

 あと、VScrollBar Classを作成したつもりが「H」ScrollBarが出てくる現象ですが、
    Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams
        Get
            Const SBS_VERT As Integer = 1
            Dim cp As CreateParams = MyBase.CreateParams
            cp.Style = cp.Style Or SBS_VERT
            cp.Parent = cp.Parent
            Return cp
        End Get
    End Property
のようにSBS_VERTを与えてVScrollBarに変形できました。
HScrollBarの派生盤(?)としての「VScrollBar」のようでございます。
 こちらについても直下のフォーム内でオーバーライドして、WM_CTLCOLORSCROLLBARを
取れたので、背景色を変更出来ました。(ベースForm1上のコントロールはすべて
Form1上でのオーバーライドでWM_CTLCOLORSCROLLBARを取れるもの、と思い込んでおりまして、
検証にかなり時間を費やしました。。。orz)
 前景色(ドラッグできる灰色のボタンなど)については、調査中に何度か
「ボタンドラッグの度に灰色に書き直されているような挙動が〜」という記事を
見かけましたので、おそらく負荷が大きくなるだとうと考えてやめました。

 たくボン様からWM_CTLCOLORSCROLLBARをお教えいただいたおかげでございます。
またいっこ新しいことができるようになりましたm(_ _)m
どうもありがとうございました!

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。