欢迎大家光临【无师自通-教程网】您的到来是我们的荣幸。本站提供photoshop教程,ps教程,flash教程,cad教程,网页制作教程,excel教程,asp教程,vb教程,3d教程,c语言教程,html教程,coreldraw教程,dreamweaver教程,java教程,3dmax教程 等各种教程为主题的内容和服务,相信您会在这里找到您所需要的东东。无师自通伴您一生-谢谢您的光临!!
网站地图 设为首页
简繁切换 加入收藏
栏目待定 留言本站
您现在的位置: 无师自通-教程网 >> WEB开发 >> ASP.NET教程 >> .NET Framework >> 教程正文

  没有公告

教程: ASP.NET教程-.NET Framework-使用Microsoft.NET Frameworks创建Windows应用程序 更多...
教程: ASP.NET教程-.NET Framework-使用Microsoft.NET Frameworks创建Windows应用程序

System.ComponentModel.Container();
this.button2 = new System.WinForms.Button();
this.button3 = new System.WinForms.Button();
this.button1 = new System.WinForms.Button();
this.listBox1 = new System.WinForms.ListBox();
//@design this.TrayLargeIcon = false;
//@design this.TrayHeight = 0;
this.Text = "Resizable Dialog";
this.IMEMode = System.WinForms.IMEMode.Off;
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(256, 173);
button2.Location = new System.Drawing.Point(152, 60);
button2.Size = new System.Drawing.Size(92, 32);
button2.TabIndex = 2;
button2.Anchor = System.WinForms.AnchorStyles.TopLeftRight;
button2.Text = "Cancel";
button3.Location = new System.Drawing.Point(152, 120);
button3.Size = new System.Drawing.Size(92, 44);
button3.TabIndex = 3;
button3.Anchor = System.WinForms.AnchorStyles.All;
button3.Text = "Filler";
button1.Location = new System.Drawing.Point(152, 8);
button1.Size = new System.Drawing.Size(92, 32);
button1.TabIndex = 1;
button1.Anchor = System.WinForms.AnchorStyles.TopLeftRight;
button1.Text = "OK";
listBox1.Size = new System.Drawing.Size(120, 173);
listBox1.Dock = System.WinForms.DockStyle.Left;
listBox1.TabIndex = 0;
listBox1.Items.All = new object[] {"Item One",
"Item Two",
"Item Three",
"Item Four"};
this.Controls.Add(button3);
this.Controls.Add(button2);
this.Controls.Add(button1);
this.Controls.Add(listBox1);
}

}
}

GDI

Win Forms 全面利用了 GDI 这一 Microsoft 下一代的二维图形系统。Win Forms 中的图形编程模式完全是面向对象的,各式各样的画笔、笔刷、图像和其它图形对象与 .NET Framework 的其它部分一样,遵循了简单易用的指导方针。开发人员目前可以使用相当不错的一些绘图新功能,如 alpha 混色、渐变色、纹理、消除锯齿以及采用除位图外的其它图像格式。与 Windows 2000 操作系统分层和透明的窗口功能配合使用,开发人员能够毫不费力地创建丰富的、更为图形化的 Win32 应用程序。

如果触发了控件的 OnPaint 事件,能够由 PaintEventArgs 访问的 System.Drawing.Graphics 对象就成为一个 GDI 图形对象。图形对象能够执行的所有操作都通过 GDI 实施。作为一个示例,使用 GDI 创建一个绘制渐变背景的按钮。

图 3. 使用 GDI 创建的按钮

以下是实现这一按钮的代码:

public class GradientButton : Button {
// 保留颜色设置的成员
private Color startColor;
private Color endColor;

// 书写文字时我们将需要它
private static StringFormat format = new StringFormat();
public GradientButton() : base() {
// 初始化颜色
startColor = SystemColors.InactiveCaption;
endColor = SystemColors.ActiveCaption;
format.Alignment = StringAlignment.Center;
format.LineAlignment = StringAlignment.Center;
}

/// <summary>
/// 渐变色的终止颜色
// </summary>
public Color EndColor {
get {
return this.endColor;
}
set {
this.endColor = value;
// 如有必要,则导致重新绘制
if (this.IsHandleCreated && this.Visible) {
Invalidate();
}
}
}

/// <summary>
/// 渐变色的起始颜色
// </summary>
public Color StartColor {
get {
return this.startColor;
}
set {
this.startColor = value;
// 如有必要,则导致重新绘制
if (this.IsHandleCreated && this.Visible) {
Invalidate();
}
}
}

protected override void OnPaint(PaintEventArgs pe) {
// 绘制按钮的常规背景以形成
// 边框,等等。
base.OnPaint(pe);
Graphics g = pe.Graphics;
Rectangle clientRect = this.ClientRectangle;
// 缩小矩形,以免绘制时出界
clientRect.Inflate(-1,-1);
// 创建渐变笔刷,从
// 左上角运行到右下角。
Brush backgroundBrush = new LinearGradientBrush(
new Point(clientRect.X,clientRect.Y),
new Point(clientRect.Width, clientRect.Height),
startColor,
endColor);
// 以渐变色填充背景....
g.FillRectangle(backgroundBrush, clientRect);
// 在客户机区域的中间书写文字。
g.DrawString(this.Text,
this.Font,
new SolidBrush(this.ForeColor),
clientRect,
format);
}
}

就像您所看到的,这并不是非常困难。得益于 Win Forms 和 GDI 面向对象的设计,无需编写任何复杂的代码,即可实现我们的 GradientButton,并且在设计器中,可以通过 Property Browser 操作 Text、Font、StartColor 和 EndColor。

访问底层系统

许多框架的一个缺点就是:如果人们编写的应用程序类型与示例和演示中的严格一致,则这些框架的效果相当不错,但有时开发人员发现,一旦他们希望用框架进行一些有创造性的工作,某些情况下就会碰到障碍或遭到失败。如果遇到这一情况,Win Forms 框架自始至终都能够允许开发人员访问系统基础结构。当然,希望 Win Forms 这样一个设计优良的框架不会使用户遭遇这种情况,但可能发生的情况几乎是无限的。所有的控件都有 Handle 属性,允许访问控件的窗口句柄 (HWND),GDI 对象也提供了类似的句柄访问过程。而且,Control 实际上拥有一个名为 WndProc 的受保护的虚拟方法,对于少数 Win Forms 尚不能支持的消息,可以替代该方法,添加处理方式。

例如,假设您的应用程序是资源密集型的,需要响应 WM_COMPACTING。如果系统检测到内存不足,会向所有高层窗口广播 WM_COMPACTING,您就会知道 Win Forms 框架对这一消息没有提供内置支持,由此,可以添加如下处理过程:

/// <summary>
/// Win32Form1 的摘要说明。
/// </summary>
public class CompactableForm : System.WinForms.Form {
private EventHandler handler;
public void AddOnCompacting(EventHandler h) {
handler = (EventHandler) Delegate.Combine(handler, h);
}

protected override void OnCompacting(EventArgs e) {
// 查看运行时系统能否释放任何东西
System.GC.Collect();
// 调用任一处理程序。
if (handler != null) handler(this, e);
}

public void RemoveOnCompacting(EventHandler h) {
handler = (EventHandler) Delegate.Remove(handler, h);
}

protected override void WndProc(ref Message m) {
case (m.msg) {
case win.WM_COMPACTING:
OnCompacting(EventArgs.Empty);
break;
}
base.WndProc(m);
}

}

只需数行代码,当系统试着收集未用资源时,利用新的 CompactableForm 类或由此派生的类即可得到通知,并作出响应。

结论

尽管在许多开发人员的计划中,针对 Web 的开发是当前工作的重点,而定位于熟悉的 Win32 平台仍然是一个不得不面对的情况。有了 Win Forms,Windows 开发人员无论是新手还是老手,都会发现使用丰富的接口创建复杂的应用程序是一个很方便的过程,而这些接口与 .NET Framework 中具有 Web 和数据功能的许多技术配合良好。

通过利用跨语言继承、碎片收集和安全性等通用语言运行时提高工作效率的优秀功能,开发人员将从 .NET Framework 和 Win Forms 中获益。





[3] [4]

上一页  [1] [2] [3] [4] 下一页

教程录入:admin    责任编辑:admin 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     
     
     
     

    asp连接mysql数据库

    asp连接mysql数据库-2

    frontpage2000教程---制作主页
    免责声明!本站资料大部分来自于互联网,其版权归原作者或其他合法者所有.如内容涉及或侵犯了您的权益,请通知本人,我将尽快处理!.欢迎您的光临。
    辽ICP备07003958号
    无师自通,伴你一生-教程网