鎖定3 分鐘。目前正在解決此問題的內容存在爭議。它目前不接受新的答案或互動。
我有興趣從頭開始創建自己的 GUI,從頭開始,我的意思是從頭開始。我知道我基本上只需要重新編碼一個自定義的 WinForm 型別的應用程式,但我不知道從哪里開始。我將如何從 C# 代碼中實際使 GUI 出現在螢屏上,就好像我正在創建一個控制臺應用程式本身一樣?
請注意,我為什么要這樣做并不重要。我完全知道我可以只使用 WinForms、WPF 或任何其他現有框架。
我正在使用 Visual Studio 2019。
當我說“我不知道從哪里開始”時,我想我應該注意我精通 C#,所以不知道該語言不是我的起點。
我只是在尋找基于 C# 的答案。我已經知道其他語言有這樣做的方法。
uj5u.com熱心網友回復:
從根本上說,您需要呼叫系統 (OS) 級 API 來在螢屏上繪制內容。WinForms 和 WPF 等框架只是圍繞這些基本 API 的復雜包裝器。這些框架的優點之一是它們簡化了編程,使常見任務更容易完成。另一個優點是它們提供了一定程度的平臺獨立性。例如,Windows 上的作業系統級 API 與 Linux 系統上的相應 API 大不相同(實際上,從這個意義上說,沒有“Linux”API 之類的東西;相反,您需要知道正在使用哪個特定的 X-Windows 管理器并以此為目標)。因此,您需要為要支持的每個系統撰寫單獨的特殊代碼,這將是一個巨大的痛苦。但它肯定可以做到。
在 C# 中,您可以使用稱為 P/Invoke 的工具進行平臺本機呼叫。WinForms 始終使用它來進行 Windows API 呼叫以在螢屏上顯示內容。通過直接呼叫 Win32 API,您可以撰寫一個在 C# 中顯示平臺本機用戶界面的 Windows 應用程式,其方式與在 C 或 C 中的方式大致相同。有一些功能就像CreateWindow名字所暗示的那樣。一本教授 Windows API 的書,比如 Charles Petzold 著名的Windows 編程,第 5 版,會教你必要的平臺API呼叫。將此與 C# 語言檔案中有關如何使用 P/Invoke 呼叫本機 API 函式的一些基本資訊相結合,您就可以使用了。(請注意,您必須獲得 Petzold 書的第 5 版。這是用 C 教授本機 Windows API 編程的最后一版。較新的版本使用您試圖避免使用的 C# 包裝器框架。)
如果你想在 Windows 中在螢屏上顯示一個視窗,你別無選擇,只能呼叫這些平臺提供的基本函式。您還可以使用平臺提供的函式來繪制用戶界面,但不是必須的。您可以完全自定義繪制整個用戶界面,這將為您提供額外的控制層。為此,您基本上可以使用圖形驅動程式提供的原始函式(通過 OS API,它為 Windows 上的所有圖形驅動程式提供了一個通用介面),或者使用其他一些執行類似操作的框架(例如 OpenGL) .
在這一點上,您可能會反對它一直是框架。嗯,是的。:-) 程式員天生就是一群懶惰的人,有充分的理由——為什么要做比我們必須做的更多的作業?您必須決定要在哪個抽象級別作業。
在構建 GUI 應用程式時,您將無法在抽象方面一直走下去。您仍然在作業系統和/或視窗管理器之上構建,因此您受其約束,需要使用它。您可以直接執行此操作,也可以通過提供相對較薄的包裝器的框架來執行此操作,或者可以通過提供越來越復雜和更高級別的包裝器的一大堆框架來執行此操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/312899.html
