По моему мнению, вы должны разделить часть пользовательского интерфейса вашего приложения с вашей логической частью в разных модулях. Допустим, вы написали модуль с именем player, вам нужно предоставить интерфейс для слушателя плеера, например, свинг Java, сделайте это для кнопок. После этого вы можете отслеживать ваши события везде, независимо от используемой вами технологии (QT, MFC, VCL и т. Д.). Таким образом, вы можете реализовать мост, стратегию или шаблон наблюдателя в этом случае. Я приведу пример с шаблоном проектирования моста:
class Player{
private:
IPlayerListener* _listener;
private:
static void threadCallback( void* arg ){
Player* player = (Player*)arg;
//Download file here
player._listener->downloadComplete( track );
}
public:
Player( IPlayerListener* listener ){
_listener = listener;
}
bool playFile( uri file ){
//Start a new thread and do all staff needed to download the file in there.
thread.start(threadCallback, this);
}
};
В вашем интерфейсе объявляются все типы событий, которые игрок может бросить:
class IPlayerListener{
public:
//...
virtual void downloadComplete( const string& track )=0;
//...
};
Избегайте использования библиотек, таких как MFC, в вашем проекте, потому что это может вызвать некоторые проблемы в
будущее. Вы можете перейти на другую платформу или принять решение использовать другую библиотеку, например QT, для своего графического интерфейса.
Удачи.