相关疑难解决方法(0)

什么是Linux的原生GUI API?

我希望这不是一个愚蠢的问题,但它总是我想知道的.Windows(Win32 API)和OS X(Cocoa)都有自己的API来处理窗口,事件和其他操作系统.对于Linux的等价物,我从来没有真正得到明确的答案.

我听说有人说GTK +,但是GTK +是跨平台的,它怎么可能是原生的呢?

c c++ linux api user-interface

427
推荐指数
7
解决办法
11万
查看次数

如何让win32控制台识别ANSI/VT100转义序列?

我正在构建一个轻量级的ncurses库.到目前为止,它与VT100兼容终端的效果非常好,但是win32控制台无法将\033代码识别为转义序列的开头:

# include <stdio.h>
# include "term.h"

int main(void) {
  puts(BOLD COLOR(FG, RED) "Bold text" NOT_BOLD " is cool!" CLEAR);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

截图

为了加载ANSI.SYS驱动程序并识别ANSI/VT100转义序列,需要在C代码级别上做什么?

windows terminal ncurses console-application ansi-escape

58
推荐指数
9
解决办法
6万
查看次数

操作系统如何在屏幕上绘制窗口?

经过多年使用和编程计算机后,我意识到实际在屏幕上绘制的软件堆栈对我来说大多是个谜。

我研究了一些嵌入式 LCD GUI 应用程序,我认为这提供了一些关于简化堆栈的线索,但像 Windows 操作系统这样的东西的整体情况仍然模糊不清。

据我所知:

  • 最低级别 0 是电子硬件(集成电路),它提供数字接口以将屏幕上的像素变成某种颜色或灰度阴影。该接口记录在数据表中,因此您知道如何切换数字线以按照您想要的方式转动任何像素。
  • 下一级是硬件驱动程序。这通常将硬件抽象为一个公共接口。像 SetPixel() 之类的东西。
  • 下一个级别 2 是 2D/3D 图形库(其中小部件/单屏体验有限)。较低级别似乎提供了表示屏幕上像素的缓冲区或内存范围。图形库对此进行了抽象,因此您可以调用 DrawText("text", 10, 10, "font") 之类的函数,它会以正确的方式为您设置像素。

  • 下一级将是操作系统的魔力。windows/buttons/forms/WPF/etc 在内存中创建,然后路由到适当的驱动程序,同时也被定向到屏幕的某个部分?

但是像 Windows 这样的东西是如何真正工作的呢?

  • 我假设 GPU 介于 0 级和 1 级之间。GPU 直接驱动显示器上的像素,现在 1 级驱动程序是 GPU 驱动程序。还有更多功能可用于启用 GPU 提供的附加功能。(这会是什么?操作系统是否会在 3D 空间中传递一组三角形,然后 GPU 将其处理为 3D 透视图,然后将其放在屏幕上?)

不过对我来说最大的谜团是当你进入窗户的时候。您可以同时运行草图、Visual Studio 和 FPS 游戏,并能够在它们之间切换,或者在某些情况下将它们平铺在屏幕上,或者然后分布在多个屏幕上。这是如何跟踪和呈现的?每一个都必须在后台运行,操作系统必须说明哪个图形管道应该连接到屏幕的哪个部分。Windows 怎么会说这部分屏幕是 3D 游戏,而这部分是 2D WPF 应用程序等?

最重要的是,您在一个应用程序中使用了 DirectX,在另一个应用程序中使用了 Qt。我记得有多个游戏或应用程序运行使用相同的技术,那么它是如何工作的?从我所看到的,您将拥有应用程序-> 图形库(DirectX、WPF 等)-> 帧缓冲区-> Windows 控制器(此帧缓冲区应缩放到屏幕的何处和哪个部分)-> 驱动程序?

最后,它只是位切换以指示哪个像素应该是什么颜色,但在到达那里的过程中这是一个非常多的切换位。

如果我启动 Visual Studio 并创建一个基本的 WPF 应用程序,当我在屏幕上放置一个按钮并点击开始时,后台会发生什么?我已经看到 VS 设计器将它放下,在 XAML 中创建它,我什至在嵌入式系统中逐个像素地手动绘制东西,但是在这两者之间会发生什么,所谓的三明治的肉? …

3d graphics operating-system 2d

7
推荐指数
1
解决办法
2901
查看次数

GUI是如何真正制作的?

我的问题是
像 Qt 这样的 Gui 库,让我们说一下 Windows 操作系统如何创建所有这些图形用户界面(Windows 等)。

每个操作系统都提供API或其他东西吗?如果是,那么操作系统如何绘制所有这些窗口和东西。他们(操作系统)是否“控制”屏幕,然后逐个绘制每个像素以实现其目标图形用户界面?

我想要一个答案,以尽可能低的水平解释事情,但我不要求有人写给我发生的一切(即使我愿意),因为我知道所有这些背后有很多事情。所以出于这个原因评论带有链接或推荐书籍,其中详细解释了
幕后发生的事情,将不胜感激。

user-interface operating-system low-level

5
推荐指数
1
解决办法
5033
查看次数

在没有Printf或任何函数的情况下在C中打印int

我有一个分配,我需要在不使用printf,putchar等的情况下在C中打印整数.不允许包含头文件.除了我写的任何东西,没有函数调用.我有一个函数my_char我正在使用(也许是错误的)但它打印出一个字符.我目前有以下代码向后打印数字.不寻找答案.只是寻找一些方向,一些帮助,也许我正在看它完全错误.

void my_int(int num)
{   
  unsigned int i;    
  unsigned int j;

  char c;

  if (num < 0)    
    {
      my_char('-');
      num = -num;
    }

  do    
    {
      j = num % 10;
      c = j + '0';
      my_char(c);
      num = num/10;
    }while(num >0);
}
Run Code Online (Sandbox Code Playgroud)

c int printf

4
推荐指数
2
解决办法
5852
查看次数