使用C++或汇编从头开始创建一个图形用户界面(GUI)

31
我在使用GUI库方面遇到了许多糟糕的经历,所以我想知道如何在C++中从零开始创建一个窗口。我不是指Win32,我是指完全自己创建,不使用任何外部库。
也许有办法使用图片或其他方式来创建一个窗口,我知道这将非常困难。
我还在某处读到过可以用汇编语言为C++创建库的方法。
是否有办法在汇编或C++中创建自定义的GUI界面呢?
编辑: 我只是针对Windows。
附言:我想学习这个的另一个原因是因为
我可能想要实际创建一个操作系统。所以我会希望有图形用户界面...

8
汇编?天啊,你为什么不直接用机器语言编写呢? - jason
22
唯一能帮助这个项目的是您的用户名。 - Hans Passant
10
@Luck 我有一些令人不安的消息要告诉你。你在GUI库方面有一些不好的经验。你提出的解决方案是更换软件。正确的解决方案是更换开发者。如果你不能使用GUI库,那么你肯定也无法自己编写一个。 - David Heffernan
2
@Jason,汇编有什么问题吗?你可以通过它做很多与硬件相关的事情,学到很多关于计算机和高级编程语言如何工作的知识。它非常简单,就是指令参数1、参数2等。 - user451498
1
只是一个提示:那些“不好的经历”是由于库中的复杂性造成的,每个库都有这个问题,因为它是问题本质上固有的。实际上,大多数库都会保护您免受底层API和问题域复杂性的一些影响。手动操作可能会更糟。更糟糕。*//曾经在Classic Mac OS和原始X上手动操作过的人* - dmckee --- ex-moderator kitten
显示剩余4条评论
4个回答

24
为了创建一个窗口,您需要与当前操作系统上存在的任何窗口系统进行接口。如果窗口管理器在内核空间运行(如在Windows中),则这将需要系统调用;对于用户空间窗口管理器(如X),则需要某种形式的进程间通信。要从头开始创建窗口,您需要了解这些窗口管理器的工作原理和使用的协议。在X的情况下,很容易找到有关协议如何工作的资源。在Windows的情况下,由于窗口管理器的内部是专有的,您的唯一选择可能是使用API。

1
http://www.alleystoughton.us/eXene/X-protocol.pdf - Edward Strange

5
你可以尝试查看MenuetOS的源代码,我相信它完全是用汇编语言编写的,并且具有图形用户界面。当然,如果你想编写在Windows、Linux等平台上运行的程序,则无法使用该方法。但是,如果你想避免所有外部库文件,包括与Windows的接口,那么你将不得不在裸机上运行。

你的帖子写得非常详细,但是templatetypedef提供了我最需要的内容。 - user451498

2
如果你疯狂到想在汇编中完成这件事情,那就去安装masm32吧,它可以做基本的GUI,如窗口/消息框等。

他们说他们不想与Win32接口...所以他们可能需要FASM进行非Windows开发。 - Eugene
我认为他的意思是不使用MFC等,而不是非Windows开发。 - ismail

-8

你可以通过调用“CreateWindowEx” Win32 API来在Windows上“从零开始”创建一个窗口。


1
不,那并不是从头开始创建窗口。CreateWindowEx 实例化一个已存在的窗口类。如果你想要从头开始,你需要使用 RegisterClassEx - IInspectable

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接