본문 바로가기

컴퓨터/C

C GUI 프로그래밍

1. 목표: 나는 윈도우 탐색기에서 실행 파일을 더블 클릭만 해도 실행할 수 있는 GUI 프로그램을 C언어로 GTK+ 라이브러리를 사용해서 만들거야.

2. 개발 환경 준비

  1) MSYS2 리눅스 유사 환경, mingw-w64 컴파일러 설치: https://www.msys2.org/

 

MSYS2

Software Distribution and Building Platform for Windows

www.msys2.org

  2) MSYS2 MINGW64 터미널 실행

  3) 패키지 매니저 업데이트

pacman -Syu

3. 컴파일러 설치

gcc --version
pacman -S mingw-w64-x86_64-gcc

4. 라이브러리 및 개발도구 설치

  1) GTK+ 4 설치: https://www.gtk.org/

 

The GTK Project - A free and open-source cross-platform widget toolkit

GTK is a free and open-source cross-platform widget toolkit for creating graphical user interfaces.

www.gtk.org

pacman -S mingw-w64-x86_64-gtk4

  2) pkg-config 설치

pacman -S pkg-config

  3) glade 설치

pacman -S mingw-w64-x86_64-glade

5. 코드 편집기 설치: vim

pacman -S vim

6. 프로젝트 생성

mkdir my_project
cd my_project
glade

7. 빌드

  main.c: 

#include <gtk/gtk.h>

// 애플리케이션 활성화 시 호출되는 콜백 함수
static void on_activate(GtkApplication *app, gpointer user_data) {
    GtkBuilder *builder;
    GtkWidget *window;

    // GtkBuilder를 사용하여 .glade 파일을 로드
    builder = gtk_builder_new_from_file("my_project.glade");
    // 로드된 인터페이스에서 윈도우 위젯 가져오기
    window = GTK_WIDGET(gtk_builder_get_object(builder, "your_window_id"));

    // GtkBuilder 객체에 대한 참조를 해제
    g_object_unref(builder);

    // 윈도우 위젯에 애플리케이션 객체를 설정
    gtk_window_set_application(GTK_WINDOW(window), app);
    // 윈도우를 화면에 표시
    gtk_widget_set_visible(window, TRUE);
}

int main(int argc, char *argv[]) {
    GtkApplication *app;
    int status;

    // 새로운 GtkApplication 객체 생성
    app = gtk_application_new("com.example.yourapp", G_APPLICATION_DEFAULT_FLAGS);
    // "activate" 신호에 on_activate 콜백 함수를 연결
    g_signal_connect(app, "activate", G_CALLBACK(on_activate), NULL);
    // 애플리케이션 실행
    status = g_application_run(G_APPLICATION(app), argc, argv);

    // GtkApplication 객체에 대한 참조를 해제
    g_object_unref(app);
    // 애플리케이션 종료 시 반환값
    return status;
}

  1) my_project.glade: 실제 glade 파일명

  2) your_window_id: glade에서 윈도우 위젯의 ID 로 설정한 값

8. 컴파일

gcc main.c -o myapp `pkg-config --cflags --libs gtk4` -mwindows

9. 패키징

  아래 경로의 모든 dll 파일을 실행파일과 같은 폴더에 넣어준다. 하나씩 지워가며 dll 파일 필요성을 확인한다. 이 부분이 정말 귀찮다. 하지만 나는 아직 해결방법을 찾지 못했다.

cd ~
cd ../mingw64/bin

'컴퓨터 > C' 카테고리의 다른 글

C 크로스 컴파일  (0) 2023.04.03
C strtok()  (0) 2022.11.23
C strstr()  (0) 2022.11.23
C dup()  (0) 2022.11.23
C pthread_detach()  (0) 2022.11.23