聊天主题:如何用C#定制个性化的界面控件

聊天主题:如何用C#定制个性化的界面控件

主持人和专家介绍
主持人:Guest_jswang_MS
微软专家: 韩定一(Guest_Danny_MS),赵彦(Guest_Francs_MS)

Host Guest_jswang_MS says:
欢迎大家参加微软在线技术聊天。
Host Guest_jswang_MS says:
本次聊天的主题是如何用C#定制个性化的界面控件
Host Guest_jswang_MS says:
首先,让我们欢迎来自微软全球技术中心工程师赵彦,韩定一
Host Guest_Francs_MS says:
大家好,我是微软全球技术中心技术专员赵彦,很高兴今天能和大家一起在这里讨论。
Host Guest_Danny_MS says:
大家好!我是微软全球技术中心(上海)技术专员韩定一。欢迎大家来和我们一起讨论问题。

来宾提问 Q 和专家解答 A
[Q] sarillafan : Hi, I want to ask one question, Is there any method to change the whole appliation style in a simple way?
[A] 你可以将控件的Flat属性设为System,并写一个manifest文件
[A] 想要让程序里的控件在Windows XP下呈现出XP的风格,请参考http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/vbtchusingwindowsxpvisualstyleswithcontrolsonwindowsforms.asp。
[Q] xiaohei : manifest文件主要包括那些内容
[A] 我刚才给出的链接里有的:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
   version="1.0.0.0"
   processorArchitecture="X86"
   name="Microsoft.Winweb.<Executable Name>"
   type="win32"
/>
<description>.NET control deployment tool</description>
<dependency>
   <dependentAssembly>
     <assemblyIdentity
       type="win32"
       name="Microsoft.Windows.Common-Controls"
       version="6.0.0.0"
       processorArchitecture="X86"
       publicKeyToken="6595b64144ccf1df"
       language="*"
     />
   </dependentAssembly>
</dependency>
</dependency>
......
[Q]i在控件重画时,请问怎样可以实现不规则的渐变效果?
[A].NET类库中有System.Drawing.Drawing2D.LinearGradientBrush可以画出渐变的效果, http://www.codeproject.com/cs/miscctrl/cutebutton.asp
[A]如果自己画(drawline)可以定制更丰富的效果,但是实现比较复杂
[Q]可否自定义渐变的公式?
[A]所有东西都从底层做起,当然可以自己定义渐变公式
[Q] sarillafan : 能不能给一点代码来示范如何画扁平的控件(Flat Control)
[A] 重画菜单的例子有:http://www.codeproject.com/cs/miscctrl/vsnetmenu.asp,该例子画出了Visual Studio .NET样式的例子。
[A] 重画工具栏的例子有:http://www.codeproject.com/cs/miscctrl/vsnettoolbar.asp。
[A] 需要扁平的下拉框控件,您可以参考http://www.codeproject.com/cs/miscctrl/vsnetcombobox.asp上的例子。
[Q] seventh : 请问在重画过程中,能否改变MainMenu条的背景颜色?
[A] 可以的,您可以重载 MenuItem.OnDrawItem()
[Q] LiuLiu : 所有的控件都可以被重画吗?好像有的控件很复杂。
[A] 是的。确实有的类比较复杂。例如:ComboBox、ToolBar。
[Q] LiuLiu : 那么如何重画那些比按钮、窗体复杂的东东?例如Toolbar?
[A] 您需要对许多事件响应函数进行重载,http://www.codeproject.com/cs/miscctrl/vsnettoolbar.asp上有例子。
[Q] xiaohei : 能不能介绍一个自绘不规则窗体的例子及方法
[A] 您可以将窗体设为透明,并利用贴图来实现
[Q] seventh : 如果再redraw过程中大量贴图,似乎会使程序变得很慢,怎样能解决这个问题?
[A] 可以开一个缓存Graphics对象,在那里面画好,再显示到屏幕上
[Q]what is MSIL?
[A]那是Microsoft intermediate language的简称
[A].NET将所有其上的语言首先编译成IL,在执行的,这样就能使不同的语言在.NET平台上有几乎相同的表现,前提就是他们遵重规范,并能被编译成IL
[Q]Shall we study IL just as we should study ASM?
[A]不需要,IL对于上层语言的编写者是透明的,如果你了解IL规范,你就能开发一种.NET支持的新语言了
[Q] 在贴图过程中,我发现图片色彩的RGB值有时会很莫名地改变,影响到界面效果,请问为什么会导致这样的情况发生?可否避免?
[A] 可能是由于您设图片的颜色位数太低了
[Q] seventh : 如果我需要贴一些形状不规则的图片,是否一定要把图片设置成背景透明的gif图片,有时候这样很麻烦阿~!!
[A] bitmap.maketransparent()
需要画出像Outlook那样的快捷方式栏可以参见http://www.codeproject.com/cs/miscctrl/OutlookBar.asp上的例子。
有关System.Windows.Forms.Control类的信息请参见MSDN:
ms-help://MS.VSCC/MS.MSDNVS/cpref/html/frlrfSystemWindowsFormsButtonMembersTopic.htm
[Q] maorachow : Question: if I created a C# program,can I run it on window98?
[A] 如果您的Windows98装了.NET Framework的话,那是可以的
[Q]做想vs.NET里面的属性窗口的那种控件那有例子?
[A]你可以看看MSDN上的例子:property grid
http://samples.gotdotnet.com/quickstart/winforms/doc/ControlRef/PropertyGridCtl.aspx http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/usingpropgrid.asp http://msdn.microsoft.com/library/default
[A] 您可以使用System.Windows.Froms.PropertyGrid类
http://www.codeproject.com/cs/miscctrl/globalizedpropertygrid.asp
[Q] mmud : 我是说自动停靠的那种功能?PropertyGrid类有吗?
[A] 控件有dockable的属性,可以设的
[Q] xiaohei : 您可以将窗体设为透明,并利用贴图来实现,贴图功能怎么实现,举例说明一下好吗
[A] 在Form上添加一个PictureBox即可
[Q]C#是怎么实现XML的?
[A]XML只是一个规范,.NET是基于XML构建的,C#能利用这种标准,与实现这种标准无关
[Q] seventh : 在不可执行状态下的菜单条通常是灰色的,请问可否,如何重画?
[A] 重载MenuItem类的OnPaint事件响应函数
[Q] mmud: 那里 还能看到聊天记录,比如以前的那些?
[A] 上一次的聊天记录可以在http://www.microsoft.com/china/community/article.asp?oBODY=Chat/ChatRecord/chat0724&oXSLT=Chat/chat 找到

小结
Host Guest_Danny_MS says:
我来做一些小结
[Q]什么是控件重画:
[A]控件重画就是通过重载现有控件类或者重载System.Windows.Forms.Controls类来实现符合特殊要求的界面控件。这些控件可以具有特别的Style,特殊的事件响应等。
有关System.Windows.Forms.Control类的信息请参见
MSDN(ms-help://MS.VSCC/MS.MSDNVS/cpref/html/frlrfSystemWindowsFormsButtonMembersTopic.htm)
有关本地化System.Windows.Forms.PropertyGrid的例子,请参见
http://www.codeproject.com/cs/miscctrl/globalizedpropertygrid.asp
有关重画按钮控件的例子,请参见
http://www.microsoft.com/china/community/article.asp?oBODY=TechZone/TechArticle/TechDoc/redrawcomponent&oXSLT=TechZone/TechArticle/TechContent和http://www.codeproject.com/cs/miscctrl/cutebutton.asp
需要特殊的效果,例如渐变等,您可以使用System.Drawing.Drawing2D.LinearGradientBrush类
ms-help://MS.VSCC/MS.MSDNVS/cpref/html/frlrfSystemDrawingDrawing2DLinearGradientBrushMembersTopic.htm
需要画出像Outlook那样的快捷方式栏可以参见例子
http://www.codeproject.com/cs/miscctrl/OutlookBar.asp
需要扁平的下拉框控件,您可以参考例子
http://www.codeproject.com/cs/miscctrl/vsnetcombobox.asp
想要让程序里的控件在Windows XP下呈现出XP的风格,请参考
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/vbtchusingwindowsxpvisualstyleswithcontrolsonwindowsforms.asp
需要文件夹浏览器可以参考例子
http://www.codeproject.com/cs/miscctrl/folderbrowser.asp
对于TextBox的输入进行限制的例子请参见:
http://www.codeproject.com/cs/miscctrl/maskedcsedit.asp
控制任务栏里的TrayIcon的例子,请参见
http://www.codeproject.com/cs/miscctrl/notifyiconex.asp
重画菜单的例子有:
http://www.codeproject.com/cs/miscctrl/vsnetmenu.asp
该例子画出了Visual Studio .NET样式的例子。
重画工具栏的例子有:
http://www.codeproject.com/cs/miscctrl/vsnettoolbar.asp
采用Skin机制的例子有:
http://www.codeproject.com/cs/miscctrl/SkinnedSlider.asp

结束语
Host Guest_jswang_MS says:
好,谢谢大家参加此次微软专家技术聊天。
Host Guest_jswang_MS says:
同时也感谢赵彦和韩定一工程师能在百忙之中抽出时间参加聊天.
Host Guest_jswang_MS says:
我们的聊天时间是下午4:00~5:00.希望下一次还可以看到大家.
Host Guest_jswang_MS says:
下一次的话题是 .NET Passport
Host Guest_jswang_MS says:
如果您有任何问题,请参加我们的新闻组
microsoft.public.cn.dotnet.framework
microsoft.public.cn.dotnet.csharp
Host Guest_jswang_MS says:
微软的邮件服务器是:msnews.microsoft.com 本次聊天到此结束,谢谢大家!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值