Seite 1 von 2

C++ - Lustiges Hyper Window

Verfasst: 25.07.2005 12:49
von AndyX
Seht euch mal das an :mrgreen:

Code: Alles auswählen

#include <windows.h>
#define WIN32_LEAN_AND_MEAN 

// Nachrichten verarbeiten
LRESULT WINAPI MsgProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
    switch( msg )
    {
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
        case WM_PAINT:
            return 0;
    }
    return DefWindowProc(hWnd,msg,wParam,lParam);
}

// WinMain()
INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, INT)
{
    //Fensterklasse erstellen und registrieren
    WNDCLASSEX wc = {sizeof(WNDCLASSEX),CS_CLASSDC,MsgProc,0L,0L,GetModuleHandle(0),0,0,0,0,"WinAPI",0};
    RegisterClassEx( &wc );

    //Fenster erstellen
    HWND hWnd = CreateWindow("WinAPI","Hyper Window",WS_OVERLAPPEDWINDOW,100,100,300,300,GetDesktopWindow(),0,wc.hInstance,0);


    ShowWindow(hWnd, SW_SHOWDEFAULT);
    UpdateWindow(hWnd);

    MSG msg; 
    while(GetMessage(&msg,0,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

	//Weg damit :D
    UnregisterClass( "WinAPI", wc.hInstance );
    return 0;
}

Wenn ihrs langsam nach runter in Schlangenlinien bewegt, siehts drinnen so aus wie ein Tunnel :lol:

PS: Das soll ein WinAPI Test sein...

Verfasst: 27.07.2005 07:57
von Rubiko
bei mir willer nicht... es öffnet sich eine dos-console und ein fenster... kanns nurnoch schließen... :|

Verfasst: 27.07.2005 08:13
von DarkDragon
Rubiko hat geschrieben:bei mir willer nicht... es öffnet sich eine dos-console und ein fenster... kanns nurnoch schließen... :|
Bei mir gehts, versuch die DOS-Konsolen option irgendwo in den Linkereigenschaften abzustellen. Bei mir ist es z.B.

"Werkzeuge">"Compiler Optionen">"Einstellungen">"Linker">"Kein Konsolenfenster erzeugen">"Yes"

Ich nutze die Dev-C++ IDE.

Verfasst: 27.07.2005 16:47
von Ynnus
Das liegt daran, dass du keinen Background für das Fenster definiert hast. Daher dieser Effekt, dass man durch das Fenster hindurch sehen kann.

Der Übersichthalber solltest du dir hier angewöhnen, solche vielparametrigen Dinge wie CreateWindow oder WNDCLASS in mehrere Zeilen zu schreiben:

Code: Alles auswählen

    WNDCLASSEX wc = {sizeof(WNDCLASSEX),
                    CS_CLASSDC,
                    MsgProc,
                    0L,
                    0L,
                    GetModuleHandle(0),
                    0,0,0,0,
                    "WinAPI",
                    0};
Ist dann leichter zu erkennen, braucht zwar mehr Platz, aber was spielt schon Platz für eine Rolle wenn's um die Übersicht geht?

Verfasst: 27.07.2005 17:43
von DarkDragon
Sunny hat geschrieben:Das liegt daran, dass du keinen Background für das Fenster definiert hast. Daher dieser Effekt, dass man durch das Fenster hindurch sehen kann.

Der Übersichthalber solltest du dir hier angewöhnen, solche vielparametrigen Dinge wie CreateWindow oder WNDCLASS in mehrere Zeilen zu schreiben:

Code: Alles auswählen

    WNDCLASSEX wc = {sizeof(WNDCLASSEX),
                    CS_CLASSDC,
                    MsgProc,
                    0L,
                    0L,
                    GetModuleHandle(0),
                    0,0,0,0,
                    "WinAPI",
                    0};
Ist dann leichter zu erkennen, braucht zwar mehr Platz, aber was spielt schon Platz für eine Rolle wenn's um die Übersicht geht?
Das Fenster wird aber erstellt. Bei Rubiko tut sich nichts anscheinend.

Verfasst: 27.07.2005 18:23
von Ynnus
DarkDragon hat geschrieben:
Sunny hat geschrieben:Das liegt daran, dass du keinen Background für das Fenster definiert hast. Daher dieser Effekt, dass man durch das Fenster hindurch sehen kann.

Der Übersichthalber solltest du dir hier angewöhnen, solche vielparametrigen Dinge wie CreateWindow oder WNDCLASS in mehrere Zeilen zu schreiben:

Code: Alles auswählen

    WNDCLASSEX wc = {sizeof(WNDCLASSEX),
                    CS_CLASSDC,
                    MsgProc,
                    0L,
                    0L,
                    GetModuleHandle(0),
                    0,0,0,0,
                    "WinAPI",
                    0};
Ist dann leichter zu erkennen, braucht zwar mehr Platz, aber was spielt schon Platz für eine Rolle wenn's um die Übersicht geht?
Das Fenster wird aber erstellt. Bei Rubiko tut sich nichts anscheinend.
Er schrieb doch, dass sich ein Fenster und die Console öffnet. So soll es doch auch sein. :freak:

Aber das eine hat doch mit meinem Beitrag nichts zu tun. Das war lediglich eine Hilfe für mehr Übersicht im Code, dass man es besser lesen kann. Es ist in der WinAPI durchaus üblich, die Codes mehrzeilig zu schreiben, gerade weil manche dort > 10 Parameter erfordern.
Mein Beitrag oben richtete sich an den Threadersteller mit der Sache, dass das Fenster schliert, weil kein Background definiert ist.

Verfasst: 27.07.2005 19:21
von DarkDragon
Ups, stimmt, liegt vielleicht an der Fußpflege(bin fast in Ohnmacht gefallen), an den Bauch sowie Kopfschmerzen und an der Hitze, dass ich das "ein" als "kein" gesehen hab. Sorry vielmals.

Verfasst: 27.07.2005 19:40
von AndyX
@Sunny: Das ist bei nem Versuch rausgekommen. Ich hab aus Versehen die Zeile mit ValidateRect() gelöscht und dann wars so :lol:

Verfasst: 27.07.2005 19:59
von Ynnus
AndyX hat geschrieben:@Sunny: Das ist bei nem Versuch rausgekommen. Ich hab aus Versehen die Zeile mit ValidateRect() gelöscht und dann wars so :lol:
Wo genau war denn die Zeile ValidateRect? Denn die würde ja nur bedeuten, dass der Hintergrund des Fensters mit dem dem Dektop zusammengeschustert werden würde, nicht, dass das Fenster einen Hintergrund hat. Der Effekt wäre immer noch unberechnebar mal flackernd und mal verwaschen.

Verfasst: 27.07.2005 20:00
von DarkDragon
Sunny hat geschrieben:
AndyX hat geschrieben:@Sunny: Das ist bei nem Versuch rausgekommen. Ich hab aus Versehen die Zeile mit ValidateRect() gelöscht und dann wars so :lol:
Wo genau war denn die Zeile ValidateRect? Denn die würde ja nur bedeuten, dass der Hintergrund des Fensters mit dem dem Dektop zusammengeschustert werden würde, nicht, dass das Fenster einen Hintergrund hat. Der Effekt wäre immer noch unberechnebar mal flackernd und mal verwaschen.
Ich glaub er meint InvalidateRect ;) .