PDA

View Full Version : help!!! i can'tfind ShowWindow()!!!



orca188
09-11-2009, 08:09 PM
i cteated a opengl sample program by dev c++,but i can not find the function ShowWindow(). it is very strange.

because dev c++ use windows32 raw API to create the sample program,and because win32 raw API need the function ShowWindow(),

but, i can not find the function .

whhhhhhhhhhhhhhhhhhy?????

oh no ,it is hard,

somebody help me!!!!!
thank you very much!!!!!

the code is here
/////////////////////////////////////////////////////
/**************************
* Includes
*
**************************/

#include <windows.h>
#include <gl/gl.h>


/**************************
* Function Declarations
*
**************************/

LRESULT CALLBACK WndProc (HWND hWnd, UINT message,WPARAM wParam, LPARAM lParam);
void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC);
void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC);


/**************************
* WinMain
*
**************************/

int WINAPI WinMain (HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int iCmdShow)
{
WNDCLASS wc;
HWND hWnd;
HDC hDC;
HGLRC hRC;
MSG msg;
BOOL bQuit = FALSE;
float theta = 0.0f;

/* register window class */
wc.style = CS_OWNDC;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor (NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = "GLSample";
RegisterClass (&amp;wc);

/* create main window */
hWnd = CreateWindow (
"GLSample", "OpenGL Sample",
WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE,
0, 0, 256, 256,
NULL, NULL, hInstance, NULL);

/* enable OpenGL for the window */
EnableOpenGL (hWnd, &amp;hDC, &amp;hRC);

/* program main loop */
while (!bQuit)
{
/* check for messages */
if (PeekMessage (&amp;msg, NULL, 0, 0, PM_REMOVE))
{
/* handle or dispatch messages */
if (msg.message == WM_QUIT)
{
bQuit = TRUE;
}
else
{
TranslateMessage (&amp;msg);
DispatchMessage (&amp;msg);
}
}
else
{
/* OpenGL animation code goes here */

glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
glClear (GL_COLOR_BUFFER_BIT);

glPushMatrix ();
glRotatef (theta, 0.0f, 0.0f, 1.0f);
glBegin (GL_TRIANGLES);
glColor3f (1.0f, 0.0f, 0.0f); glVertex2f (0.0f, 1.0f);
glColor3f (0.0f, 1.0f, 0.0f); glVertex2f (0.87f, -0.5f);
glColor3f (0.0f, 0.0f, 1.0f); glVertex2f (-0.87f, -0.5f);
glEnd ();
glPopMatrix ();

SwapBuffers (hDC);

theta += 1.0f;
Sleep (1);
}
}

/* shutdown OpenGL */
DisableOpenGL (hWnd, hDC, hRC);

/* destroy the window explicitly */
DestroyWindow (hWnd);

return msg.wParam;
}


/********************
* Window Procedure
*
********************/

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

switch (message)
{
case WM_CREATE:
return 0;
case WM_CLOSE:
PostQuitMessage (0);
return 0;

case WM_DESTROY:
return 0;

case WM_KEYDOWN:
switch (wParam)
{
case VK_ESCAPE:
PostQuitMessage(0);
return 0;
}
return 0;

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


/*******************
* Enable OpenGL
*
*******************/

void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC)
{
PIXELFORMATDESCRIPTOR pfd;
int iFormat;

/* get the device context (DC) */
*hDC = GetDC (hWnd);

/* set the pixel format for the DC */
ZeroMemory (&amp;pfd, sizeof (pfd));
pfd.nSize = sizeof (pfd);
pfd.nVersion = 1;
pfd.dwFlags = PFD_DRAW_TO_WINDOW |
PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 24;
pfd.cDepthBits = 16;
pfd.iLayerType = PFD_MAIN_PLANE;
iFormat = ChoosePixelFormat (*hDC, &amp;pfd);
SetPixelFormat (*hDC, iFormat, &amp;pfd);

/* create and enable the render context (RC) */
*hRC = wglCreateContext( *hDC );
wglMakeCurrent( *hDC, *hRC );

}


/******************
* Disable OpenGL
*
******************/

void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC)
{
wglMakeCurrent (NULL, NULL);
wglDeleteContext (hRC);
ReleaseDC (hWnd, hDC);
}
/////////////////////////////////////////////////////

orca188
09-11-2009, 08:12 PM
and what tutorial should i learn for my question???

marshats
09-11-2009, 11:31 PM
Are you tied to using windows API? If yes then you can disregard the rest of this reply since I don't have an answer to your Windows specific question. But if you are open to a powerful alternative ...

I have found that learning openGL with the GLUT library is much more rewarding. As you get more into openGL you will see that many many examples in the community exist with GLUT as the basis (for instance see openGL/GLUT examples (http://www.opengl.org/code/category/C19) ). And since you are using dev-cpp you even have a devpak available for easy starting with GLUT -- see dev-cpp and GLUT (http://www.astahost.com/info.php/Installing-Glut-Dev_t14192.html) or an Alternative (http://www.onecore.net/dev-c-opengl.htm). You can use its installed GLUT template to get a compiled and running openGL window simply too :)

Compare your windows code against a minimal code to open a working openGL window and draw a complicated famous 3d teapot -- the GLUT code is cleaner and less cluttered:



//minimal openGL/GLUT example
#include <cstdlib>
#include <GL/glut.h>

void keyboard( unsigned char key, int nMouseX, int nMouseY )
{
if( key == 27 ) exit(0); // exit when <escape> key pressed
}

void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidTeapot(0.5);
glutSwapBuffers();
}

int main(int argc, char **argv) {
glutInit(&amp;argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutCreateWindow("Hello OpenGL/GLUT");
glutKeyboardFunc( keyboard );
glutDisplayFunc( display );
glutMainLoop();
return 0;
}


A good beginning but detailed tutorial can found at Lighthouse3D tutorials (http://www.lighthouse3d.com/opengl/glut/index.php?1). Consider this to be a week or two of good reading and experimenting to get into openGL but it is well worth the effort. There are multiple zip files as you read along -- you don't need the VC specific stuff, just the *.c/*.cpp files copied into your dev-cpp template cpp-file and using the standard GLUT library options everything will compile fine in dev-cpp.

orca188
09-12-2009, 04:42 AM
thank you marshats ,you are wonderfull

marshats
09-12-2009, 10:14 AM
glad to help. I hope you find GLUT library as helpful as I have. It really is a nice tool to start learning openGL from.

vivek vyas
09-12-2009, 12:27 PM
but if u wanna know WS_VISIBLE complete the task of ShowWindow

orca188
09-12-2009, 09:38 PM
you are right ,

no window if i remove the WS_VISIBLE,

perfect