0

我正在编写一个程序,该程序需要在 gtk 托盘栏的上方/下方设置一个窗口。我尝试使用两种失败的方法。一种是使用 gtk_status_icon_position_menu 函数并将窗口放置在用户单击的位置(在托盘栏中)。问题是这些解决方案在 gnome(Linux) 中有效,但在 Windows 中无效。在 Linux 中它们可以工作,因为窗口管理器似乎不允许将窗口放置在托盘面板中,以尽可能接近。在 Windows 中,这不会发生,并且窗口可以“走出”屏幕,这是可以理解的,这是不希望的。

有了这个说我出去工作了。我的想法是将窗口设置在鼠标单击的位置,并获取正常窗口位置的 x 和 y 坐标,并通过它的大小检查它是否在屏幕边界内。如果没有做出更正。我想出了所需的函数,但由于某种原因, gdk_drawable_get_size(window->window ,&WindowWidth, &WindowHeight) 和其他类似函数仅在第二次运行信号函数后才给出正确的大小值。第一次运行的结果是大小和宽度都只有 1。(我已经阅读了 X11 没有给出正确结果的问题,但我认为不是这样)

event_button = (GdkEventButton *) event;
        if (event_button->button == 1)
        {
            if (active == 0)
            {
                gboolean dummy;
                gint WindowHeight, WindowWidth, WindowPosition[2];
                GdkScreen *screen;
                gint ScreenHeight, ScreenWidth;

                dummy = FALSE;
                gtk_widget_show_all(window);
                gtk_window_present(GTK_WINDOW(window));
                gtk_status_icon_position_menu(menu, &pos[X], &pos[Y], &dummy, statusicon);
                gtk_window_move(GTK_WINDOW(window), pos[X],pos[Y]);

                gdk_drawable_get_size(window->window ,&WindowWidth, &WindowHeight);

                screen = gtk_status_icon_get_screen(statusicon);
                ScreenWidth = gdk_screen_get_width(screen);
                ScreenHeight = gdk_screen_get_height(screen);
                g_print("Screen: %d, %d\nGeometry: %d, %d\n",ScreenWidth, ScreenHeight, WindowWidth, window->allocation.height);

                gtk_entry_set_text(GTK_ENTRY(entry),"");
                active = 1; 
                return TRUE;
            }

我怎样才能以便携的方式做我想做的事?

4

1 回答 1

0

我认为gtk_status_icon_position_menu应该可以正常工作,因为我将它用于相同的目的。
你在用 X11 尝试这个东西吗,你得到的实际结果是什么。

于 2009-12-22T04:29:24.470 回答