#include <windows.h>
#define BUTTON 100
#define EDIT 101

/* Функция обработки сообщений */
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
	switch(message)
	{
		case WM_COMMAND: if(LOWORD(wParam) == BUTTON) MessageBox(hWnd, "Вы кликнули!", "Событие", 0); break;
		case WM_DESTROY: PostQuitMessage(0); break;
		default: return DefWindowProc(hWnd, message, wParam, lParam);
	}
	return DefWindowProc(hWnd, message, wParam, lParam);
}

/* функция регистрации класса окон */
ATOM RegMyWindowClass(HINSTANCE hInst, LPCTSTR lpzClassName) {
	WNDCLASS wc = {0};
	wc.lpfnWndProc = (WNDPROC)WndProc;
	wc.style = CS_HREDRAW|CS_VREDRAW;
	wc.hInstance = hInst;
	wc.lpszClassName = lpzClassName;
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground = (HBRUSH)COLOR_WINDOWFRAME;
	wc.hIcon = LoadImage(NULL, "img.ico", IMAGE_ICON, 32, 32, LR_LOADFROMFILE);
	return RegisterClass(&wc);
}

/* Функция вхождений программы WinMain */
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
	FreeConsole();
	LPCTSTR lpzClass = "Window";
	if(!RegMyWindowClass(hInstance, lpzClass)) return 1;
	
	/* Вычисление координат центра экрана */
	RECT screen;
	GetWindowRect(GetDesktopWindow(), &screen);
	int width = 500;
	int height = 300;
	int x = (screen.right - width)/2;
	int y = (screen.bottom - height)/2;

	/* Создание окна */
	HWND hWnd = CreateWindow(
		lpzClass,
		"Main",
		WS_OVERLAPPEDWINDOW | WS_VISIBLE,
		x, y,
		width, height,
		NULL,
		NULL,
		hInstance,
		NULL
	);

	/* Создание кнопки */
	HWND OK = CreateWindow(
		"BUTTON",
		"OK",
		WS_CHILD | WS_VISIBLE,
		212, 200,
		75, 23,
		hWnd,
		(HMENU)BUTTON,
		hInstance,
		NULL
	);
	
	/* Создание текстового поля */
	HWND Edit = CreateWindowEx(
		WS_EX_CLIENTEDGE,
		"edit",
		"",
		WS_CHILD | WS_VISIBLE,
        10, 10,
		246, 23,
		hWnd,
		(HMENU)EDIT,
		hInstance,
		NULL
	);
	
	MSG msg = {0};
	int state = 0;
	while((state = GetMessage(&msg, NULL, 0, 0 )) != 0)   
		DispatchMessage(&msg);
}