Bon, vu ton niveau, je ne suis pas sûr que tu vas comprendre, mais on va essayer quand même.
Ce qui conditionne l'ouverture de la fenêtre DOS ou non, c'est le module de démarrage ajouté par le compilateur (enfin, l'éditeur de lien) à la création de l'exécutable. Tu peux voir ça comme un bout de code qui va initialiser 2 ou 3 trucs (genre stdin, stdout, ...), puis appeler ta fonction main() (parce que bon, ce n'est pas le système d'exploitation qui peut avoir connaissance de ce genre de chose).
Dans le cas de Windows, il faut changer ce module de démarrage pour éviter la création de la fenêtre DOS, ça veut dire créer son propre module de démarrage (bon courrage), ou en utiliser un déjà qui ne crée pas de fenêtre DOS, pas exemple celui utilisé pour créer un programme Windows (Dans MinGW, il me semble qu'ils sont dans \MinGW\lib\*crt*.o).
Avec Code::blocks + MinGW, ça se règle dans Project=>Properties=>Build targets. Si tu choisi "GUI Application", ça va utiliser le module de démarrage Windows. Petit problème toutefois: ce module va rechercher une fonction WinMain() et non main() et son prototype est légèrement différent (notamment les arguments de la ligne de commande sont sous forme d'UNE chaine de caractère). Une fois passé le point d'entré, tu n'es pas du tout obligé de faire appel à l'API windows (genre créer une fenêtre ou avoir une boucle d'événement), tu peux parfaitement te contenter d'un programme procédural.