Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

Create viewport on window with other win32 controls...

Posted on 2004-08-27
3
Medium Priority
?
1,155 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
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

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Question has a verified solution.

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

Recently, in one of the tech-blogs I usually read, I saw a post about the best-selling video games through history. The first place in the list is for the classic, extremely addictive Tetris. Well, a long time ago, in a galaxy far far away, I was…
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.
We’ve all felt that sense of false security before—locking down external access to a database or component and feeling like we’ve done all we need to do to secure company data. But that feeling is fleeting. Attacks these days can happen in many w…
This lesson discusses how to use a Mainform + Subforms in Microsoft Access to find and enter data for payments on orders. The sample data comes from a custom shop that builds and sells movable storage structures that are delivered to your property. …
Suggested Courses

636 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