Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

1

13.02.2004, 18:01

Problem beim Erstellen eines Fensters, bitte um Hilfe

Hallo,

ich habe ein Problem mit dem Erstellen eines Fensters. Ich benutze folgenden Code:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
HWND g_hWindow;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{

    WNDCLASSEX WindowClass = {sizeof(WNDCLASSEX), CS_CLASSDC, WindowProc2, 0,
                                0, GetModuleHandle(NULL), NULL, NULL, NULL,
                                NULL, "Direct3D window", NULL};
    
    WindowClass.hInstance = hInstance;

    if (!RegisterClassEx(&WindowClass))
        MessageBox(NULL, "Fehler beim Registrieren der Fenster Klasse", "Fehler", MB_ICONERROR);


    
    g_hWindow = CreateWindow("Direct3D window",
                            "Fenstername",
                            WS_VISIBLE | WS_OVERLAPPEDWINDOW,
                            100, 100,
                            200, 200,
                            NULL,
                            NULL,
                            GetModuleHandle(NULL),
                            NULL);
        
    if (g_hWindow == NULL)
        MessageBox(NULL, "Fehler beim Erstellen des Fensters", "Fehler", MB_ICONERROR);
        

    return 0;
}


Es klappt einfach nicht, das Fenster mit CreateWindow zu erstellen (die Messagebox erscheint, da g_hWindow NULL ist) - das Registrieren des Fensters klappt hingegen.

Woran könnte dies liegen?


Vielen Dank für Eure Hilfe


MfG, Timo

2

13.02.2004, 18:37

also bei mir funktioniert der Code ohne Probleme ???
Do, ut des!
Ceterum censeo, carthaginem delendam esse

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

13.02.2004, 20:44

Zeig mal Deine Funktion "WindowProc2".
Wenn Du da was falsch gemacht hast, würde das den Fehler erklären.

Anonymous

unregistriert

4

13.02.2004, 22:02

Hallo,

oh je, daran kann es liegen? Ehrlich gesagt, die Funktion existiert bei mir, ist aber z.Z. noch vollkommen leer *peinlich*

Was sind denn die mind. "Voraussetzungen" für den Inhalt der WinProc Funktion, damit ein Fenster erstellt werden kann?


Vielen Dank für Eure Hilfe

5

13.02.2004, 22:06

Na sie sollte doch min. die DefWindowProc Funktion aufrufen, damit die Standardnachrichten verarbeitet werden können, die man nicht selber verarbeiten will.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Anonymous

unregistriert

6

13.02.2004, 22:25

Nagut, dann lag das wirklich alles an meiner WinProc Funktion.

Vielen Dank für Eure schnellen Antworten!


MfG, Timo

Anonymous

unregistriert

7

14.02.2004, 01:25

Hallo,

das Fenster wird nun erstellt, leider habe ich ein sehr merkwürdiges Phänomen: Das Programm verbraucht beim Laufen 100% cpu Auslastung, und das Fenster ist nicht wirklich zu sehen - nur der "Umriss", es wird also nicht richtig gezeichnet, und in der Taskleiste ist es zu sehen.

Ich kann es auch nicht schliessen (Rechtsklicka auf das Prog in der Taskleiste geht nicht, sowie ALT F4 zeigt keine Wirkung).

Ich hoffe ihr könnt mir hier weiterhelfen, dies ist der aktuelle Stand meines Codes:


Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
Nochmals vielen Dank!
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{

    WNDCLASSEX WindowClass;

    WindowClass.cbSize = sizeof(WNDCLASSEX);
    WindowClass.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
    WindowClass.lpfnWndProc = WindowProc2;
    WindowClass.cbClsExtra = 0;
    WindowClass.cbWndExtra = 0;
    WindowClass.hInstance = hInstance;
    WindowClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    WindowClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    WindowClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
    WindowClass.lpszMenuName = NULL;
    WindowClass.lpszClassName = "WinClass01";
    WindowClass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);


    if (!RegisterClassEx(&WindowClass)) return -1;

    HWND g_hWindow;

    g_hWindow = CreateWindowEx( NULL,
        "WinClass01",
        "DirectX9",
        WS_VISIBLE,
        10,10,
        200,200,
        NULL,
        NULL,
        hInstance,
        NULL );


    if (g_hWindow == NULL)
        MessageBox(NULL, "Fehler bei CreateWindowEx", "Test", MB_ICONINFORMATION);

    //MessageBox(NULL, "Hello DirectX", "Test", MB_ICONINFORMATION);

    
    MSG WinMessage;
    ZeroMemory(&WinMessage, sizeof(WinMessage));

    while(WinMessage.message != WM_QUIT)
    {
        while(PeekMessage(&WinMessage, NULL, 0, 0, PM_REMOVE))
        {
            TranslateMessage(&WinMessage);
            DispatchMessage(&WinMessage);
        }
    }


    return 0;
}



//---------------------------------------------
// Windows Event Callback
LRESULT CALLBACK WindowProc2(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
    PAINTSTRUCT ps; // used in WM_PAINT
    HDC hdc; // handle to a device context
    
    switch(msg)
    {
        case WM_CREATE:     {
                                return(0);
                            }
                            break;
        
        case WM_PAINT:      {
                                hdc = BeginPaint(hwnd,&ps);
                                EndPaint(hwnd,&ps);
                                return(0);
                            }
                            break;
        
        case WM_DESTROY:    {
                                PostQuitMessage(0);
                                return(0);
                            }
                            break;
    
        default:            break;
    }

}

8

14.02.2004, 03:19

Das dein Fenster nur einen Rahmen hat liegt daran das du vergessen hast, dem Fenster einen Style zu verpassen ;D Du hast in der CreateWindow Funktion nur WS_VISIBLE stehen. Pack noch WS_OVERLAPPEDWINDOW dazu ;)

Das deine Anwendung 100% der CPU last verpraucht liegt einfach daran das du PeekMessage verwendest statt GetMessage. Der Unterschied liegt daran das PeekMessage nicht die Kontrolle an das BS zurück gibt und wartet bis eine neue Nachricht vorliegt. All das macht GetMessage.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Anonymous

unregistriert

9

15.02.2004, 00:00

Hallo,

die GetMessage Schleife funkioniert, mein Programm braucht nun nicht mehr so viel CPU Last.

Allerdings besteht das Problem immer noch, dass das Fenster nicht wirklich zu sehen ist. Wenn ich mein Programm starte, kommt kein Fehler, das Fenster wird nicht angezeit, aber in dem Bereich in dem das Fenster wäre, zeichnet Windows die Oberfläche nicht neu, d.h. das was zum Startzeitpunkt des Programmes im Hintergrund zu sehen war, bleibt dort. Der Fensterbereich wird also nicht gezeichnet.

Ich kann das Fenster auch immer noch nicht schliessen, oder mit der rechten Maustaste das Kontextmenü des Programmes in der Taskleiste aufrufen.

Was läuft hier nur falsch?

Ich dank' Euch für Eure geduldige Hilfe :-)


MfG, Timo

Maxi

Treue Seele

Beiträge: 136

Wohnort: Müncheberg

Beruf: Ich muss noch in die Schule

  • Private Nachricht senden

10

15.02.2004, 09:32

du hast vergessen ShowWindow() und UpdateWindow aufzurufen:

Quellcode

1
2
ShowWindow(g_hWnd, SW_SHOW);
UpdateWindow(g_hwdn);
Gruß, Maxi

Hier, die Homepage von meiner Band:
www.maxis-house.de

Könnt euch unsere ersten Songs saugen...

Werbeanzeige