我正在编写一个程序,需要在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;
}
我怎么做我想在一个可移植的方式?
它在X11上正常工作。但不是在Windows操作系统上 –