• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1163
  • Last Modified:

Create viewport on window with other win32 controls...

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
a1programmer
Asked:
a1programmer
1 Solution
 
davidnsc1Commented:
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
 
a1programmerAuthor Commented:
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
 
E-DuckCommented:
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
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now