CW_USEDEFAULT,
600,
100,
NULL,
NULL,
hInstance,
NULL);
// Отображение окна
ShowWindow(hWnd, iCmdShow);
// Обработка сообщений, пока программа не будет прервана
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
// Функция обратного вызова для обработки сообщений
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
HDC hDC;
PAINTSTRUCT ps;
switch(iMsg)
{
// Вызывается сразу же при создании окна функцией CreateWindow() (или CreateWindowEx())
case WM_CREATE:
strcpy(g_szStatus, «Щелкните левой кнопкой мыши для запуска сервера, правой для его остановки»);
// g_serverSocket инициализируется значением недействительного сокета
g_serverSocket = INVALID_SOCKET;
break;
// Вызывается, когда пользователь отпускает левую кнопку мыши
case WM_LBUTTONUP:
// Запуск сервера
Start(hWnd);
// Перерисовка окна (генерация сообщения WM_PAINT)
InvalidateRect(hWnd, NULL, TRUE);
break;
// Вызывается, когда пользователь отпускает правую кнопку мыши
case WM_RBUTTONUP:
// Остановка сервера
Stop();
InvalidateRect(hWnd, NULL, TRUE);
break;
case WM_SERVER_ACCEPT:
strcpy(g_szStatus, “Клиент подключился”);
InvalidateRect(hWnd, NULL, TRUE);
break;
// Вызывается, когда окно обновляется
case WM_PAINT:
hDC = BeginPaint(hWnd, &ps);
TextOut(hDC, 20, 20, g_szStatus, (int)strlen(g_szStatus));
EndPaint(hWnd, &ps);
break;
// Вызывается, когда пользователь закрывает окно
case WM_DESTROY:
// Остановка сервера при закрытии окна
Stop();
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, iMsg, wParam, lParam);
}
return 0;
}