控制項 聊天主題:如何用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 PassportHost Guest_jswang_MS says: 如果您有任何問題,請參加我們的新聞群組
microsoft.public.cn.dotnet.framework
microsoft.public.cn.dotnet.csharpHost Guest_jswang_MS says: 微軟的郵件伺服器是:
msnews.microsoft.com 本次聊天到此結束,謝謝大家!