[英]Window message procedures in Linux vs Windows
在Windows中創建窗口時,必須定義一個(c ++)
LRESULT CALLBACK message_proc(HWND Handle, UINT Message, WPARAM WParam, LPARAM LParam);
處理從操作系統發送到窗口的所有消息,如按鍵等。
我正在尋找關於同一系統如何在Linux中工作的一些閱讀。 也許是因為我在術語上略顯缺乏,但我沒有通過谷歌找到任何東西(雖然我肯定必須有足夠的!)。
編輯 :我已經研究過像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(服務器應用程序通常這樣做)。 應用程序可以創建多個線程,其中一個位於事件循環中,而其他線程的工作方式不同。 這也是一種流行的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.