首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在C中获取gtk窗口的gdk窗口?

这个问题是关于在C语言中获取GTK窗口的gdk窗口的。首先,我们需要了解GTK和gdk是什么。

GTK(Gnome Toolkit)是一个用于创建图形用户界面(GUI)的跨平台框架。它是使用C语言编写的,并提供了大量的类和函数,用于创建各种类型的GUI组件,包括窗口、按钮、文本框等。

GDK(GDK)是GTK的底层图形库,它负责绘制GTK的图形元素。GDK提供了一系列用于绘制基本图形元素的函数,例如绘制直线、矩形、圆等。

在C语言中,获取GTK窗口的gdk窗口的步骤如下:

  1. 创建一个GTK窗口:使用gtk_window_new()函数创建一个GTK窗口。
  2. 将GTK窗口与GDK绘图上下文关联起来:使用gdk_window_set_window_type()函数将GTK窗口与GDK绘图上下文关联起来。
  3. 获取GDK绘图上下文:使用gdk_display_get_display()函数获取当前系统的GDK绘图上下文。
  4. 获取GDK窗口:使用gdk_display_get_root_window()函数获取当前系统的GDK窗口。
  5. 获取GTK窗口的gdk窗口:使用gdk_window_get_parent()函数获取GTK窗口的gdk窗口。

完整的代码示例如下:

代码语言:c
复制
#include <gtk/gtk.h>
#include <gdk/gdk.h>

int main(int argc, char *argv[]) {
  GtkWidget *window;
  GdkWindow *gdk_window;
  GdkDisplay *gdk_display;
  GdkScreen *gdk_screen;

  gtk_init(&argc, &argv);

  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_title(window, "Hello World");
  gtk_window_set_default_size(window, 200, 200);

  gdk_window = gdk_window_new(window);
  gdk_window_set_window_type(gdk_window, GDK_WINDOW_TOPLEVEL);
  gdk_window_set_decorated(gdk_window, FALSE);

  gdk_display = gdk_display_get_display(gdk_window);
  gdk_screen = gdk_display_get_screen(gdk_display);

  gdk_window_get_parent(gdk_window, (GdkWindow **)&gdk_window);

  gtk_main();

  return 0;
}

这个示例代码创建了一个GTK窗口,并将它与GDK绘图上下文关联起来。然后,它获取了当前系统的GDK窗口和GTK窗口的gdk窗口,并获取了GTK窗口的父窗口。这个示例代码可以用于获取GTK窗口的gdk窗口,并可以在其他应用程序中使用它来获取GTK窗口的父窗口。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

c++获取子类窗口句柄位置_C++各种获取窗口句柄方法「建议收藏」

AfxGetMainWnd AfxGetMainWnd获取自身窗口句柄 HWND hWnd = AfxGetMainWnd()->m_hWnd; GetTopWindow 函数功能:该函数检查与特定父窗口相联窗口...返回值: 如果函数成功,返回值为在Z序顶部窗口句柄。如果指定窗口无子窗口,返回值为NULL。 GetForegroundWindow 函数功能:该函数返回当前系统前台窗口窗口句柄。...GetActiveWindow 函数功能:该函数可以获得与调用该方法线程消息队列相关活动窗口窗口句柄(就是取得当前进程活动窗口窗口句柄)。...GetSafeHwnd 函数功能:获取某个窗口对象(CWnd派生对象)指针句柄(HWND)时,最安全方法是使用GetSafeHwnd()函数。...这个原子(一个16bit值),必须被放置在lpClassName低位字节,lpClassName高位字节置零。

2.2K30

dotnet 如何从 Gtk 3 窗口到对应 X11 窗口

本文将告诉大家如何在 Gtk3 Gtk.Window 或 Gdk.Window 里面获取到对应 X11 窗口 XID 号 记录本文是因为我在这里踩了很多坑,核心问题就是 GTK 有很多个版本,我开始找全是使用...GdkDrawable 指针,让我弄错为使用 gtk_widget_get_window 方法去获取gdk 窗口,于是错误就更加诡异 通过阅读文档发现了以下 gtk 架构图,即 gtk 窗口和...gdk 窗口是不相同,可以通过 gtk_widget_get_window 方法获取,在 C# dotnet 里面可直接使用 Gtk.Window Window 属性,更多请参阅:https:/.../en.wikipedia.org/wiki/GDKGtk Window 窗口获取 Gdk Window 窗口,可使用以下简单代码获取 Gtk.Window window...gdk 窗口获取到对应 X11 窗口 XID 值 为了方便使用 gdk_x11_window_get_xid 方法,以下照 GtkSharp 进行一些代码定义 [UnmanagedFunctionPointer

5610

C语言获取当前输出窗口大小

很多同学在学习C语言,只是局限于课本知识学习及应用,课本上练习题做了不少,可一旦遇到实际应用问题,就感到无从下手。 以下就简单就printf函数进行分析。   ...C程序输出结果是在标准输出设备上,通常情况下,在Win环境下,其输出在一个字符窗口上,现在试问,如何得到该字符输出窗口大小,也即该窗口容纳多少字符,?行 * ?列。     ...;将字符串输出到输出窗口中,在当前确省光标位置上将Hello!依次输出到窗口上,如果当前行不足,则折行输出。...main() {   printf("\n");   for ( int i=1;i<=10;i++)     printf("0123456789"); }    同理,按此方法我们可以得到窗口所容纳字符行数...main() {     int i;   printf("\n");   for ( i=1;i<50;i++)     printf("%4d\n",i); }     记录当前显示窗口首行及末行显示数值即可

3.2K00

c++获取窗口句柄方法「建议收藏」

FindWindow(); 函数原型:HWND FindWindow(LPCSTR lpClassName,LPCSTR lpWindowName); FindWindow这个函数检索处理顶级窗口类名和窗口名称匹配指定字符串...这个函数不搜索子窗口。 lpClassName参数指向类名,lpWindowName指向窗口名,如果有指定类名和窗口名字则表示成功返回一个窗口句柄。否则返回NULL。...GetParent(); 函数功能:该函数返回一个指定子窗口窗口句柄 函数原型:HWND GetParent(HWND hWnd); //获取对话框父窗口句柄 //hWnd =GetParent...(hDlg); //获取窗口句柄 /* HWND WINAPI FindWindow( _In_opt_ LPCTSTR lpClassName, //窗口类名 _In_opt_ LPCTSTR...lpWindowName //窗口标题名 ); */ hWnd = FindWindow(szWindowClass, NULL); //重新绘制客户区 InvalidateRect(hWnd

1.1K30

Linux C编程——为eog image viewer增加坐标和像素颜色显示功能

好用看图工具对做图片相关算法验证很有帮助。但常常工具并没有我们需要功能。今天我就分享一个工作遇到例子。...: 获取鼠标相对于eog图片显示窗口坐标。...发送更新状态栏消息。 修改更新状态栏函数: 从scroll_view获得行、列、红、绿、蓝等信息。 显示到状态栏。..., &scaled_height);         //当前图片窗口大小         width = GTK_WIDGET(priv->display)->allocation.width;...总结: 本文目的并不是想教会大家如何编写Linux C软件,只是给大家提出一种解决问题方法。数字验证工程师往往需要多方面的技能,软件编程、数据库、FPGA、甚至是板级原理图、PCB……

1.4K110

获取外部进程窗口中listview列名

aardio中提供了操作外部进程listview控件库函数:winex.ctrl.listview,但是该函数库没有提供直接获取列名函数。...而aardio进程内listview库可以直接获取列名,相关函数名是:getColumnText()。...查看win.ui.ctrl.listview代码后发现:getColumnText()函数是调用getColumn()函数获取列名信息,而外部进程listview库里面有getColumn()这个函数...这个函数返回值也是个结构体,结构体text属性就是列名。但在使用时,发现返回列名全部是0。...最后有效使用方式就是:col_text=getColumn({mask=0x4/*_LVCF_TEXT*/},i); 另外再提个题外话,这个函数本来返回列名字符串是乱码,是因为编码问题。

14750

GtkSharp 获取触摸宽度高度面积尺寸信息

本文将告诉大家如何在 C# dotnet 里面,从 GTK 里面获取到触摸宽度高度信息,即触摸面积或触摸尺寸信息 准确来说本文方法是我在 lsj 帮助下试出来,我没有找到正式文档对此有描述。...这里 EventTouch 对应 GTK 官方文档记录 https://docs.gtk.org/gdk3/struct.EventTouch.html 尽管在 GTK 官方文档 对 axes 描述似乎不是这个意思...,如以下代码 F 类型 class F : DrawingArea { ... // 忽略其他代码 } 在 F 构造函数里面,先使用 AddEvents 函数,告诉 GTK 层,当前 F 类型所感兴趣事件...Device 可以获取 Axes 数组长度。...最后,将 F 类型对象加入到窗口里面显示,代码如下 internal class Program { [STAThread] static void Main(string[] args

10010

何在控制台程序监听 Windows 前台窗口变化

本文会介绍两类知识,一类是如何在 .NET/C# 程序中方便地调用 Win32 API,另一类是在控制台程序开启 Windows 消息循环。...思路 获取当前前台窗口本质 API 调用是 GetForegroundWindow。在拿到前台窗口句柄后,进而获取到例如窗口标题、类名等信息。...获取窗口各种信息 为了让 Program.cs 代码更简洁一些,我们创建一个 Win32Window 类,用来辅助我们获取特定窗口各种信息。...,那么就可以得到下面的效果: 关于如何在控制台中输出表格(并实现中英文字符对齐显示),可以阅读我另一篇博客。....NET/C# 程序如何在控制台/终端以字符表格形式输出数据 - walterlv 开源项目 本文代码已经开源在 GitHub 上,感兴趣可以去项目中阅读更新代码: https://github.com

55720

在 pyGTK 中使用 visibility_notify 事件

问题背景在 Windows 系统开发 pygtk 应用程序时,需要知道何时一个窗口被另一个窗口遮挡或显示,以便停止繁重绘图进程。...为此,可以使用 visibility_notify_event 信号来获取窗口可见性状态改变。解决方案可以使用 visibility_notify_event 信号来获知窗口可见性状态改变。...()) window.set_border_width(10) # 创建一个 EventBox 并将其添加到顶级窗口 self.event_box = gtk.EventBox...self.event_box) self.event_box.show() # 捕获所有事件 self.event_box.set_events(gtk.gdk.ALL_EVENTS_MASK...需要注意是,在 Windows 系统中使用 visibility_notify 事件可能存在一些问题。这是因为 GTK+ 工具包在 Windows 上移植可能存在一些功能和完善性方面的不足。

10510

Windows 7Visual Studio2012下使用GTK

Glib是一个多种用途工具库,它提供许多有用数据类型,宏定义,类型变换,字符串工具,文件工具,主循环抽象等等。它可以用于许多类-UNIX平台、Windows,OS/2和BeOS。...-2.0.lib;gdk-win32-2.0.lib;gobject-2.0.lib;gdk_pixbuf-2.0.lib;gthread-2.0.lib;gmodule-2.0.lib;pango-1.0...} 如果可以无错编译,那么基本就成功了,运行效果如下: PS: 关于gcc下__attribute__ ((__packed__)),许多代码都会有这个宏,但是vs并没有这个宏定义,那么可以根据这个宏原定义自己定义一个...Mode(Windows xp) Visual Studio窗口蛋疼抖动 Windows Customized Gina Source Code Visual DuxDebugger 3.9...Visual Studio 2010 注册信息修改器 libgpod-0.8.3 for windows Windows HotFix Check Via C/C++ VS2008安装Detours

62310

何在C语言中进行图形界面编程

这些库提供了一系列函数和工具,可以帮助我们创建窗口、按钮、标签等基本图形界面组件。16如何在C语言中进行图形界面编程接下来,我们将介绍如何在C语言中使用GTK来创建图形界面。...安装完毕后,我们需要在代码引入GTK头文件,使用gcc编译器来编译我们程序。...gtk_widget_show(window);gtk_main();return 0;}在这个例子,我们首先引入了GTK头文件,然后在`main`函数调用了`gtk_init`函数来初始化...最后,我们使用`gtk_widget_show`函数显示了窗口,并调用了`gtk_main`函数来进入GTK主循环。上述代码将创建一个简单窗口,但我们还可以添加更多组件,例如按钮、标签等。...总结一下,通过使用GTK等库,我们可以在C语言中进行图形界面编程。我们可以使用一系列函数和工具来创建和配置窗口、按钮、标签等图形界面组件。我们还可以使用回调函数来处理按钮点击等事件。

62200

GTK 菜单创建详解

1 定义 1.1 菜单由菜单条和菜单项组成,它们定义如下所示: 菜单项(GtkMenuItem):添加到菜单条或下拉菜单构件 顶层菜单项:添加到菜单条上菜单项称为顶层菜单项 下拉菜单(GtkMenu...gtk_menu_append:往下拉菜单尾部添加菜单项 gtk_menu_prepend:往下拉菜单首部添加菜单项 gtk_menu_insert:往下拉菜单中指定位置添加菜单项 2 菜单使用...======================================================== 往下拉菜单添加菜单项 menuitem=gtk_menu_item_new_with_label...= NULL, FALSE); menu = GTK_MENU (widget); if (event->type == GDK_BUTTON_PRESS) { event_button...NULL} }; ============================================================================ 创建一个快捷键组,并将它与某个窗口关联

1.4K20
领券