Solved

Create viewport on window with other win32 controls...

Posted on 2004-08-27
3
1,144 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 500 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

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

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

Question has a verified solution.

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

As game developers, we quickly learn that Artificial Intelligence (AI) doesn’t need to be so tough.  To reference Space Ghost: “Moltar, I have a giant brain that is able to reduce any complex machine into a simple yes or no answer. (http://www.youtu…
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…
In this brief tutorial Pawel from AdRem Software explains how you can quickly find out which services are running on your network, or what are the IP addresses of servers responsible for each service. Software used is freeware NetCrunch Tools (https…
This is my first video review of Microsoft Bookings, I will be doing a part two with a bit more information, but wanted to get this out to you folks.

690 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