int WINAPI WinMain ( HINSTANCE hInstance, //id окна HINSTANCE hPrevInstance, //не используется LPSTR lpszCmdParam, // указатель на командную строку после имени программы int nCmdShow ) // определяет в каком виде создоваемое окно будет появлятся на экране(минимизировано, во весь экран...)
{ HWND hWnd; WNDCLASS WndClass; //объявление структуры окна MSG Msg; char szClassName[]="HelloWorld"; WndClass.style=CS_HREDRAW | CS_VREDRAW; //стиль окна CS(class style) WndClass.lpfnWndProc = HelloWorldWndProc; //функция обработки окна WndClass.cbClsExtra = 0; //резервирования дополнительной памяти для класса WndClass.cbWndExtra = 0; //резервирования дополнительной памяти для окна WndClass.hInstance = hInstance; //id окна WndClass.hIcon = LoadIcon(NULL,IDI_APPLICATION); //определяет id иконки окна WndClass.hCursor =LoadCursor(NULL,IDC_ARROW); //определяет id курсора окна WndClass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); //определяет id кисти(brush), которой будет закраше фон окна WndClass.lpszMenuName = NULL; // хранит указатель на строку, содержащую имя меню для данной программы WndClass.lpszClassName = szClassName; //поле содержит указатель на строку,содержащую имя создаваемого нами класса
if( !RegisterClass(&WndClass)) //Регистрация и создание класса окна(RegisterClass) { MessageBox(NULL,"Cannot register class","Error",MB_OK); return 0; }
hWnd = CreateWindow(szClassName, //указатель на строку с именем класса окна "Program No 1", //текст в заголовке окна WS_OVERLAPPEDWINDOW, //стиль окна CW_USEDEFAULT,CW_USEDEFAULT, //положение окна на экране,отступы в пикселях от верхнего левого угала края экрана, от верхней границы CW_USEDEFAULT,CW_USEDEFAULT,//ширину и высоту NULL, //id окна являющимся родителеским по отношению к окну NULL, //id меня окна hInstance,//id экземпляра программы которая запускается NULL); //указатель структуры с дополнительной информацией if (!hWnd) { MessageBox(NULL,"Cannot crete window","Error",MB_OK); return 0; }
ShowWindow(hWnd, //id созданого окна nCmdShow); //в каком виде будет отображено на экране UpdateWindow(hWnd); //посылает функции окна сообщение WM_PAINT, которое заставляет ПЕРЕРИСОВАТЬСЯ while(GetMessage(&Msg, //выбор сообщения из очереди указатель на сообщение NULL, // id окна созданного программой 0,0)) //интервал номеров сообщений передаваемых функции окна нижняя граница, верхняя граница { TranslateMessage(&Msg); //преобразование сообщений DispatchMessage(&Msg); //передача сообщений на обработку в оконную процедуру } return Msg.wParam; }
LRESULT CALLBACK HelloWorldWndProc (HWND hWnd, // id окна UINT Message, //сообщение UINT wParam, LONG lParam) { HDC hDC; //объявление структуры контекста устройства PAINTSTRUCT PaintStruct; RECT Rect; switch(Message) { case WM_PAINT: hDC = BeginPaint(hWnd, & PaintStruct); //получение контекста устройства GetClientRect(hWnd,&Rect); DrawText(hDC,"Hello, World!",-1,&Rect, DT_SINGLELINE|DT_CENTER | DT_VCENTER); EndPaint(hWnd,&PaintStruct); //возвращение контекста устройства return 0; case WM_DESTROY: PostQuitMessage(0); return 0; return 0; } return DefWindowProc(hWnd,Message,wParam,lParam); //стандартная обработка сообщений }