#include "Windows.h"
#include "windowsx.h"
#include "tchar.h"
#include "resource.h"
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
HCURSOR hCursor1, hCursor2;
int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nShowCmd)
{
WCHAR className[] = L"FirstWindow";
WNDCLASSEX wndClass;
wndClass.cbSize = sizeof(WNDCLASSEX);
wndClass.style = CS_HREDRAW | CS_VREDRAW;
wndClass.hInstance = hInstance;
//LoadCursor загружает курсор из ресурсов приложения
//MAKEINTRESOURCE нужен для преобразования идентификатора в строку
wndClass.hCursor = LoadCursor(hInstance, MAKEINTRESOURCE(IDC_CURSOR1));
//LoadCursor загружает иконку из ресурсов приложения
wndClass.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON2));
wndClass.hIconSm = NULL;
wndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = 0;
wndClass.lpszMenuName = NULL;
wndClass.lpszClassName = className;
wndClass.lpfnWndProc = WindowProc;
if (!RegisterClassEx(&wndClass)) {
return 0;
}
HWND hWnd = CreateWindowEx(
0,
className,
L"My first window",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, //x,y
CW_USEDEFAULT, CW_USEDEFAULT, //width, height
NULL,
NULL,
hInstance,
NULL
);
ShowWindow(hWnd, nShowCmd);
UpdateWindow(hWnd);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
int x, y;
switch (uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_CREATE:
//получаем дескриптор приложения
HINSTANCE hInstance = GetModuleHandle(0);
//загружаем курсоры из ресурсов приложения
hCursor1 = LoadCursor(hInstance, MAKEINTRESOURCE(IDC_CURSOR2));
hCursor2 = LoadCursor(hInstance, MAKEINTRESOURCE(IDI_ICON1));
break;
case WM_MOUSEMOVE:
//устанавливаем тот или иной курсор в зависимости от местонахождения мыши
RECT rect;
GetClientRect(hwnd, &rect);
x = LOWORD(lParam);
y = HIWORD(wParam);
if (x >= rect.right / 4 && x <= rect.right * 3 / 4 && y >= rect.bottom / 4 && y <= rect.bottom * 3 / 4) {
SetCursor(hCursor1);
}
else {
SetCursor(hCursor2);
}
break;
}
return 0;
}
Выскакивает initialization of 'hInstanse' is skipped by 'case' label.