Точно необходимо понять многопоточность, взаимодействие потоков, блокировки. Это базовый минимум, т.к. GUI всегда работает в отдельном потоке. Второе - понять, что в GUI оперируют понятием события. Нажатие на кнопку - событие, движение мыши - событие. Отсюда вытекает необходимость почитать и понять про главный цикл, по-другому цикл обработки событий или цикл обработки сообщений.
Для начальной разработки GUI отлично подходит QT с системой сигналов, слотов. Эти сигналы и слоты помогают очень просто организовать взаимодействие потока интерфейса и остального приложения.