C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ComboBoxRendererによる描画

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■95752 / inTopicNo.1)  ComboBoxRendererによる描画
  
□投稿者/ OA (11回)-(2020/09/17(Thu) 16:44:29)

分類:[VB.NET/VB2005 以降] 

開発環境は、VB2019、.Net4.7.2、Windows10、Windowsフォームアプリケーションです。

Windows7時代に開発したアプリでComboBoxRenderer.DrawDropDownButtonで描画している箇所があります。
Windows10になってVisualStyles.ComboBoxStateの違いによる差があまりなく、わかりにくくなりました。(私的感覚ですが・・・)
VisualStyles.ComboBoxState.Pressedの場合にボタン表面をColor色で描画したり、OSのテーマ変更でもっと目立つようにできないでしょうか?

以下は実験用のコードです。
実際の実装はDataGridViewのヘッダに描画していて、SortやFilterが適用されている場合に、VisualStyles.ComboBoxState.Pressedで描画しています。

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim g As Graphics = Me.CreateGraphics
        Dim rect0 As New Rectangle(0, 0, 32, 32)
        Dim rect1 As New Rectangle(40, 0, 32, 32)
        Dim rect2 As New Rectangle(80, 0, 32, 32)
        ComboBoxRenderer.DrawDropDownButton(g, rect0, VisualStyles.ComboBoxState.Normal)
        ComboBoxRenderer.DrawDropDownButton(g, rect1, VisualStyles.ComboBoxState.Hot)
        ComboBoxRenderer.DrawDropDownButton(g, rect2, VisualStyles.ComboBoxState.Pressed)
    End Sub

引用返信 編集キー/
■95754 / inTopicNo.2)  Re[1]: ComboBoxRendererによる描画
□投稿者/ OA (12回)-(2020/09/17(Thu) 21:23:35)
No95752 (OA さん) に返信
とりあえず、面倒ですがImageAttributes.SetRemapTableで色を入れ替えて
GDI+でDrawImageすることで対応しました。
もっと簡単な方法があれば教えてください。


    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Using bmp As New Bitmap(32, 32), g = Graphics.FromImage(bmp), g1 = Me.CreateGraphics
            Dim rect As New Rectangle(0, 0, 32, 32)
            ComboBoxRenderer.DrawDropDownButton(g, rect, VisualStyles.ComboBoxState.Pressed)
            Dim orgColor = bmp.GetPixel(1, 1)
            Dim destColor = Color.Orange
            Dim map() = {New System.Drawing.Imaging.ColorMap() With {.OldColor = orgColor, .NewColor = destColor}}
            Using ia As New System.Drawing.Imaging.ImageAttributes()
                ia.SetRemapTable(map)
                g1.DrawImage(bmp, rect, 0, 0, bmp.Width, bmp.Height, GraphicsUnit.Pixel, ia)
            End Using
        End Using
    End Sub

引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ