DoboWiki
Top
> .NETプログラミング研究/6 をテンプレートにして作成
.NETプログラミング研究/6 をテンプレートにして作成
開始行:
#title(.NETプログラミング研究 第6号)
#navi(.NETプログラミング研究)
#contents
*.NETプログラミング研究 第6号 [#radc5145]
**.NET Tips [#ndf7ac1f]
***メニューにアイコンを表示する3 完結編 [#v69949e1]
またまた前回の続きです。今回でようやく本当に完結します。
さて、残る問題は
2.チェックが付いているとき(CheckedがTrueのとき)の処理
だけとなっていました。早速解決法を考えてみましょう。
メニューのチェックマークを描画するには通常APIのDrawFrameC...
#code(vbnet){{
'API宣言部分
Private Declare Function DrawFrameControl Lib "user32" _
Alias "DrawFrameControl" (ByVal hDC As IntPtr, _
<MarshalAs(UnmanagedType.Struct)> ByRef lpRect As...
ByVal un1 As Integer, _
ByVal un2 As Integer) As Integer
<StructLayout(LayoutKind.Sequential)> _
Private Structure RECT
Public Left As Integer
Public Top As Integer
Public Right As Integer
Public Bottom As Integer
End Structure
Private Const DFC_MENU = 2
Private Const DFCS_MENUBULLET = &H2
Private Const DFCS_MENUCHECK = &H1
'----------
'以下、描画のためのコード
'表示位置
Dim r1 As RECT
r1.Left = 0
r1.Right = 16
r1.Top = 0
r1.Bottom = 16
Dim r2 As RECT
r2.Left = 0
r2.Right = 16
r2.Top = 50
r2.Bottom = 66
Dim hdc As IntPtr = e.Graphics.GetHdc()
'メニューのチェックマークの描画
DrawFrameControl(hdc, r1, DFC_MENU, DFCS_MENUCHECK)
'メニューの排他的チェックマークの描画
DrawFrameControl(hdc, r2, DFC_MENU, DFCS_MENUBULLET)
e.Graphics.ReleaseHdc(hdc)
}}
ところが全く同じことが.NET FrameworkのControlPaint.DrawMe...
#code(vbnet){{
'メニューのチェックマークの描画
ControlPaint.DrawMenuGlyph(g, 0, 0, 16, 16, MenuGlyph.Che...
'メニューの排他的チェックマークの描画
ControlPaint.DrawMenuGlyph(g, 0, 50, 16, 16, MenuGlyph.Bu...
}}
しかしこの方法で描画されたマークは必ず白黒になるようで、...
次の例では新しく作成した16x16のBitmapオブジェクトにチェッ...
#code(vbnet){{
'新しいBitmapオブジェクトの作成
Dim bmp As New Bitmap(16, 16)
'作成したBitmapオブジェクトにチェックマークを描画
ControlPaint.DrawMenuGlyph(Graphics.FromImage(bmp), _
0, 0, 16, 16, MenuGlyph.Checkmark)
'色を入れ替えるための準備
Dim cms() As ColorMap = _
New ColorMap() {New ColorMap(), New ColorMap()}
'入れ替える色を指定する
cms(0).OldColor = Color.Black
cms(0).NewColor = SystemColors.MenuText
cms(1).OldColor = Color.White
cms(1).NewColor = Color.Transparent
'ImageAttributesオブジェクトの作成
Dim imageAttr As New ImageAttributes()
imageAttr.SetRemapTable(cms)
'ImageAttributesを指定して描画
g.DrawImage(bmp, New Rectangle(0, 0, bmp.Width, bmp.Heigh...
0, 0, bmp.Width, bmp.Height, GraphicsUnit.Pixel, _
imageAttr)
}}
さて、これでようやく必要な技術がそろいました。今まで紹介...
-[[ImageMenuItemクラス>https://dobon.net/vb/dotnet/sample...
苦労の末、せっかく出来上がったImageMenuItemクラスですが、...
**コメント [#h5fef7b7]
#comment
//これより下は編集しないでください
#pageinfo([[:Category/.NET]],2003-05-01 (木) 06:00:00,DOB...
終了行:
#title(.NETプログラミング研究 第6号)
#navi(.NETプログラミング研究)
#contents
*.NETプログラミング研究 第6号 [#radc5145]
**.NET Tips [#ndf7ac1f]
***メニューにアイコンを表示する3 完結編 [#v69949e1]
またまた前回の続きです。今回でようやく本当に完結します。
さて、残る問題は
2.チェックが付いているとき(CheckedがTrueのとき)の処理
だけとなっていました。早速解決法を考えてみましょう。
メニューのチェックマークを描画するには通常APIのDrawFrameC...
#code(vbnet){{
'API宣言部分
Private Declare Function DrawFrameControl Lib "user32" _
Alias "DrawFrameControl" (ByVal hDC As IntPtr, _
<MarshalAs(UnmanagedType.Struct)> ByRef lpRect As...
ByVal un1 As Integer, _
ByVal un2 As Integer) As Integer
<StructLayout(LayoutKind.Sequential)> _
Private Structure RECT
Public Left As Integer
Public Top As Integer
Public Right As Integer
Public Bottom As Integer
End Structure
Private Const DFC_MENU = 2
Private Const DFCS_MENUBULLET = &H2
Private Const DFCS_MENUCHECK = &H1
'----------
'以下、描画のためのコード
'表示位置
Dim r1 As RECT
r1.Left = 0
r1.Right = 16
r1.Top = 0
r1.Bottom = 16
Dim r2 As RECT
r2.Left = 0
r2.Right = 16
r2.Top = 50
r2.Bottom = 66
Dim hdc As IntPtr = e.Graphics.GetHdc()
'メニューのチェックマークの描画
DrawFrameControl(hdc, r1, DFC_MENU, DFCS_MENUCHECK)
'メニューの排他的チェックマークの描画
DrawFrameControl(hdc, r2, DFC_MENU, DFCS_MENUBULLET)
e.Graphics.ReleaseHdc(hdc)
}}
ところが全く同じことが.NET FrameworkのControlPaint.DrawMe...
#code(vbnet){{
'メニューのチェックマークの描画
ControlPaint.DrawMenuGlyph(g, 0, 0, 16, 16, MenuGlyph.Che...
'メニューの排他的チェックマークの描画
ControlPaint.DrawMenuGlyph(g, 0, 50, 16, 16, MenuGlyph.Bu...
}}
しかしこの方法で描画されたマークは必ず白黒になるようで、...
次の例では新しく作成した16x16のBitmapオブジェクトにチェッ...
#code(vbnet){{
'新しいBitmapオブジェクトの作成
Dim bmp As New Bitmap(16, 16)
'作成したBitmapオブジェクトにチェックマークを描画
ControlPaint.DrawMenuGlyph(Graphics.FromImage(bmp), _
0, 0, 16, 16, MenuGlyph.Checkmark)
'色を入れ替えるための準備
Dim cms() As ColorMap = _
New ColorMap() {New ColorMap(), New ColorMap()}
'入れ替える色を指定する
cms(0).OldColor = Color.Black
cms(0).NewColor = SystemColors.MenuText
cms(1).OldColor = Color.White
cms(1).NewColor = Color.Transparent
'ImageAttributesオブジェクトの作成
Dim imageAttr As New ImageAttributes()
imageAttr.SetRemapTable(cms)
'ImageAttributesを指定して描画
g.DrawImage(bmp, New Rectangle(0, 0, bmp.Width, bmp.Heigh...
0, 0, bmp.Width, bmp.Height, GraphicsUnit.Pixel, _
imageAttr)
}}
さて、これでようやく必要な技術がそろいました。今まで紹介...
-[[ImageMenuItemクラス>https://dobon.net/vb/dotnet/sample...
苦労の末、せっかく出来上がったImageMenuItemクラスですが、...
**コメント [#h5fef7b7]
#comment
//これより下は編集しないでください
#pageinfo([[:Category/.NET]],2003-05-01 (木) 06:00:00,DOB...
ページ名:
▲
▼
[
トップ
] [
新規
|
子ページ作成
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]