Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <windows.h>
- #include <math.h>
- #define M_PI 3.14
- #include <glut.h>
- LRESULT WINAPI WndProc(HWND, UINT, WPARAM, LPARAM);
- int main()
- {
- //Получаем хендл приложения, потребуется при создании класса окна и самого окна.
- HINSTANCE histance = GetModuleHandleW(NULL);
- //Создаем класс окна.
- WNDCLASSEX wclass = { 0 }; //Обнуляем структуру с самого начала, так как заполнять будем не все поля.
- wclass.cbSize = sizeof(WNDCLASSEX); //По размеру структуры Windows определит, какая версия API была использована.
- wclass.style = CS_HREDRAW | CS_VREDRAW; //Говорим окну перерисовываться при изменении размеров окна.
- wclass.lpfnWndProc = WndProc; //Указываем функцию обработки сообщений.
- wclass.hInstance = histance; //Указываем хендл приложения.
- wclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //GetStockObject возвращает хендл на белую кисточку, для фона окна
- wclass.lpszClassName = "MYCLASS"; //Имя данного класса, должно быть уникальным, иначе, если класс с таким именем уже зарегестрирован, то в регистрации будет отказано.
- //Регистрируем класс окна.
- RegisterClassEx(&wclass);
- HWND w;
- //Создаем окно.
- w = CreateWindowExW(
- 0,
- L"MYCLASS", //Имя класса.
- L"Title", //Заголовок окна.
- WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, //WS_OVERLAPPEDWINDOW, //Тип окна, влияет на отображение системного меню, кнопок в верхнем правом углу и т.п.
- 50, 50, //Координаты окна.
- 500, 500, //Ширина окна.
- 0, //Ссылка на родительское окно.
- 0, //Хендл меню.
- histance, //Хендл приложения, получаем его функцией GetModuleHandleW.
- 0
- );
- //Показываем окно, если этого не сделать окно не будет отображено.
- ShowWindow(w, SW_SHOW);
- //Обновляем окно.
- UpdateWindow(w);
- //Запускаем цикл обработки сообщений окна.
- MSG msg = { 0 };
- while (GetMessage(&msg, 0, 0, 0)) {
- TranslateMessage(&msg); //Преобразуем виртуальную клавишу в ASCII-код и посылаем сообщение WM_CHAR (тут не нужно.Необходимо, если надо работать с текстом, вводимым с клавиатуры)
- DispatchMessage(&msg); //Передаем сообщения для обработки в "главную функцию обработки сообщений"
- }
- return 0;
- }
- LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
- {
- switch (msg) {
- case WM_DESTROY:// если этого не сделать, то все ваши жалкие попытки закрыть окно будут проигнорированы
- wglMakeCurrent(0, 0);
- wglDeleteContext(wglGetCurrentContext());
- ReleaseDC(hWnd, wglGetCurrentDC());
- PostQuitMessage(0);// отправляет приложению сообщение WM_QUIT. Принимает код ошибки, который заносится в wParam сообщения WM_QUIT
- break;
- case WM_CREATE:
- HGLRC RC;
- HDC DC;
- PIXELFORMATDESCRIPTOR pfd, *ppfd;
- wglMakeCurrent(0, 0);
- int pixelformat;
- ppfd = &pfd;
- ppfd->nSize = sizeof(PIXELFORMATDESCRIPTOR);
- ppfd->nVersion = 1;
- ppfd->dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
- ppfd->dwLayerMask = PFD_MAIN_PLANE;
- ppfd->iPixelType = PFD_TYPE_RGBA;
- ppfd->cColorBits = 16;
- ppfd->cDepthBits = 16;
- ppfd->cAccumBits = 0;
- ppfd->cStencilBits = 0;
- DC = GetDC(hWnd); //1
- pixelformat = ChoosePixelFormat(DC, ppfd); //2
- SetPixelFormat(DC, pixelformat, ppfd); //3
- RC = wglCreateContext(DC); //4
- wglMakeCurrent(DC, RC); //5
- break;
- case WM_SIZE:
- // при изменении размеров формы необходимо правильно
- // установить область вывода OpenGL
- WORD w, h;
- w = LOWORD(lParam);
- h = HIWORD(lParam);
- glViewport(0, 0, w, h);
- break;
- case WM_PAINT:
- int i;
- GLfloat x, y;
- glClearColor(0.0, 0.0, 0.25, 0.0);
- glClear(GL_COLOR_BUFFER_BIT);
- glPointSize(10.0);
- for (i = 0; i <= 12; i++)
- {
- if(i == 3 || i == 6 || i == 9 || i == 12) glColor3f(1.0, 0.0, 0.0); else glColor3f(1.0, 1.0, 1.0);
- glBegin(GL_POINTS);
- x = 0.8 * cos(i * 2 * M_PI / 12);
- y = 0.8 * sin(i * 2 * M_PI / 12);
- glVertex2f(x, y);
- glEnd();
- }
- glBegin(GL_LINES);
- glVertex2f(0.0, 6.28);
- glVertex2f(0.0, 0.0);
- glEnd();
- SwapBuffers(wglGetCurrentDC());
- break;
- }
- return DefWindowProc(hWnd, msg, wParam, lParam);//обрабатываем все остальные сообщения обработчиком "по умолчанию"
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement