트레이를 담당하는 구성 요소는 무엇이며 C++를 사용하여 트레이를 조작하는 방법은 무엇입니까?

트레이를 담당하는 구성 요소는 무엇이며 C++를 사용하여 트레이를 조작하는 방법은 무엇입니까?

내 목표는 다음 명령을 활용하는 데스크톱 GUI 응용 프로그램을 작성하는 것입니다.https://askubuntu.com/a/14083/18330

pacmd list-sinks to list name or index number of possible sinks

pacmd set-default-sink "SINKNAME" to set the default output sink

pacmd set-default-source "SOURCENAME" to set the default input

pacmd set-sink-volume index volume

pacmd set-source-volume index volume for volume control (0 = Mute, 65536 = 100%)

그런 다음 응용 프로그램에는 사운드 장치를 해당 장치로 전환하기 위해 클릭할 수 있는 사운드 장치 목록을 표시하는 트레이 아이콘이 있습니다. 클릭하면 사운드 볼륨이 0에서 현재 시스템 볼륨 지점까지 작아집니다. 따라서 시스템 볼륨에도 액세스해야 합니다.

알 수 없는 것:

  • C++에서 프로그래밍 방식으로 트레이 아이콘을 추가하는 방법
  • 해당 트레이 아이콘을 클릭할 때 드롭다운 표시를 만들고 클릭할 수도 있는 항목을 표시하는 방법(메일 아이콘이 Thunderbird를 표시하는 방식과 유사)
  • 실행될 C++ 함수에 클릭 이벤트를 바인딩하는 방법(해당 사운드 장치로 전환하기 위해 C++ 함수가 준비되어 있습니다.)

조작하려는 데스크톱 구성 요소를 식별하고 해당 구성 요소에 대한 API 문서를 찾을 수 있는 위치에 대한 지침이 필요합니다.

노트:

답변1

확인해 보세요libappindicator. 트레이에 아이콘을 넣는 역할을 담당합니다. 표시기로 표시되는 드롭다운 메뉴는GtkMenu. 나머지는 GTK+로 작업했다면 익숙할 것입니다. 다음은 최소한의 예입니다.

#include <gtk/gtk.h>
#include <libappindicator/app-indicator.h>

static void do_something(GtkWidget *widget, gpointer data) {
  //...
}

int main (int argc, char **argv) {
  gtk_init(&argc, &argv);
  GtkWidget *menu = gtk_menu_new();
  GtkWidget *menuitem = gtk_menu_item_new_with_mnemonic("_This is a menu item");
  gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
  g_signal_connect(menuitem, "activate", G_CALLBACK(do_something), NULL);

  /* the second parameter is the icon displayed */
  AppIndicator* ind = app_indicator_new("test", "indicator-messages-new", 
                     APP_INDICATOR_CATEGORY_APPLICATION_STATUS);
  app_indicator_set_menu(ind, GTK_MENU(menu));
  gtk_main();
}

다음과 같이 컴파일합니다. 패키지 libgtk2.0-dev가 필요합니다 libappindicator-dev.

$ gcc test.c `pkg-config --cflags --libs gtk+-2.0 appindicator-0.1`

나머지는 당신이 알아낼 것입니다. 가장 쉬운 방법은 다른 간단한 지표 애플리케이션을 확인하는 것입니다. 예를 들어,이 답변.

관련 정보