小编LGB*_*árt的帖子

如何将 X11 本机(或 SDL)窗口指定为 GTK 对话框的父窗口?

我有一个仅将 GTK+ 3 用于某些任务的项目,例如提供带有gtk_file_chooser_dialog_new. 我必须设置parent为,NULL因为我没有“主”GTK 窗口。然而,很烦人的是我的程序的标准输出被这样的消息淹没(特别是因为我使用标准输入和 libreadline 来获得命令行界面):

Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
Run Code Online (Sandbox Code Playgroud)

我怎样才能避免这种情况?或者更好(可能也是更正确的方法),而不仅仅是避免:我可以以某种方式将 X11 窗口指定为 GTK 小部件的父窗口,而无需做太多工作吗?实际上,这是一个 SDL 项目,但我不想为此将 SDL“嵌入”到 GTK 窗口中。但是我可以用SDL_GetWindowWMInfo(). 在我看来,这比仅仅“避免”来自 GTK 的消息要好(但我什至不知道该怎么做),因为 - 例如 - 窗口管理器知道对话框和主(SDL/ X11) 窗口等...

这只是一个旁注(实际上应该是另一个问题),似乎在 GTK 文件选择期间完成的各种 GUI 事件(鼠标单击、按键等)可能会被 SDL“感知”然后(在对话框关闭后等) ) 这当然是不想要的。我想我应该尝试从不需要的事件中清空 SDL 事件队列......

x11 gtk sdl gtk3 sdl-2

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

在 C 中为 win32 和 win64 打开 stdin/stdout/stderr 的 Windows 控制台

首先,我不是Windows程序员(甚至不是Windows用户),我在Linux上使用交叉编译器也为Win32和Win64构建。在挖掘网络之后(甚至在这里提出一个问题),我设法将一个代码片段放在一起,它可以打开一个 Windows 控制台,并将其用于 stdin/stdout/stderr。它在 Win32 上运行良好,但在 Win64 上程序崩溃。我猜问题是不同的长整型数据类型大小,gcc 甚至对此发出警告。然而,由于我不知道某些 Windows API 类型的确切用途和大小,所以我不知道应该更改什么。当然,最好的办法是一些独立于 win32/win64 的解决方案。我还尝试对 lStdHandle 使用“HANDLE”类型,但它甚至无法编译。有人能帮忙解决这个问题吗?

    int hConHandle;
    long lStdHandle;
    //HANDLE lStdHandle;
    CONSOLE_SCREEN_BUFFER_INFO coninfo;
    FILE *fp;
    FreeConsole(); // be sure to release possible already allocated console
    if (!AllocConsole()) {
            ERROR_WINDOW("Cannot allocate windows console!");
            return;
    }
    SetConsoleTitle("My Nice Console");
    // set the screen buffer to be big enough to let us scroll text
    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo);
    coninfo.dwSize.Y = 1024;
    //coninfo.dwSize.X = 100;
    SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coninfo.dwSize);
    // redirect unbuffered STDOUT to the console
    lStdHandle …
Run Code Online (Sandbox Code Playgroud)

c windows win64 windows-console

-1
推荐指数
1
解决办法
2735
查看次数

标签 统计

c ×1

gtk ×1

gtk3 ×1

sdl ×1

sdl-2 ×1

win64 ×1

windows ×1

windows-console ×1

x11 ×1