At here https://github.com/thpatch/win32_utf8/blob/master/src/user32_dll.c#L45
I find it's very strange that you just copy the lpfnWndProc without doing anything more.
A WindowProc callback can receive certain messages (such as WM_CREATE) which have string in lParam or wParam.
So if we pass a WindowProc to RegisterClassW, then it can receive wide character string.
But the WindowProc itself is programmed to handle only ANSI string (or Multibyte string). So how can it work properly?