![트레이를 담당하는 구성 요소는 무엇이며 C++를 사용하여 트레이를 조작하는 방법은 무엇입니까?](https://rvso.com/image/1083762/%ED%8A%B8%EB%A0%88%EC%9D%B4%EB%A5%BC%20%EB%8B%B4%EB%8B%B9%ED%95%98%EB%8A%94%20%EA%B5%AC%EC%84%B1%20%EC%9A%94%EC%86%8C%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0%20C%2B%2B%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8A%B8%EB%A0%88%EC%9D%B4%EB%A5%BC%20%EC%A1%B0%EC%9E%91%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
내 목표는 다음 명령을 활용하는 데스크톱 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 문서를 찾을 수 있는 위치에 대한 지침이 필요합니다.
노트:
- 우분투 14.04 LTS amd64 사용
- 이것을 C++로 작성된 오픈 소스 Node.js 확장으로 작성하려고 합니다.
- 이것은Node.js C++ 확장으로 작성된 알림의 예
답변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`
나머지는 당신이 알아낼 것입니다. 가장 쉬운 방법은 다른 간단한 지표 애플리케이션을 확인하는 것입니다. 예를 들어,이 답변.