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

タイトル Re^5: DataGridView右のスクロールバーの模様を変える方法
投稿日: 2009/10/06(Tue) 17:00
投稿者camputer
 こんにちは。たくボン様からWM_CTLCOLORSCROLLBARの存在とサブクラス化する
という事を教えていただいた後、
>独自の描画関数を用意すれば〜
がどうしても分からなそうだったのと、VScrollBar&DataGridViewの連動方法が
分かってきたので、まず普通にVScrollBarの色を変えるところから
トライしてみております。

 そこでForm1クラス上に次のように書いてみたのですが、
(以下、http://dobon.net/vb/bbs/log3-9/5149.htmlからいただいてきました)

    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

これではどうもForm1直上にあるVScrollBarでないとWM_CTLCOLORSCROLLBARを
拾えないようでございます。
(Form1直上のVScrollBarであれば背景のみ色を変更できるようになりました)


 そこでサブクラス化すればいいのかな(?)、と考えまして、
dobon.net様の  http://dobon.net/vb/dotnet/help/derivedcontrol.html 
                    の「Visual Studio 2005以降の場合」と
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.vscrollbar(VS.80).aspx を
参考にさせていただきまして

Public Class VScrollBar
    Inherits ScrollBar
    Dim VScrollBar1 As VScrollBar
     :
     :
End Class

を作成してその中に上記サブルーチン類を入れてみたのですが、
これをいったんビルドしてみても何故か、ツールボックス上に「横」向きスクロールバーが
追加されてしまいます。
 また、このまま実行しても、このCase WM_CTLCOLORSCROLLBARには
入ってきませんでした。。(WM_CREATEとWM_DESTROYには入ってきております。)

 とんちんかんな質問でしたら申し訳ございませんが、どこか怪しそうな箇所が
ございましたら是非ともご指摘いただけないでしょうか。お時間のある時にでも
何かアドバイスいただければ非常に嬉しいです。
 どうぞよろしくお願いいたします。

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

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