在我的Gtk-Gdk-Cairo-Pango应用程序的开头,我创建了窗口:
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
Run Code Online (Sandbox Code Playgroud)
首先,有GtkWindow,但gtk_create_window返回GtkWidget,不是GtkWindow,为什么?
然后,一些功能,如gdk_window_process_updates(..)要求GdkWindow*.
gtk_window_set_geometry_hints()另一方面要求GtkWindow*.
在文档中也GdkWindow* gdk_window_new()有返回GdkWindow.
当然有文件说:
GdkWindow是屏幕上的矩形区域.它是一个低级对象,用于在GTK +级别实现高级对象,如GtkWidget和GtkWindow.GtkWindow是一个顶层窗口,用户可能会认为它是一个带有标题栏的"窗口"等等; 一个GtkWindow可能包含许多GdkWindow.
但它仍然没有告诉我,何时以及为什么我应该创建Gtk或Gdk窗口?这里的模式是什么?
现在你问,我想解决什么特别的问题?当然,我尝试在gtk + gdk之上使用cairo + pango在鼠标移动后立即绘制文本.问题是虽然实际绘图似乎表现得很快,但我无法像鼠标移动那样完成它.在我motion_notify_event刚刚调用的gtk_widget_queue_draw(GtkWidget)时候,实际鼠标在屏幕上移动有明显的滞后,即使我绘制单个字符,它在移动阶段也没有与鼠标指针对齐,只在鼠标停止后捕获它.
我尝试的是通过调用加速更新gdk_window_process_updates(GDK_WINDOW(window), false);,编译器吃它,但我得到了运行时断言:Gdk-CRITICAL **: gdk_window_process_updates: assertion 'GDK_IS_WINDOW (window)' failed.我找不到有关此宏的任何信息以及如何/何时使用它.
#include <gtk/gtk.h>
#define TXT "1234567890"
int X = 0, Y = 0;
static void do_drawing(cairo_t *);
GtkWidget *window; …Run Code Online (Sandbox Code Playgroud) 如果我想编写一个C程序与Linux上的X服务器通信并产生最简单的可视化结果,例如在显示器上设置一个像素,我该怎么做?
我想尽可能少地使用库,从头开始理解它,无论代码多么低效/混乱.
更新 - 通过"没有库",我的意思是基本上没有任何可用于X的辅助库,也没有图形工具包.
更新 - 答案是"通过unix socket",特别是/tmp/.X11-unix/X0(至少在这台机器上,大概是显示0).实际上绘制一个像素太复杂了,我想在这里得不到答案.
是否可以通过单击关闭按钮来阻止应用程序退出?以下代码仅隐藏最小化和最大化按钮但不隐藏按钮...
Run Code Online (Sandbox Code Playgroud)Atom window_type = XInternAtom(display, "_NET_WM_WINDOW_TYPE", False); long value = XInternAtom(display, "_NET_WM_WINDOW_TYPE_TOOLBAR", False); XChangeProperty(display, window, window_type, XA_ATOM, 32, PropModeReplace, (unsigned char *) &value,1 );
我试图通过谷歌搜索覆盖_NET_CLOSE_WINDOW,但无法真正找到一个......或者从xprop中删除_NET_WM_ACTION_CLOSE ...