transparentes Fenster ohne Titel?



  • Hi!

    Vorweg: Ich arbeite mit OpenGL.
    Hab mich grad mal so gefragt ob es möglich ist, ein Fenster zu erstellen, was halb-transparent ist ... also so ähnlich wie Winamp wenn man den so halbtransparent einstellt.

    Ich will nen Erinnerungs-Programm schreiben. Jedesmal wenn irgendwas ist, soll ein kleines Fenster (Ähnlich wie diese Sprechblasen von Windoof) aufploppen ... . Noch cooler wär es, wenn die keine Titelleiste hätten und, wie gesagt, halbtransparent wären.

    Geht das?

    Ich möchte aber mit OpenGL arbeiten ... das lass ich mir nicht nehmen 😉

    Danke!



  • Hat mit OpenGL nichts zu tun ( aber kannst am Ende in dem Fenster auch GL laufen lassen ). Nennt sich Windows Skinning. Siehe http://www.flipcode.org / http://www.google.com


  • Mod

    ein simpler weg wäre, wenn du beim erstellen des fensters, den screen auf dem es ist, grabbst bevor das fenster selbst etwas zeichnet, dann kannst du den, bevor du den buffer flipst, halb transparent über deine graphik zeichnen.

    nachteile sind z.b. dass du nicht auf animierte hintergründe rücksciht nimmst.

    vorteile sind z.b. dass es ab win95 schon laufen würde.

    rapso->greets();



  • @ rapso: das wär ne Idee *g*

    @Ahvolon: Nette Seite ... aber wo genau steht das? (Informatiker = blind ^^)

    Was mir an sich erstmal wichtiger wäre is das mit der Titelleiste ... is das möglich? Hab da schon mit Parametern rumhergespielt und die Maximieren- Schaltfläche weggehext und das Teil kleiner gemacht ... aber ich wills ganz weg haben. Schon klar dass man dann nix mehr verschieben kann (das Fenster), aber das lös ich anders. (Außerdem is es nich notwendig ...)

    (hab das mit

    dwExStyle=WS_EX_APPWINDOW;								// Window Extended Style
    		dwStyle=WS_POPUP;										// Windows Style
    

    gelöst)



  • wenn du dem fenster als eigenschaft popupwindow gibst, dann hats keinen titel



  • Transparente Fenster gibt es seit Windows ME bzw 2000.

    Hier mal ein Link dazu:
    http://www.codeproject.com/win32/quaker1.asp

    Wie sich das mit OpenGL verträg weiß ich nicht, aber ich glaube Winamp nutzt auch die Hardware und somit sind die Chancen gut.





  • Danke, das ist genau das, was ich brauche 🙂

    Ich versuch grad den Code auseinanderzunehmen, um ihn zu verstehen ... ich jetzt folgendes:

    #include <iostream>
    #include <stdlib.h>
    #include <windows.h>
    
    using namespace std;
    
    // app window handle
      HWND hWnd=NULL;
    
    bool MakeWindow(int iWidth, int iHeight)
    {
      // our window class
      WNDCLASS wndWc;
    
      // ---------------------------------------------------------
      // fill window class members
      // ---------------------------------------------------------
      wndWc.style = CS_OWNDC;
      //wndWc.lpfnWndProc = (WNDPROC) WndProc;                    // Für die Callback- Funktion, wichtig?
      wndWc.cbClsExtra = 0;
      wndWc.cbWndExtra = 0;
      wndWc.hInstance = GetModuleHandle(NULL);
      wndWc.hIcon = NULL;
      wndWc.hCursor = LoadCursor(0, IDC_ARROW);
      wndWc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
      wndWc.lpszMenuName = NULL;
      wndWc.lpszClassName = "w32skin";
    
      // register class
      if (!RegisterClass(&wndWc)) return false;
      // ---------------------------------------------------------
    
      // get actual screen resolution
      int iSw = (WORD)GetSystemMetrics(SM_CXSCREEN);       // width
      int iSh = (WORD)GetSystemMetrics(SM_CYSCREEN);       // height
    
      // make a rectangle on the center of the screen
      RECT rc = { (iSw - iWidth)/2, (iSh - iHeight)/2, iWidth, iHeight };
    
      // create the window. the spaces on the window title
      // are just to make sure this will be visible when the region
      // is active. just run the app and you'll understand. =)
      hWnd = CreateWindow("w32skin", "       w32skin",
                          WS_OVERLAPPEDWINDOW,
                          rc.left,rc.top, iWidth,iHeight,
                          NULL, NULL, GetModuleHandle(NULL), NULL);
    
      // return result
      return (hWnd?true:false);
    }
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, \
                       LPSTR lpCmdLine, int nCmdShow)
    {
      // -------------------------------------------------
      // create the application window.
      // -------------------------------------------------
    
      if ( !MakeWindow(320, 240) ) return -1;                         
    
      // show window
      ShowWindow(hWnd, SW_SHOW);
    
      // -------------------------------------------------
      // now just keep the application going...
      // -------------------------------------------------
    
      MSG mMsg;
    
      while (1)
      {
    
        if(PeekMessage(&mMsg, 0, 0, 0, PM_REMOVE))
        {
          // -------------------------------------------------
          // the quit message
          // can arrive at any time from our window procedure.
          // -------------------------------------------------
          if(mMsg.message == WM_QUIT)
          { break; }
    
          // -------------------------------------------------
          // the common stuff, just translate&dispatch.
          // -------------------------------------------------
          TranslateMessage(&mMsg);
          DispatchMessage(&mMsg);
        }
    
      }
    
      DestroyWindow(hWnd);
    
      return 0;
    }
    

    Hab also erstmal nur diese MakeWindow- Funktion am Wickel ... aber selbst dieser einfache Code gibt mir nen

    [Linker error] undefined reference to `GetStockObject@4'
    

    zurück ... woran liegt denn das?!



  • OK ... habs eben selber gefunden 🙂 .... jetzt schließt sich das Fenster allerdings wieder binnen sekunden ... wenn überhaupt ... ich versuch das mal zu blicken 🙂



  • SirNoname schrieb:

    //wndWc.lpfnWndProc = (WNDPROC) WndProc;                    // Für die Callback- Funktion, wichtig?
    

    Ja, die is' wichtig... 🙄

    Empfehlung: Ein WinAPI Tutorial durchnehmen! 💡



  • @ Ahvolon[F-Bytes] : Danke nochmal, hab jetzt denk ich alles verstanden und klappt wunderbar 🙂

    THX auch an alle anderen 😃



  • OK, wie gesagt, das mit den Regions klappt super. Aber wie krieg ich jetzt Transparenz hin? (Oder steht das auf der page, hab ich das übersehen?)


Anmelden zum Antworten