タイトル : 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 どうもありがとうございました! |