/*********************************************/
/*★ メニューに Icon を設定する 前田 稔 ★*/
/*********************************************/
using System;
using System.Drawing;
using System.Windows.Forms;
public class MyForm : Form
{
Icon newIcon = new Icon("c:\\data\\test\\Icons.ico");
public MyForm()
{
Text = "Icon を設定";
// メインメニューを生成
MainMenu menu = new MainMenu();
// ファイル(終了)メニューを生成
MenuItem item = menu.MenuItems.Add("ファイル(&F)");
//item.MenuItems.Add(new MenuItem("終了(&X)", new EventHandler(this.FileExit), Shortcut.CtrlQ));
MenuItem MenuItem1 = new MenuItem("終了(&X)", new EventHandler(this.FileExit), Shortcut.CtrlQ);
MenuItem1.OwnerDraw = true;
MenuItem1.MeasureItem += MenuItem1_MeasureItem;
MenuItem1.DrawItem += MenuItem1_DrawItem;
item.MenuItems.Add(MenuItem1);
// ヘルプメニューを生成
item = menu.MenuItems.Add("ヘルプ(&H)");
item.MenuItems.Add(new MenuItem("バージョン情報(&A)...", new EventHandler(this.HelpAbout)));
//MenuItem MenuItem2 = new MenuItem("バージョン情報(&A)...", new EventHandler(this.HelpAbout));
//item.MenuItems.Add(MenuItem2);
// フォームのメニューとしてセット
this.Menu = menu;
}
private void MenuItem1_MeasureItem(object sender, System.Windows.Forms.MeasureItemEventArgs e)
{
//メニューアイテムの大きさを計算する
//高さを"e.ItemHeight"に幅を"e.ItemWidth"に入れる
MenuItem mi = (MenuItem) sender;
//メニューに表示する文字列を取得
string menuText;
menuText = mi.Text;
if (mi.ShowShortcut && mi.Shortcut != Shortcut.None)
{
//シュートカットを表示するときは、その文字列を追加する
menuText += " " +
System.ComponentModel.TypeDescriptor.GetConverter(
typeof(Keys)).ConvertToString((Keys) mi.Shortcut);
}
StringFormat sf = new StringFormat();
//ホットキープリフィックスの表示(&を_にする)
sf.HotkeyPrefix = System.Drawing.Text.HotkeyPrefix.Show;
//文字列の幅にアイコンの幅16と余白30を足す
e.ItemWidth = (int) e.Graphics.MeasureString(menuText,
SystemInformation.MenuFont, int.MaxValue, sf).Width + 46;
//リソースを開放
sf.Dispose();
//高さを決定する(19bitに固定する)
e.ItemHeight = 19;
}
private void MenuItem1_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e)
{
//メニューアイテムを描く
MenuItem mi= (MenuItem) sender;
Brush b;
if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
{
//選択時の背景色
e.Graphics.FillRectangle(SystemBrushes.Highlight, e.Bounds);
//文字列のブラシ
b = new SolidBrush(SystemColors.HighlightText);
}
else
{
//非選択時の背景色
e.Graphics.FillRectangle(SystemBrushes.Menu, e.Bounds);
//文字列のブラシ
b = new SolidBrush(SystemColors.MenuText);
}
//アイコンの描画
e.Graphics.DrawIcon(newIcon, e.Bounds.Left+2, e.Bounds.Top+(e.Bounds.Height-newIcon.Height)/2);
//文字を描画
StringFormat sf = new StringFormat();
//ホットキープリフィックスの表示(&を_にする)
sf.HotkeyPrefix = System.Drawing.Text.HotkeyPrefix.Show;
//Text部分を描画
int top= (e.Bounds.Height - SystemInformation.MenuFont.Height) / 2;
e.Graphics.DrawString(mi.Text, SystemInformation.MenuFont,
b, e.Bounds.Left + 22, e.Bounds.Top + top, sf);
if (mi.ShowShortcut && mi.Shortcut != Shortcut.None)
{
//Shortcut部分を描画
//Shortcut部分の文字列を取得
string shortcutText=
System.ComponentModel.TypeDescriptor.GetConverter(
typeof(Keys)).ConvertToString((Keys) mi.Shortcut);
//Shortcut部分の幅を取得
int shortcutWidth=
(int) e.Graphics.MeasureString(shortcutText,
SystemInformation.MenuFont, int.MaxValue, sf).Width;
//Shortcut部分の文字列を描画
e.Graphics.DrawString(shortcutText, SystemInformation.MenuFont,
b, e.Bounds.Right - shortcutWidth - 24,
e.Bounds.Top + top, sf);
}
//リソースを開放
b.Dispose();
sf.Dispose();
}
// ファイル-終了メニューのイベントハンドラ
private void FileExit(object sender, EventArgs e)
{ this.Close();
}
// ヘルプ-バージョン情報メニューのイベントハンドラ
private void HelpAbout(object sender, EventArgs e)
{ MessageBox.Show("Menu Event Sample Program Ver 1.0");
}
}
class form01
{
public static void Main()
{
MyForm mf = new MyForm();
Application.Run(mf);
}
}
|