Si quieres hacerlo POO, siempre puedes encerrar el código GUI dentro de tus propias clases (algo como la MFC, pero más sencillo y directo a tus necesidades).
Yo hice algo así hace ya tiempo:
Código:
class window
{
window(alto, ancho, ...);
~window();
private:
void wndproc();
friend void wndproc_wrapper();
...
}
void wndproc_wrapper(void *param)
{
((window *) param)->wndproc();
}
Algo así. Usa el wrapper para llamar a la función wndproc real de cada clase/ventana, y main() que se encargue de despachar los mensajes, etc.
Decir que no funcionaba nada mal, y era fácilmente portable...