タイトル : 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には入ってきております。) とんちんかんな質問でしたら申し訳ございませんが、どこか怪しそうな箇所が ございましたら是非ともご指摘いただけないでしょうか。お時間のある時にでも 何かアドバイスいただければ非常に嬉しいです。 どうぞよろしくお願いいたします。 |