Về cơ bản, hệ thống cửa sổ của hệ điều hành sẽ hiển thị một số lệnh gọi API mà bạn có thể thực hiện để thực hiện các công việc như tạo cửa sổ hoặc đặt nút trên cửa sổ. Về cơ bản, bạn nhận được một bộ các tệp tiêu đề và bạn có thể gọi các hàm trong các thư viện đã nhập đó, giống như bạn làm với stdlib và printf
.
Mỗi hệ điều hành đi kèm với bộ công cụ GUI riêng, bộ tệp tiêu đề và lệnh gọi API và cách thức hoạt động riêng của chúng. Ngoài ra còn có các bộ công cụ đa nền tảng như GTK , Qt và wxWidgets giúp bạn xây dựng các chương trình hoạt động ở bất cứ đâu. Họ đạt được điều này bằng cách có cùng các lệnh gọi API trên mỗi nền tảng, nhưng cách triển khai khác nhau cho các hàm API đó gọi đến các lệnh gọi API hệ điều hành gốc.
Một điểm chung của tất cả chúng đều có điểm chung, khác với chương trình CLI, là một thứ gọi là vòng lặp sự kiện. Ý tưởng cơ bản có phần phức tạp và khó nén, nhưng về bản chất, điều đó có nghĩa là không có địa ngục nào xảy ra trong lớp chính / chức năng chính của bạn, ngoại trừ:
- kiểm tra hàng đợi sự kiện nếu có bất kỳ sự kiện mới
- nếu có, hãy gửi những sự kiện đó đến những người xử lý thích hợp
- khi bạn đã hoàn tất, điều khiển năng suất trở lại hệ điều hành (thường với một số loại lệnh gọi chức năng "ngủ" hoặc "chọn" hoặc "nhường" đặc biệt)
- sau đó hàm năng suất sẽ trở lại khi hệ điều hành hoàn thành và bạn có một vòng lặp khác.
Có rất nhiều tài nguyên về lập trình dựa trên sự kiện. Nếu bạn có bất kỳ kinh nghiệm nào với JavaScript, thì đó cũng là một ý tưởng cơ bản, ngoại trừ bạn, người viết kịch bản không có quyền truy cập hoặc kiểm soát chính vòng lặp sự kiện hoặc những sự kiện nào có, công việc duy nhất của bạn là viết và đăng ký trình xử lý.
Nhìn chung, bạn nên nhớ rằng lập trình GUI cực kỳ phức tạp và khó khăn. Nếu bạn có tùy chọn, việc tích hợp một máy chủ web nhúng vào chương trình của bạn và có giao diện dựa trên HTML / web thực sự dễ dàng hơn nhiều. Một ngoại lệ mà tôi đã gặp phải là của Apple Cocoa + Xcode + xây dựng giao diện + hướng dẫn mà làm cho nó dễ dàng với môi trường dễ tiếp cận nhất đối với những người mới đến lập trình GUI mà tôi đã nhìn thấy.