Модераторы: Rickert
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Полноэкранный режим OpenGL, Полноэкранная картинка OpenGL из Visual 
:(
    Опции темы
Alexusis
Дата 8.5.2008, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 6.5.2008

Репутация: нет
Всего: нет



Людики, помогите плз с игрушкой..
Пишу я в Visual C++ с использованием OpenGL. Создаю значит конслольный проект и каклякаю помаленьку -)

А проблема вот в чём:
Меня бесит рамка окна при выполнени проги. Если ставлю разрешение окошка 1024*768 (как на монике), то всё равно рамочка рисуется.. 
Можно ли как-нибудь безболезненно перейти в полноэкранный режим (очень хотелось бы именно из консольного проекта)?
PM MAIL   Вверх
Graf_h
Дата 9.5.2008, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 482
Регистрация: 18.10.2007
Где: г. Ровно, Украина

Репутация: 3
Всего: 5



Код


#include "stdafx.h"
#include "resource.h"
#include <stdio.h>
#include <wingdi.h>
#include <gl/gl.h>
#include <gl/glu.h>

#define MAX_LOADSTRING 100

HINSTANCE hInst;                                
TCHAR szTitle[MAX_LOADSTRING];                                
TCHAR szWindowClass[MAX_LOADSTRING];                                

ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
void                setDcPxFormat(HDC hdc);



int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
 
    MSG msg;
    HACCEL hAccelTable;

    LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadString(hInstance, IDC_CRAZY, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);

    
    if (!InitInstance (hInstance, nCmdShow)) 
    {
        return FALSE;
    }

    hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_CRAZY);

    while (GetMessage(&msg, NULL, 0, 0)) 
    {
        if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }

    
    return msg.wParam;
}




ATOM MyRegisterClass(HINSTANCE hInstance)
{
    WNDCLASSEX wcex;

    wcex.cbSize = sizeof(WNDCLASSEX); 

    wcex.style            = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = (WNDPROC)WndProc;
    wcex.cbClsExtra        = 0;
    wcex.cbWndExtra        = 0;
    wcex.hInstance        = hInstance;
    wcex.hIcon            = LoadIcon(hInstance, (LPCTSTR)IDI_CRAZY);
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground    = (HBRUSH)GetStockObject(BLACK_BRUSH);
    wcex.lpszMenuName    = 0;
    wcex.lpszClassName    = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);

    return RegisterClassEx(&wcex);
}

    
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;

   hInst = hInstance; 
   HWND hdwind = GetDesktopWindow();
   HDC hdescDc = GetDC(hdwind);

   int resolutWIDTH=GetDeviceCaps(hdescDc,HORZRES); 
   int resolutHEIGHT = GetDeviceCaps(hdescDc,VERTRES); 
   hWnd = CreateWindow(szWindowClass, szTitle, WS_POPUP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
      0, 0, resolutWIDTH, resolutHEIGHT, NULL, NULL, hInstance, NULL);

   if (!hWnd)
   {
      return FALSE;
   }

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   return TRUE;
}


LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    TCHAR szHello[MAX_LOADSTRING];
    char msg1[3];
    int nVirtKey = (int) wParam;
    sprintf(msg1,"%c",nVirtKey);

    //
        static HGLRC hrc=NULL;
        static HDC hDC=NULL;

    //

    switch (message) 
    {
        case WM_COMMAND:
            wmId    = LOWORD(wParam); 
            wmEvent = HIWORD(wParam); 
            switch (wmId)
            {
                case IDM_ABOUT:
                   DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
                   break;
                case IDM_EXIT:
                   DestroyWindow(hWnd);
                   break;
                default:
                   return DefWindowProc(hWnd, message, wParam, lParam);
            }
            break;
        case WM_CREATE:
            hDC = GetDC(hWnd);
            setDcPxFormat(hDC);
            hrc = wglCreateContext(hDC);
            wglMakeCurrent(hDC,hrc);
        
        break;
        case WM_PAINT:
            
            hdc = BeginPaint(hWnd, &ps);
            
            SwapBuffers(hDC);
            EndPaint(hWnd, &ps);
            break;
        case WM_DESTROY:
            wglMakeCurrent(hDC,NULL);
            wglDeleteContext(hrc);
            PostQuitMessage(0);
            break;
        case WM_KEYDOWN:
            if (nVirtKey==27){    
            if (MessageBox(hWnd,(LPCTSTR) "Exit",(LPCTSTR) "Exit program",1)==1 ) PostQuitMessage(0);}
        
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
   }
   return 0;
}


LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_INITDIALOG:
                return TRUE;

        case WM_COMMAND:
            if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) 
            {
                EndDialog(hDlg, LOWORD(wParam));
                return TRUE;
            }
            break;
    }
    return FALSE;
}



void setDcPxFormat(HDC hdc){
int nPxFormat;
static PIXELFORMATDESCRIPTOR pfd={
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW |
PFD_SUPPORT_OPENGL |
PFD_DOUBLEBUFFER, 
PFD_TYPE_RGBA,
32,
0,0,0,0,0,0,
0,0,
0,
0,
0,
0,
0,
16,
0,
0,
0,
0,
0,0,0
};

nPxFormat = ChoosePixelFormat(hdc,&pfd);
SetPixelFormat(hdc,nPxFormat,&pfd);
}




hWnd = CreateWindow(szWindowClass, szTitle, WS_POPUP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,0, 0, resolutWIDTH, resolutHEIGHT, NULL, NULL, hInstance, NULL);
флаг WS_POPUP  smile 

Это сообщение отредактировал(а) Graf_h - 9.5.2008, 09:48


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
Alexusis
Дата 10.5.2008, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 6.5.2008

Репутация: нет
Всего: нет



Как я понимаю прикреплённый код расчитан на Win 32 Aplication (no console)...
Может всё-таки кто-то умудрялся делать это (полноэкранный режим) в простом консольном приложении?

позже добавлено:

Данная проблема решилась, выкладываю код (может кому понадобится)
Код
       #include <windows.h>             
    #include <gl\gl.h>               
    #include <gl\glu.h>       
    #include <gl\glaux.h>             

#pragma comment (lib, "OpenGL32.lib") 
#pragma comment (lib, "Glu32.lib") 
#pragma comment (lib, "Glaux.lib") 

static GLint resW = 640, resH = 480; 
bool isFullscr = true;  
static GLdouble cntr; 
BOOL keys[256];

HGLRC hGLRC;
HDC hDC; 

static GLfloat light1_position[] = {0.0, 0.0, 3.0, 1.0}; 

GLvoid InitGL() 


GLfloat white_light[] = {1.0, 1.0, 1.0, 1.0}; 
glClearColor (0.5, 0.5, 1, 0.5); 

GLfloat light_position[] = {0.0, 0.0, 10.0, 1.0}; 
glLightf (GL_LIGHT0, GL_SPOT_EXPONENT, 20.0); 
glLightfv (GL_LIGHT0, GL_POSITION, light_position); 
glLightf (GL_LIGHT0, GL_SPECULAR, 128); 
glEnable (GL_LIGHTING); 
glEnable (GL_LIGHT0); 

glShadeModel (GL_SMOOTH); 
glEnable (GL_DEPTH_TEST); 
glEnable (GL_AUTO_NORMAL); 
glEnable (GL_NORMALIZE); 
glEnable (GL_CULL_FACE); // Aee??aai iona?aiea a?aiae 
glCullFace (GL_BACK); 



void reshape(int width,int height) 

glViewport(0,0,width,height);  
glMatrixMode( GL_PROJECTION ); 
glLoadIdentity(); 
gluPerspective (50.0, (GLfloat)width/(GLfloat)height, 1.0, 100.0); 
glMatrixMode( GL_MODELVIEW ); 
glLoadIdentity(); 


void display() 

glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glPushMatrix(); 
cntr +=0.1; 
glTranslatef (0.0, 0.0, -10); 
///////!!!!glColor3d(1,0,0);!!!!///////
auxSolidSphere (1);
glRotated(cntr, cntr, cntr, cntr);      
auxWireTorus(1,2); 
if (cntr >= 360.0f) cntr =0.0f; 


glPopMatrix(); 
glFlush(); 
}

LRESULT CALLBACK WindowFunc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam) 

RECT Screen; 

GLuint PixelFormat; 
static PIXELFORMATDESCRIPTOR pfd= 

sizeof(PIXELFORMATDESCRIPTOR), 
1, 
PFD_DRAW_TO_WINDOW | 
PFD_SUPPORT_OPENGL | 
PFD_DOUBLEBUFFER,
PFD_TYPE_RGBA, 
32, 
0, 0, 0, 0, 0, 0, 
0, 
0, 
0,
1, 1, 1, 1, 
32, 
0, 
0, 
PFD_MAIN_PLANE, 
0,
0, 0, 0
}; 

switch(message) 
{  
case WM_CREATE: 
hDC = GetDC(hWnd); 

PixelFormat = ChoosePixelFormat(hDC, &pfd);
if (!PixelFormat) 


MessageBox (0, "Error!", "Error", MB_OK | MB_ICONERROR); 
SendMessage(hWnd, WM_DESTROY, wParam, lParam);
break;


SetPixelFormat (hDC, PixelFormat, &pfd); 
if (!SetPixelFormat (hDC, PixelFormat, &pfd))


MessageBox (0, "Error!","Error", MB_OK | MB_ICONERROR); 
SendMessage(hWnd, WM_DESTROY, wParam, lParam); 
break; 


hGLRC = wglCreateContext (hDC);
if (!hGLRC) 


MessageBox (0, "Error OpenGL!","Error", MB_OK | MB_ICONERROR); 
SendMessage(hWnd, WM_DESTROY, wParam, lParam); 
break; 


wglMakeCurrent(hDC, hGLRC); 
if (!wglMakeCurrent(hDC, hGLRC))

MessageBox (0, "Error", "Error!!!", MB_OK | MB_ICONERROR); 

SendMessage(hWnd, WM_DESTROY, wParam, lParam); 
break; 


InitGL (); 
break; 


case WM_DESTROY: 
case WM_CLOSE: 
ChangeDisplaySettings (NULL, 0);
if(hDC) wglMakeCurrent(hDC, NULL); 
if(hGLRC) wglDeleteContext(hGLRC); 
if(hWnd) ReleaseDC(hWnd, hDC); 
PostQuitMessage(0); 
break; 

case WM_SIZE: 
GetClientRect (hWnd, &Screen);
reshape(Screen.right, Screen.bottom ); 
break; 

case WM_SYSKEYDOWN: 
case WM_KEYDOWN: 
keys[wParam] = TRUE; 
break; 

case WM_SYSKEYUP: 
case WM_KEYUP: 
keys[wParam] = FALSE; 
break; 

default: 
return DefWindowProc(hWnd,message,wParam,lParam); 


return 0;  
}

int WINAPI WinMain(HINSTANCE hInstance, 
HINSTANCE hPrevInst, 
LPSTR str,int nWinMode) 

MSG msg; 
WNDCLASS wc; 
HWND hWnd; 

wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;  
wc.lpfnWndProc = WindowFunc; 
wc.cbClsExtra = 0; 
wc.cbWndExtra = 0; 
wc.hInstance = hInstance; 
wc.hIcon = NULL; 
wc.hCursor = LoadCursor (NULL, IDC_ARROW); 
wc.hbrBackground = NULL; 
wc.lpszMenuName = NULL; 
wc.lpszClassName = "OpenGLWinClass"; 

if (!RegisterClass(&wc)) 

MessageBox(0, "Error","Error!!!", MB_OK | MB_ICONERROR); 
return FALSE; 


if(isFullscr)  

hWnd = CreateWindow( 
"OpenGLWinClass", 
"O?IE 01 >OpenGL is COOL", 
WS_POPUP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, 
0, 0, 
resW, resH, 
NULL, NULL, hInstance, NULL); 

else 
{  
hWnd = CreateWindow( 
"OpenGLWinClass",  
"O?IE 01 >OpenGL is COOL", 
WS_OVERLAPPEDWINDOW | WS_SYSMENU | WS_MINIMIZEBOX | WS_VISIBLE | WS_SIZEBOX,
0, 0, 
resW, resH, 
NULL, NULL, hInstance, NULL); 


if (!hWnd) 

MessageBox(0, "Error","Error!!!", MB_OK | MB_ICONERROR); 
return FALSE; 


if(isFullscr) 

DEVMODE dmScreenSettings; 
memset (&dmScreenSettings, 0, sizeof(DEVMODE));
dmScreenSettings.dmSize = sizeof(DEVMODE); 
dmScreenSettings.dmPelsWidth = resW; 
dmScreenSettings.dmPelsHeight = resH; 
dmScreenSettings.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
ChangeDisplaySettings (&dmScreenSettings, CDS_FULLSCREEN);


ShowWindow(hWnd,nWinMode); 
UpdateWindow(hWnd); 
SetFocus(hWnd); 

while (1) 

while (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) 

if (GetMessage(&msg, NULL, 0, 0)) 

TranslateMessage (&msg); 
DispatchMessage (&msg); 

else return TRUE; 


display(); 
SwapBuffers(hDC);  

if (keys[VK_ESCAPE]) SendMessage(hWnd, WM_CLOSE, 0, 0);


}



Одновременно с решённой проблемой появилась другая...
Почему, когда я в функции display пытаюсь получить на выходе красную сферу рисуется почему-то серая?



M
arilou
Внимание: один топик - один вопрос. Ну и не забывайте, что телепатов на форуме нет, выкладывайте код


Это сообщение отредактировал(а) arilou - 12.5.2008, 00:20
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.0743 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.