【发布时间】:2020-12-04 16:29:09
【问题描述】:
据我了解,GUI 将有其窗口、窗口类,并将它们用于主窗口以及所有按钮和选项卡等。
这些都将具有句柄并使用 Windows GDI 或其他后端(如 OpenGL)呈现。当用户交互时,比如通过点击一个小部件,将会有一个回调函数/事件处理程序,它会完成它的工作。但是当用户点击一个切换按钮时会发生什么(我不知道该怎么称呼它,所以我称之为“表单” - 我的意思是所有菜单和小部件和东西的可见集 -就像在谷歌浏览器上一样,我现在打开了这个选项卡,我可以移动到另一个显示不同网站和 GUI)表单的选项卡。
GUI 框架如何改变屏幕上的所有窗口?我可以理解它可以改变使用所选 API 渲染的内容,例如 OpenGL,但它如何摆脱所有旧窗口并加载新窗口?它是否通过它们的句柄禁用所有子窗口,并将它们留在屏幕上,但看不见并且不接受输入?它会删除所有内容并创建新窗口吗?它如何实际执行此更改(也有效)?我可能在这里从一个小山丘中变成一座山 - 如果我想太多,请告诉我!
我曾经使用 c Win32、GDI 和 Direct2D 制作了一个非常糟糕的游戏,当你按下“播放”时它会进入游戏,但我只是不得不以一种非常有问题的方式隐藏按钮 - 我不知道如何执行“切换”。
我从来没有使用过像 Qt 这样的“正确”的 GUI 框架,也没有自己构建过一个,所以对问题中的任何勘误表示歉意,请纠正我。我问是因为我想将自己的 GUI 框架作为一个长期项目(没什么特别的,只是我可以说我已经实现了),我不知道如何从低级的角度实现它,或者更确切地说,Qt 等行业标准将如何在尽可能低的级别实现这一点。
任何答案最好不要参考托管代码或任何脚本语言或外部库 - 我想知道如何在 c Win32 + 任何任意图形 API 中执行此操作。提前致谢。
【问题讨论】:
-
当程序在绘制时,它只是停止绘制旧的东西,并开始绘制新的东西。
标签: c user-interface winapi