Ошибки в примере из книги Щупака

mikhail90

Начал читать книжку Щупака "Win32 Api Эффективная разработка приложений" . Переписал пример его кода в VS 2012, выдает 2 ошибки, подскажите как их исправить, т.к. пока в WinApi почти ничего не понимаю.
#include <windows.h>
 
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    HWND hMainWnd ;
    char szClassName[] = "MyClass" ;
    MSG msg ;
    WNDCLASSEX wc ;
 
    // Заполняем структуру класса окна
    wc.cbSize = sizeof(wc) ;
    wc.style = CS_HREDRAW | CS_VREDRAW ;
    wc.lpfnWndProc = WndProc ;
    wc.cbClsExtra = 0 ;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance ;
    wc.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
    wc.hCursor = LoadCursor (NULL, IDC_ARROW) ;
    wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH) ;
    wc.lpszMenuName = NULL ;
    wc.lpszClassName = szClassName; // Тут ошибка1
    wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION) ;
 
    // Регистрируем класс окна 
    if (!RegisterClassEx(&wc)) 
    {
        MessageBox (NULL, L"Cannot register class" , L"Error", MB_OK) ;
        return 0 ;
    }
    // создаем основное окно приложения
    hMainWnd = CreateWindow(szClassName, L"A Hello1 Application", // Тут ошибка2
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, 
(HWND ) NULL, (HMENU)NULL, (HINSTANCE) hInstance, NULL) ;
 
    if (!hMainWnd) {
        MessageBox(NULL, L"Cannot create main window", L"Error", MB_OK);
        return 0;
    }
 
    // Показываем наше окно
    ShowWindow(hMainWnd, nCmdShow); 
//  UpdateWindow(hMainWnd);
 
    // Выполняем цикл обработки сообщений до закрытия приложения
    while (GetMessage(&msg, NULL, 0, 0))  {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    return msg.wParam;
}
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    HDC hDC;
    PAINTSTRUCT ps;
    RECT rect;
 
    switch (msg)
    {
    case WM_PAINT:
        hDC = BeginPaint(hWnd, &ps);
 
        GetClientRect(hWnd, &rect);
        DrawText(hDC, L"Hello, World!", -1, &rect,
            DT_SINGLELINE | DT_CENTER | DT_VCENTER );
        
        EndPaint(hWnd, &ps);
        return 0;
 
    case WM_CLOSE:
        DestroyWindow(hWnd);
        return 0;
 
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
 
    default:
        return DefWindowProc(hWnd, msg, wParam, lParam);
    }
 
    return 0;
}
Ошибка1 : error C2440: '=' : cannot convert from 'char [8]' to 'LPCWSTR' Ошибка2: error C2664: 'CreateWindowExW' : cannot convert parameter 2 from 'char [8]' to 'LPCWSTR'
2 ответа

mikhail90

//char szClassName[] = "MyClass";
TCHAR szClassName[] = L"MyClass";


mikhail90

подскажите как их исправить
Отключить Юникод в настройках проекта, либо писать всё с поддержкой Юникода