版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
内容WindowsFormsFrameworkWindowsForms&GDI+编写一个例子控件-(AlarmClock)描绘控件添加属性(Properties)添加事件(Events)使用该控件添加Collection属性-(AlarmTimesCollection)快速通过-(类型转换、属性编辑器)总结Windows
Forms的优势WinForm具有CLR的开发优势:GC,语言无关,底层操作,安全框架在WindowsForms,WebForms,System.Net等类库都具有相同的设计模式丰富的,可扩展的设计时支持简洁!没有一大堆的头文件,IDL,libs,
obj,等等.Web感知的,data感知的真正的,丰富的运行时类型信息WindowsForms
控件的设计原则控件是非模式的使用已有的设计模式控件的功能是显而易见的用一种方法达到目的用CLS类型–控件的功能可以被任何CLS语言访问WindowsForms继承关系ComponentStandardIComponentImplControlBasicHWNDWrapperTimerButtonBaseListViewScrollableControlListControlButtonCheckBoxRadioButtonContainerControlUserControlDesignableFormTopLevelWindowComboBoxListBoxComponentAndIComponentComponent对IComponent接口进行了标准的实现IComponent包含一个Site属性,Site是Component和Container之间的通信接口提供一个Events属性-包含所有连接到该组件的事件处理者Control–
WindowsForms的核心Control包含窗口句柄(HWNDwrapper)处理主要的一些窗口消息(WM_*)为用户的输入,描绘和布局提供一些事件包装ActiveX负责句柄的创建和重建通过Handle属性暴露HWND如果HWND不存在,在访问该属性时会立刻建立一个如果重载WndProc()方法,那么可以处理任何窗口消息访问底层系统可以从Graphics得到HDC重载protectedvirtualWndProc方法访问底层系统WndProc的例子:privateconstintWM_COMPACTING=0x041;protectedoverridevoidWndProc(refMessagem){ case(m.msg){ caseWM_COMPACTING: OnCompacting(); break; } base.WndProc(m); }ScrollableControl
AndContainerControlScrollableControlControl支持自动滚动(AutoScroll,VScroll,HScroll)AutoScrollMargin,AutoScrollMinSize属性定义滚动的范围等信息ContainerControl实现一个Control的容器管理控件的焦点(Tab)-本身不接受焦点实现所有ScrollableControl的功能支持布局(Dock,Anchor)DemoRootDesignableTypes:UserControlAndFormUserControl组合控件的基类型(ComboBox)自定义控件的基类型FormWindowsForms顶层控件提供一些属性来操作Systemmenu,minimize/maximize按钮,菜单等GDI+简介全新的完全面向对象的2-D图形系统GDI+对象能够和GDI对象互操作无状态–drawing对象在每次操作时都必须出现添加了很多新特性:抗锯齿,纹理&渐进填充,文本特效,alpha混合…使用GDI+Drawing类的基类是System.Drawing.Graphics可以从Control.Paint事件的参数获得,或者用Control.CreateGraphics建立和HDC类似对象在结束使用时自动清理(GC),但是最好手工调用Dispose。(Win9x平台必须手工处理!)有很多系统标准对象例如:SystemColors,SystemBrushes,SystemIcons,SystemPensControlPaint封装了一些画Control的公共功能简单的GDI+操作写一段文本Graphicsg=someCtl.CreateGraphics();g.DrawString(“HelloWorld!”,someCtl.Font,SystemBrushes.WindowText,0,0);g.Dispose();简单的GDI+操作画一个绿色的圆Graphicsg=someCtl.CreateGraphics();Brushb=newSolidBrush(Color.Green);g.FillEllipse(b,0,0,100,100);b.Dispose();g.Dispose();GDI+:特殊效果Imageimg=newBitmap(“myimage.bmp”); TextureBrushtBrush=newTextureBrush(img); BrushwashBrush=new SolidBrush(Color.FromArgb(180, Color.White));g.FillRectangle(tBrush,0,0,100,100);g.FillRectangle(washBrush,0,0,100,100);tBrush.Dispose();washBrush.Dispose();img.Dispose();用一个图片作纹理,然后…GDI+基础
属性是聪明的字段(类成员)自然的语法和访问器public
classButton:Control{
privatestringtext;
publicstringText{
get{
returntext;}
set{text=value;Repaint();}}}DimbAsNewButtonb.Text="OK"DimsAsString=b.Text属性用Delegate来实现事件实现事件要有三样东西(Control)一个类封装了事件要传递的数据AlarmEventArgs一个事件的delegateAlarmEventHandler一个产生事件的类(你的Control)一个事件声明publiceventAlarmEventHandlerAlarm;一个方法来产生事件protectedvirtualvoidOnAlarm
(AlarmEventArgse){if(Alarm!=null)Alarm(this,e);}用Delegate来实现事件publicclassAlarmDriver{publicstaticvoidMain(string[]args){//Instantiatestheeventreceiver.WakeMeUpw=newWakeMeUp();
//Instantiatestheeventsource.AlarmClockclock=newAlarmClock();//WirestheAlarmRangmethodtotheAlarmevent.clock.Alarm+=newAlarmEventHandler(w.AlarmRang);clock.Start();}}添加事件处理程序(Client用)用Delegate来实现事件PublicSubOnClick(ByValsenderasObject, ByValeasEventArgs)Handles Button1.Click ‘DosomethingEndSubVB用户的用法实现一个Control我们要做一个闹钟控件从Control派生第一步,我们实现它的运行时的功能,第二步添加一些设计时的功能DEMO-最终效果Clock_6_Designer为现有的Windowtype做一些扩展Control.CreateParams允许你控制CreateWindowEx
的调用ExampleSystem.WinForms.Button privateconstintBS_PUSHBUTTON=0x0;privateconstintBS_OWNERDRAW=0xB;protectedCreateParamsCreateParams{ overrideget{ CreateParamscp=base.CreateParams; cp.ClassName="BUTTON"; cp.Style|=BS_PUSHBUTTON; cp.Style|=BS_OWNERDRAW; returncp; }}重载OnPaint方法派生类通过重载基类的OnPaint方法来描绘控件protectedoverridevoidOnPaint(PaintEventArgspe){ pe.Graphics.FillRectangle( newSolidBrush(this.BackColor), this.ClientRectangle); pe.Graphics.DrawString( this.Text,this.Font, newSolidBrush(this.ForeColor), ClientRectangle);}重载OnPaint方法调用base.OnPaint(pe)
如果你希望基类为你画点什么画一个闹钟
Clock_1_Painting加属性和方法注意哪些方法被标记成virtual,public,注意句柄是否已经建立,有些操作必须有句柄存在Control.IsHandleCreated尽可能保证你的控件无模式注意:值类型和引用类型加一大堆事件Component的Events属性能够用来保存很多EventHandler太多的不同类型的事件可能大大增加你的类实例尺寸(成员变量,虚方法)很多相同类型的事件需要按照Key来访问自己控制事件处理器的调用Events(用Key访问,但是线性搜索)加一大堆事件privatestaticreadonlyobjectEventFoo=newobject();publiceventEventHandlerFoo{ get{ returnbase.Events[EventFoo]; }
set{ base.Events[EventFoo]=value; }}加事件和属性到闹钟控件
Clock_2_PropEvent用Collection属性WindowsForms大量使用Collection属性ListBox.ItemsListView.ColumnsToolbar.ButtonsControl.Controls动态Collection属性应该实现System.Collections.IList接口(Item(Indexer))Collection永远不要返回NULL,可以返回一个空的Collection!加一个Collection属性到闹钟控件
Clock_3_CollectionPropMetadata和Attributes如何添加为类添加一些附加的描述信息
[Category("Appearance"),Description(“Textdescribingproperty"),DefaultValue(“OK”),Bindable(true)]publicstringText{....}}Attributes.NETFramework定义了很多Attributes所有的.NETFrameworksAttributes从System.ComponentModel.MemberAttribute派生BrowsableAttributeBindableAttributeCategoryAttributeDefaultEventAttribute/DefaultPropertyAttributeDesignerAttributeLicenseProviderAttributeMergablePropertyAttributeDesignerSerializationVisibilityAttributeToolboxItemAttribute加attributes到闹钟控件
Clock_4_M
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年三亚理工职业学院单招综合素质考试题库附答案详细解析
- 广东深圳南山二外(集团)学府二小招聘小学体育教师1人笔试参考题库及答案解析
- 2026陕西师范大学生命科学学院教学科研人员招聘笔试模拟试题及答案解析
- 2026浙江事业单位统考柯桥区招聘75人考试备考题库及答案解析
- 2026青海海南州贵南县自然资源和林业草原局林业站招聘生态护林员2人笔试参考题库及答案解析
- 2026年中国人民解放军第五七二0工厂招聘笔试模拟试题及答案解析
- 2026浙江省对外服务有限公司丽水分公司招聘1人笔试模拟试题及答案解析
- 2026福建三明市教育局华东师范大学附属三明中学公开招聘专业技术人员13人 (河南师范大学专场)笔试备考试题及答案解析
- 2026年宜兴市事业单位公开招聘人员109人考试备考题库及答案解析
- 泸州市雁林高级中学2026年春期招聘笔试模拟试题及答案解析
- DB11-T 2382-2024 建设工程施工消耗量标准
- 酒吧股东合作协议范本
- 昆虫记老象虫课件
- 2026年广西南宁市教育局直属单位招聘教职工易考易错模拟试题(共500题)试卷后附参考答案
- 如新公司产品培训课件
- 8 池子与河流【新课标版 教学课件】
- 六年级心理健康-尊重好朋友
- DB31∕T 1598-2025 城市轨道交通车辆寿命评估通 用要求
- 埋石混凝土挡墙监理实施细则
- 消防队队伍安全教育课件
- 耕地保护和粮食安全责任工作总结
评论
0/150
提交评论