gtk의 트레이 바로 위나 아래에 창을 설정해야하는 프로그램을 작성하고 있습니다. 나는 실패한 2 가지 방법을 사용하여 시도했다. 하나는 gtk_status_icon_position_menu 함수를 사용하고 사용자가 (트레이 바에서) 클릭하는 지점에 윈도우를 배치하는 것입니다. 문제는 이러한 솔루션이 gnome (Linux)에서는 작동하지만 Windows에서는 작동하지 않는다는 것입니다. 리눅스에서는 창 관리자가 트레이 패널에 윈도우를 배치하는 것을 허용하지 않으므로 가능한 작동합니다. Windows에서는 이런 일이 발생하지 않고 화면이 "바람직하지 않은"화면 밖으로 나올 수 있습니다.시스템 트레이 가까이 창 배치
이 말로 나는 주변에서 일하러 나갔다. 내 생각은 마우스 클릭 위치에 창을 설정하고 일반 창 배치의 x 및 y 좌표를 얻는 것이고 화면 경계 내에서 크기를 확인하는 것입니다. 그것이 수정되지 않았다면. 필요한 함수를 찾았지만 gdk_drawable_get_size (window-> window, & WindowWidth, & WindowHeight) 및 다른 유사한 함수는 신호 함수의 두 번째 실행 후에 올바른 크기 값만 제공합니다. 첫 번째 실행의 결과는 크기와 너비 모두에 1입니다. (I는 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 OS에서는 그렇지 않습니다. –