protected override void OnPaint(PaintEventArgs e)
{
//判断是否需要绘制图形
if(this.drawEllipse==true)
{
Graphics g=e.Graphics;
//找到窗体当前的工作区
Rectangle rect=this.ClientRectangle;
//绘制背景矩形
g.FillRectangle(new SolidBrush(Color.Red),rect);
//绘制前景椭圆
g.DrawEllipse(new Pen(Color.Yellow,2.0f),rect.X+5,rect.Y+3,
rect.Width-10,rect.Height-6);
}
}
书上说:OnPaint方法是通过Control继承的一个保护方法,在这里重载了这个方法,就不必要再添加Paint事件处理程序了.
我想请问这个Control和Onpaint是什么东西?
{
//判断是否需要绘制图形
if(this.drawEllipse==true)
{
Graphics g=e.Graphics;
//找到窗体当前的工作区
Rectangle rect=this.ClientRectangle;
//绘制背景矩形
g.FillRectangle(new SolidBrush(Color.Red),rect);
//绘制前景椭圆
g.DrawEllipse(new Pen(Color.Yellow,2.0f),rect.X+5,rect.Y+3,
rect.Width-10,rect.Height-6);
}
}
书上说:OnPaint方法是通过Control继承的一个保护方法,在这里重载了这个方法,就不必要再添加Paint事件处理程序了.
我想请问这个Control和Onpaint是什么东西?
#region Windows Form Designer generated code
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.mainMenu1 = new System.Windows.Forms.MainMenu();
this.menuItem1 = new System.Windows.Forms.MenuItem();
this.menuItem2 = new System.Windows.Forms.MenuItem();
//
// mainMenu1
//
this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuItem1});
//
// menuItem1
//
this.menuItem1.Index = 0;
this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuItem2});
this.menuItem1.Text = "图形(&G)";
//
// menuItem2
//
this.menuItem2.Index = 0;
this.menuItem2.OwnerDraw = true;
this.menuItem2.Text = "椭圆形";
this.menuItem2.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.menuItem2_DrawItem);
this.menuItem2.Click += new System.EventHandler(this.menuItem2_Click);
this.menuItem2.MeasureItem += new System.Windows.Forms.MeasureItemEventHandler(this.menuItem2_MeasureItem);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(292, 209);
this.Menu = this.mainMenu1;
this.Name = "Form1";
this.Text = "圆形菜单"; }
#endregion /// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
} private void menuItem2_MeasureItem(object sender, System.Windows.Forms.MeasureItemEventArgs e)
{
//设置菜单项的宽度
e.ItemWidth=150;
//设置菜单项的高度
e.ItemHeight=60;
} private void menuItem2_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e)
{
Graphics g=e.Graphics;
//判断菜单项的状态
if ((e.State & DrawItemState.Selected)==DrawItemState.Selected)
{
//绘制背景填充矩形
g.FillRectangle(new SolidBrush(Color.Red),e.Bounds.Left,e.Bounds.Top,e.Bounds.Width,
e.Bounds.Height);
//绘制前景椭圆
g.DrawEllipse(new Pen(Color.Yellow,2.0f),e.Bounds.Left+5,e.Bounds.Top+3,
e.Bounds.Width-10,e.Bounds.Height-6);
}
else
{
//变换颜色绘制前景和背景
g.FillRectangle(new SolidBrush(Color.Yellow),e.Bounds.Left,e.Bounds.Top,e.Bounds.Width,
e.Bounds.Height);
g.DrawEllipse(new Pen( Color.Red,2.0f),e.Bounds.Left+5,e.Bounds.Top+3,
e.Bounds.Width-10,e.Bounds.Height-6); }
} private void menuItem2_Click(object sender, System.EventArgs e)
{
//通知OnPaint可以做图了
this.drawEllipse=true;
//将窗体的客户工作区从菜单上转移到窗体上
this.Enabled=false;
this.Enabled=true;
} protected override void OnPaint(PaintEventArgs e)
{
//判断是否需要绘制图形
if(this.drawEllipse==true)
{
Graphics g=e.Graphics;
//找到窗体当前的工作区
Rectangle rect=this.ClientRectangle;
//绘制背景矩形
g.FillRectangle(new SolidBrush(Color.Red),rect);
//绘制前景椭圆
g.DrawEllipse(new Pen(Color.Yellow,2.0f),rect.X+5,rect.Y+3,
rect.Width-10,rect.Height-6);
}
}
}
}
private void menuItem2_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e)
private void menuItem2_Click
protected override void OnPaint(PaintEventArgs e)
----------------------------------------
Control 控件基类
Onpaint 绘图咯
不要想的太复杂,等精了再去xiang
-----------------------
private void menuItem2_MeasureItem(object sender, System.Windows.Forms.MeasureItemEventArgs e)
设置菜单,菜单加载的时候运行 算第二个运行吧private void menuItem2_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e)
下拉菜单时开始绘子菜单 算第三吧。private void menuItem2_Click
菜单单击事件 算第4吧
protected override void OnPaint(PaintEventArgs e) //跟上面什么关系都没有,当窗体LOAD或被覆盖或覆盖一部分后
窗体自动会调用这个方法,以便窗体上的控件或图象不会被抹掉。算第一个执行吧