簡體   English   中英

Linux與Windows中的窗口消息過程

[英]Window message procedures in Linux vs Windows

在Windows中創建窗口時,必須定義一個(c ++)

LRESULT CALLBACK message_proc(HWND Handle, UINT Message, WPARAM WParam, LPARAM LParam);

處理從操作系統發送到窗口的所有消息,如按鍵等。

我正在尋找關於同一系統如何在Linux中工作的一些閱讀。 也許是因為我在術語上略顯缺乏,但我沒有通過谷歌找到任何東西(雖然我肯定必須有足夠的!)。

  • 它仍然只是一個單一的C函數來處理所有的通信嗎?
  • 函數定義是否在不同的WM(Gnome,KDE)上有所不同,還是在操作系統的較低級別處理?

編輯 :我已經研究過像QT和WxWidgets這樣的工具,但這些框架似乎更傾向於開發GUI廣泛的應用程序。 我正在尋找一種方法來為我的OGL圖形創建一個基本窗口(限制調整大小,邊框/裝飾)並在多個平台上檢索輸入。 根據我最初的研究,這種函數是檢索輸入的唯一方法。

什么是最好的路線? 閱讀,學習然后使用QT或WxWidgets? 或者學習系統如何工作並實現我想要的那些基本功能?

在最基本的層面上你有X Window協議http://en.wikipedia.org/wiki/X_Window_System_core_protocol ,如果你想做任何應用程序,我們可能會非常復雜。 接下來在堆棧上有Xlib http://en.wikipedia.org/wiki/Xlib ,它是圍繞X協議的“方便”包裝器,但對於“現實生活”應用程序仍然很復雜。 在Xlib之上構建了大多數其他框架,試圖簡化應用程序開發。 最知道的是:Xt,Gtk,Qt等。

就像在窗口中一樣,你有一個“事件循環”,如果你想要,你可以在它上面實現一個GetMessage / DispachMessage比喻來模仿windows的行為。 這樣你可能有一個WNDPROC,但本身X不提供這樣的東西。

在重新發明輪子之前,最好先看看他們正在使用的類似應用程序。

如果您需要簡單的東西,可以嘗試SDL http://www.libsdl.org/ ,這是一個旨在開發游戲/簡單應用程序的跨平台庫。 另一個選擇是Allegro游戲庫http://www.talula.demon.co.uk/allegro/

它完全和完全不同。 該窗口過程100%特定於Windows操作系統。 對於linux,它將取決於窗口管理器(gnome,kde - 正如你已經提到的那樣)。 如果您希望進行跨平台開發,您可能需要查看QT之類的內容。

您可能希望查看以下網址:

http://www.qtsoftware.com/products/appdev
http://en.wikipedia.org/wiki/Qt_toolkit

原則上它完全相同。 但是,它與操作系統的通信無關(在win32上也沒有,使用user32.dll完全是可選的)

GUI應用程序在某處有一個事件循環,它在某個級別處理來自隊列的消息。

有很多庫通常用於“隱藏”這種行為 - 你可以使用它們(事實上,你應該)。 如果有的話,Xlib事件系統甚至比Win32的user32.dll更不正常,並且不太被廣泛理解,因此更少人直接使用它。


在Linux或Windows中,應用程序可以使用低級GUI,也可以使用庫。 大多數人使用圖書館。 應用程序也可以選擇既不執行也不運行GUI(服務器應用程序通常這樣做)。 應用程序可以創建多個線程,其中一個位於事件循環中,而其他線程的工作方式不同。 這也是一種流行的方法。

  • 大多數GUI應用程序為其GUI使用更高級別的庫
  • 非交互式應用程序(例如服務器應用程序)根本不使用GUI而不使用庫(例如XLib,user32.dll)
  • 不適合“事件循環”(例如游戲)的應用程序通常使用單獨的線程來處理它們的事件循環。
  • 在Win32和Linux上,這些事情基本上都是正確的。

正如xhantt所述,您正在尋找的等效消息的傳輸是X Window系統。 實際上,這可能有點復雜。

使用XLib,您需要在主循環中處理事件注冊和出列。 有關如何繼續操作的完整說明,請參閱XLib手冊 但是不要忘記你只會捕捉窗口並以這種方式輸入事件。 不是每個OS消息。

您還可以查找XCB ,它是一個更新,可能更簡單的庫。

如果您在這兩個庫之上構建應用程序,它將在每個WM下(幾乎,我們永遠不會太確定)順利運行。 並且您不需要任何大多數Linux用戶在安裝時尚未擁有的依賴項。 如果你使用Qt,GTK等...它將更容易並且在任何WM下工作,但它們可能沒有安裝庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM