有人可以瞭解如何從VC創建C#自定義控件?我需要創建一些圖形控件,這些控件將用於類似默認控件的C#項目中,因爲性能很重要,它在低性能的Windows CE設備上,我想我必須在c/cpp中完成它。如何從C/CPP創建C#自定義控件
回答
您可以嘗試在C中編寫完整的控件,並提供一個非常薄的包裝來暴露您需要從C#中控制的內容。如果我們正在談論Forms控件,它並不一定需要遵循UserControl或Control的模型,這對於正確使用有些複雜,並且這些控件的所有成本都在這裏。它非常苛刻。
你也可以調查WPF,它試圖在託管端實現更多的完成,因此速度更快。它有其自身的複雜性。它通常會自動合成/「比特式」,但經常過度,但其速度比雙緩衝器形式控制更快(或可能),最終將在雙緩衝器模式下執行相同的組合,但隨着更多人爲勝利消息的處理速度變慢。 (要極度簡化)
所以,不要只是說不,我認爲那些是你的選擇。再一次,可以通過公平的控制,一個精心編寫的C端渲染,並獲得接近本機的性能。
編輯:
我錯過了Windows CE部分的問題。我的錯。我不知道我說的是否適用。
謝謝,這就是我要做的。 – agou
我假設你在談論WinForms而不是Silverlight。
你不需要。
Windows CE上的.NET執行CIL的JIT(不同於解釋它的Micro Framework,就像老派的Java)。在C#中編寫控件並沒有真正的性能損失。最昂貴的操作是繪畫,如果您使用C#或C++,那麼您將使用GDI進行此操作,並且它在GDI的函數調用中進行昂貴的操作,您唯一要保存的是Managed和土着地區,但這確實算得很少。
您可能想要使用C++創建Windows CE GUI的唯一情況是,如果您使用的是視頻或動畫框架(如Flash),並且如果您正在使用該功能,則完全使用C++,不在任何GUI中使用.NET。
是的,我應該完全使用C++,但這不在我的控制之下,現有項目已寫入在C#中,我在C#和C/C++中都進行了圖形編程,而且感覺C#比較慢,有時候我不需要在矩形區域中找到位置,只是改變幾個點,似乎C#需要複製整個圖像在做之前呢? (我不確定C#中的_insecureCode等背後發生了什麼,而且.net cf不支持透明(?),但是在C/C++中,這很容易做到,直接修改位圖的內存。 ?非常感謝。 – agou
另外.net cf的消除鋸齒效果並不好,而且在C/C++中修復這個問題容易得多,因爲一切都在控制之中,並且不會丟失性能。(?) – agou
.NET沒有它自己的消除鋸齒,只是不同的默認GDI的反鋸齒,你可以隨心所欲地自定義它們,你也可以像使用C++一樣使用不安全的代碼來處理C#中的位圖原始字節,而不需要複製位圖所有你說關於.NET不支持透明度是絕對不正確 – Dai
簡單直接的答案是,你不能。期。 Compact Framework不支持託管C++(C++/CLI)。現在我想你可以創建UI組件作爲COM控件,然後手動將所有COM接口的東西移植到託管端,但這將是構建,調試和特別部署的噩夢。
你最好只是丟棄不安全的代碼,並使用P/Invokes在C#代碼中正確使用Win32 API。對於大多數情況,你可以達到你想要的並獲得良好的表現。如果你有一些絕對必須用C來完成速度,那麼創建一個你通過P/Invoke傳入緩衝區的庫。例如,圖像庫使用這種類型的機制來創建縮略圖等。
謝謝這正是我正在尋找的---確認沒有現成的簡單解決方案來做這件事,所以我會遵循Celess的建議。 – agou
- 1. 如何從自定義控件中的代碼創建控件?
- 2. C#創建自定義控件
- 3. C#幫助創建自定義控件
- 4. 我如何創建自定義控件?
- 5. 如何創建自定義UIDatePicker控件
- 6. 如何創建自定義TextBox控件?
- 7. 創建自定義控件?
- 8. 創建自定義控件
- 9. 如何在win32中創建自定義形狀控件C++
- 10. 如何創建我的自定義控件C#?
- 11. 如何創建從FrameworkElement派生的自定義組合控件
- 12. 如何從EditText創建自定義控件?
- 13. 在C++中創建自定義控件時擴展控件
- 14. 如何創建現有用戶控件的自定義控件
- 15. 我如何爲自定義控件創建可綁定事件?
- 16. 如何從C++中的文件創建自定義QML元素?
- 17. Silverlight自定義控件創建自定義事件
- 18. 如何在自定義控件中創建名爲valuechanged的自定義事件
- 19. 如何使用自動驗證創建自定義ASP.NET控件
- 20. 如何用自己的控件創建自定義的GTK#Widget?
- 21. WPF自定義控件創建。?
- 22. 創建自定義控件mvc3
- 23. 創建自定義選擇器控件
- 24. 創建一個WPF自定義控件
- 25. 創建自定義面板控件
- 26. 創建自定義控件組對象?
- 27. 創建.NET自定義控件
- 28. ASP.NET動態創建自定義控件
- 29. 使用VGScene創建自定義控件?
- 30. 創建asp.net MVC自定義控件
1.如果您正在創建.NET對象,則使用哪種語言(例如C#,C++/CLI)並不重要。 2.如果您編寫高度優化的C#代碼(包含所有對象預分配,最小互操作,高效的集合和運算符以及**等),.NET代碼可以像C++一樣快速運行,因爲它們都被轉換爲程序集.NET爲此使用JIT)。 –
嗨Danny,我在David的回答下添加了一些評論,請讓我知道你對這些問題的看法?非常感謝你。 – agou
Danny - 如果目標(本例中的CF)不支持C++/CLI,則會有所不同...... – ctacke