Note that, most of the compilers requires you to have sources writen in ANSI. Some compilers supports unicode sources, but there might be some other requirements too. Before doing stuff like that, you should think about it very carefuly - the source will not be compilable on other platforms/compilers. If you're using the microsoft compiler (like free toolkit), than you can find more info
here about all this stuff. I don't know about the other compilers.
Anyway, you can still have non-latin unicode characters inside string literals - you must use hex escape codes. I am from Lithuania, and i experienced this problem with the non-latin characters too. The best source for all characters is, ofcourse,
unicode.org page. You can download all the character tables in PDF format. Heres the
PDF file for Cyrillic characters. So, this code should work for you:
if(!RegisterClassEx(&WndClassEx))
{
#ifdef UNICODE
MessageBoxW (0, L"\x041E\x0448\x0438\x0431\x043A\x0430 \x0432 \x0440\x0435\x0433\x0438\x0441\x0442\x0440\x0430\x0446\x0438\x0438 !", L"\x041E\x0448\x0438\x0431\x043A\x0430!", MB_ICONEXCLAMATION | MB_OK); // <= Unicode character codes can be used here
#else
MessageBoxA (0, "Error in registration !", "Error!", MB_ICONEXCLAMATION | MB_OK); // <= non ANSI characters won't work here
#endif
return -1;
}