обычно я использую visual studio, но я перешел на mingw, мне нравится, чтобы мои приложения можно было легко менять с юникодовой и многобайтовой, в моем проекте mingw у меня есть свои определения, и они включают в себя:
#define WIN32_LEAN_AND_MEAN
#define WINVER 0x0700
#define _UNICODE
#include <windows.h>
#include <commctrl.h>
#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>
#define WND_MAIN_CLASS _T("MainWindowFrame")
тогда я регистрируюсь и создаю свое окно, например
WNDCLASSEX wc;
...
wc.lpszClassName = WND_MAIN_CLASS;
RegisterClassEx(&wc);
hwnd = CreateWindowEx(0, WND_MAIN_CLASS, _T("Main Window"),
WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,
CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, hInst, NULL);
но когда я иду к компиляции, я получаю ошибки, что он не может преобразовать wchar_t в CHAR * в lnzzlassCameName WNDCLASSEX и CreateWindowEx в имени класса и заголовке окна.
Если я щелкну правой кнопкой мыши и перейду к объявлению createwindowex и WNDCLASSEX, он получит их из winuser.h:
typedef WNDCLASSEXW WNDCLASSEX,*LPWNDCLASSEX,*PWNDCLASSEX;
#define CreateWindowEx CreateWindowExW
если я закомментирую определение _UNICODE, оно компилируется и работает без проблем