A víš, kde to vytuhne? Třeba to není v okamžiku návratu z Kresli(), ale někde pozděj. Přidej si tam nějaký pomocný printf() nebo puts(), do Kresli() před return, potom až za volání Kresli(). Nebo to odkrokuj v debuggeru. Za tím ifem je ještě nějaký další kód? Takto, jak jsi to napsal, Kresli() skončí vždy, bez ohledu na výsledek toho ifu. Ani bys tam ten return nemusel psát.
void Kresli()
{
 puts("zacatek funkce Kresli()\n");
  nějaký kód
  if (podmínka)
  {
    puts("konec funkce Kresli() - podminka splnena\n");
    return;
  }
  nějaký další kód
  puts("konec funkce Kresli()\n");
}
/* ------ */
/* odtud Kresli() volame */
 puts("ted zavolam Kresli()\n");
 Kresli();
 puts("ted jsem zpet z Kresli()\n");
Pokud to bude psát:
ted zavolam Kresli()
zacatek funkce Kresli()
konec funkce Kresli() - podminka splnena
ted jsem zpet z Kresli()
return funguje správně a příčinu problému musíš hledat jinde.