?
Solved

Create viewport on window with other win32 controls...

Posted on 2004-08-27
3
Medium Priority
?
1,160 Views
Last Modified: 2013-12-06
I have a window,  600 x 400, and I want to display a small gl drawing viewport on the right 300 pixels (or near that), and the left to contain various controls.

I've tried simply calling  glViewport(300,375,250,250), but the whole window becomes black,  overwriting my controls...

What am I doing wrong?

Here's my WinMain



int WINAPI WinMain( HINSTANCE hInstance,  HINSTANCE hPrevInstance,LPSTR lpCmdLine,int iCmdShow )
{
    time_t now;
      time(&now);
      srand(now % 65535);
      
      WNDCLASS wc;
    HWND hWnd;
      HWND hwnd_static1, hStatic2;

    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) COLOR_BACKGROUND;
    wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);
    wc.lpszClassName = "openGL";
      RegisterClass( &wc );

      // create window
      hWnd = CreateWindow(
                  "openGL",
                  "Fur Generator",
                  WS_CAPTION |WS_POPUPWINDOW | WS_VISIBLE,
                  175, 50, 600, 300,
                  NULL, NULL, hInstance, NULL );
      



      strcpy(lf.lfFaceName,"verdana");

      lf.lfHeight = 14;
      lf.lfWeight = 500;
      hFont = CreateFontIndirect(&lf); //or any other font creation method chosen;
      
      lf.lfHeight = 12;
      hSmallFont = CreateFontIndirect(&lf);

      
//+++ make "create" button
      hButton1 = CreateWindow("BUTTON","Create",WS_CHILD | WS_VISIBLE ,190,180,100,20, hWnd,(HMENU)ID_BUTTON1,hInstance,NULL);

      SendMessage(hButton1, WM_SETFONT, (WPARAM)hFont, 1);

//--- made create button



//+++ make "source" button
      hButton1 = CreateWindow("BUTTON","Source File",WS_CHILD | WS_VISIBLE ,10,0,100,20, hWnd,(HMENU)ID_BUTTON_SOURCE,hInstance,NULL);

      SendMessage(hButton1, WM_SETFONT, (WPARAM)hSmallFont, 1);
//--- made source button


//+++ make "output" button
      hButton1 = CreateWindow("BUTTON","Output File",WS_CHILD | WS_VISIBLE ,10,21,100,20, hWnd,(HMENU)ID_BUTTON_SOURCE,hInstance,NULL);

      SendMessage(hButton1, WM_SETFONT, (WPARAM)hSmallFont, 1);
//--- made output button



//+++ make "preview" outline  (until glviewport works)
      
      HWND gloutput = CreateWindow("static","",WS_BORDER | WS_CHILD | WS_VISIBLE ,350,15,220,220, hWnd,(HMENU)ID_BUTTON_SOURCE,hInstance,NULL);
      
       HWND gloutputlabel = CreateWindow("static","preview", WS_CHILD | WS_VISIBLE ,350,0,220,220, hWnd,(HMENU)ID_BUTTON_SOURCE,hInstance,NULL);
            SendMessage(gloutputlabel , WM_SETFONT, (WPARAM)hFont, 1);
//--- made output frame

      
//+++ make the source object dropdown


      hwnd_static1 = CreateWindow("static","Objects:",WS_CHILD | WS_VISIBLE | SS_LEFT,10,50,200,18,hWnd,NULL,hInstance,NULL);
   
      SendMessage(hwnd_static1, WM_SETFONT, (WPARAM)hFont, 1);
      SetWindowText(hwnd_static1,"Source Object");
   
      hSourceCombo = CreateWindow("combobox", "", WS_BORDER  | WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST | WS_TABSTOP,110,45,160,100,hWnd,NULL,hInstance,NULL);

      SendMessage(hSourceCombo, WM_SETFONT, (WPARAM)hFont, 1);

      //SendMessage(hSourceCombo,CB_ADDSTRING,0,(long)"object1");
      //SendMessage(hSourceCombo,CB_ADDSTRING,0,(long)"object2");
      //SendMessage(hSourceCombo,CB_ADDSTRING,0,(long)"object3");
//--- made source object dropdown

 



// +++  create percent edit box etc...

      hEditPercent= CreateWindow("edit","0", WS_BORDER  | WS_TABSTOP | WS_CHILD | WS_VISIBLE | SS_RIGHT,10,90,35,20,hWnd,NULL,hInstance,NULL);
      hStatic2 = CreateWindow("static","% of points used:",WS_CHILD | WS_VISIBLE | SS_LEFT,47,92,120,18,hWnd,NULL,hInstance,NULL);

   
    SendMessage(hStatic2, WM_SETFONT, (WPARAM)hFont, 1);
      SendMessage(hEditPercent, WM_SETFONT, (WPARAM)hFont, 1);
// --- created percent edit box, etc...

      

      EnableOpenGL( hWnd, &hDC, &hRC );
      glViewport(350,300,220,220);

      // main program loop
      while ( !bQuit ) {


            if ( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ) {

                  // handle or dispatch messages
                  if ( msg.message == WM_QUIT ) {
                        bQuit = TRUE;
                  } else {
                        TranslateMessage( &msg );
                        DispatchMessage( &msg );
                  }

            } else {

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


                  SwapBuffers( hDC );
   
            } // else

      } // while peek_message


      return msg.lParam;

} // end of winmain
0
Comment
Question by:a1programmer
3 Comments
 
LVL 2

Accepted Solution

by:
davidnsc1 earned 2000 total points
ID: 12036368
I don't have a true answer, but, seeing that you haven't gotten a response yet, I might as well suggest a possible cause.  It's possible that the double-buffering is causing problems with the window, since you're swapping the buffer of the whole hDC and Windows doesn't draw to back buffers.

Wish I could be more help!
0
 
LVL 7

Author Comment

by:a1programmer
ID: 12044471
Thanks...   I actually found a way to do it.  I created a child window inside the window, and used it to draw on. ;)

I did try not doing the double buffering, and using a PFD_SUPPORT_GDI (or whatever) , but this is better.

__
A1
0
 
LVL 1

Expert Comment

by:E-Duck
ID: 12271872
the child-frame is one way, but you could get some problems, when you try to draw i.e. an background to the whole window. In this case it would be more easy to lay viewport and Ortho to the whole screen an enable the glScissorBox to your drawing-area. Thus your controlls will not be overwritten...
0

Featured Post

Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Artificial Intelligence comes in many forms, and for game developers, Path-Finding is an important ability for making an NPC (Non-Playable Character) maneuver through terrain.  A* is a particularly easy way to approach it.  I’ll start with the algor…
Performance in games development is paramount: every microsecond counts to be able to do everything in less than 33ms (aiming at 16ms). C# foreach statement is one of the worst performance killers, and here I explain why.
this video summaries big data hadoop online training demo (http://onlineitguru.com/big-data-hadoop-online-training-placement.html) , and covers basics in big data hadoop .
Whether it be Exchange Server Crash Issues, Dirty Shutdown Errors or Failed to mount error, Stellar Phoenix Mailbox Exchange Recovery has always got your back. With the help of its easy to understand user interface and 3 simple steps recovery proced…

571 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question