c – Linux与Windows中的窗口消息过程

前端之家收集整理的这篇文章主要介绍了c – Linux与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?或者学习系统如何工作并实现我想要的那些基本功能

解决方法

原则上它完全相同.但是,它与操作系统的通信无关(在win32上也没有,使用user32.dll完全是可选的)

GUI应用程序在某处有一个事件循环,它在某个级别处理来自队列的消息.

有很多库通常用于“隐藏”这种行为 – 你可以使用它们(事实上,你应该).如果有的话,Xlib事件系统甚至比Win32的user32.dll更不正常,并且不太被广泛理解,因此更少人直接使用它.

在Linux或Windows中,应用程序可以使用低级GUI,也可以使用库.大多数人使用图书馆.应用程序也可以选择既不执行也不运行GUI(服务器应用程序通常这样做).应用程序可以创建多个线程,其中一个位于事件循环中,而其他线程的工作方式不同.这也是一种流行的方法.

>大多数GUI应用程序为其GUI使用更高级别的库>非交互式应用程序,例如服务器应用程序,根本不使用GUI而不使用库(例如XLib,user32.dll)>不适合“事件循环”(例如游戏)的应用程序通常使用单独的线程来处理其事件循环.>在Win32和Linux上,这些事情基本上都是正确的.

猜你在找的C&C++相关文章