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

06.04.2004, 22:29

Fensterprogrammierung

Hallo,

ich beschäftige mich grade mit der Fensterprogrammierung um einen kleinen überblick zu bekommen. In diesem Programm verstehe ich zwei Punkte nicht:

a) DefWindowProc(hWnd, uiMessage,wParam, lParam);
wo ist die Funktion deklariert und was macht sie genau

b)LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
Wieso stehen dort zwei Rückgabetypen --> LRESULT CALLBACK


könnte mir jemand eine antwort auf diese fragen geben???

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
#include <windows.h>

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);

int APIENTRY WinMain(HINSTANCE hInstance,
                            HINSTANCE hPrevInstance,
                     LPSTR lpCmdLine,
                     int nCmdShow)
{
    WNDCLASS WndClass;
   WndClass.style = 0;
   WndClass.cbClsExtra = 0;
   WndClass.cbWndExtra = 0;
   WndClass.lpfnWndProc = WndProc;
   WndClass.hInstance = hInstance;
   WndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
   WndClass.hCursor = 0;
   WndClass.hIcon = 0;
   WndClass.lpszMenuName = 0,
   WndClass.lpszClassName = "WinProg";

   RegisterClass(&WndClass);

   HWND hWindow;
   hWindow = CreateWindow("WinProg","Fenster",
                                WS_OVERLAPPEDWINDOW,
                           0,0,400,400,NULL,NULL,
                           hInstance,NULL);

   ShowWindow(hWindow, nCmdShow);

   UpdateWindow(hWindow);

   MSG Message;
   while(GetMessage(&Message,NULL,0,0))
   {
        DispatchMessage(&Message);
   }

   return(Message.wParam);
}


LRESULT CALLBACK WndProc  (HWND hWnd, UINT uiMessage,
                                    WPARAM wParam, LPARAM lParam)
{
    switch(uiMessage)
   {
    case WM_DESTROY:
        PostQuitMessage(0);
         return (0);
      default:
        return DefWindowProc(hWnd, uiMessage,
                                    wParam, lParam);
   }
}



in großer hoffnung

der dude

Bitte benutze den Code-Tag. Dann ist es einfacher diesen zu lesen.

Anonymous

unregistriert

2

06.04.2004, 22:34

Leider habe ich noch zwei fragen vergessen:

c) UpdateWindow(hWindow);
wenn ich diese funktion aus meinem programm entferne ändert sich nichts, wieso??

d) WS_OVERLAPPEDWINDOW diese wert wird übergeben. welche bedeutung hat er und welche wichtigen gibt es sonst noch??
ich glaube david hatte einen mit visible


bitte entschuldigt meine kurze fragestellung - soll nicht unhöflich gemeint sein

in hoffnung

der dudd ;-)

NoName

Treue Seele

Beiträge: 118

Beruf: Student

  • Private Nachricht senden

3

06.04.2004, 22:53

zu a) DefWindowProc ist die Standard-Fenster-Nachrichtenverarbeitungsfunktion, an die du deine Nachricht in deiner Nachrichtenverarbeitungsfunktion weiterleiten kannst.

Sie ist bestimmt in irgendwelchen Windows-Headern deklariert. Einfach suchen. :) .

zu b) Es ist nur ein Rückgabetyp vorhanden: CALLBACK ist eine Aufrufkonvention zur Kennzeichnung von "Callback"-Funktionen, wie der Name schon sagt. :)

zu d) Wenn du WS_OVERLAPPEDWINDOW als Flag übergibst, heißt das, dass du ein Fenster mit Systemmenü, Min-, Maximier- und Schließ-Button (oben rechts) erhältst und noch einiges mehr. Das kannst du aber alles in der MSDN unter CreateWindowEx nachlesen.

Anonymous

unregistriert

4

06.04.2004, 23:13

Vielen, vielen dank für die schnelle antwort.
leider habe ich noch ein paar rückfrage:

frage d) habe ich sofort verstanden und auch ausprobiert - was mich gewundert hat, meine vermutung hat gestimmt :-)

zu frage a) du sagt es ist eine standard-fenster-nachrichtenverarbeitungsfunktion
verarbeitet diese funktion zum beispiel ein fenster vergrößern minimieren usw.????

aso kommt ein WM_DESTROY immer dann vor, wenn ich auf das X oder auf fenster schließen klicke?????


zu frage b) was meinst du mit aufrufkonvention????

ich würde mich sehr über eine antwort freuen

der dude;-)

5

06.04.2004, 23:56

Die Aufrufconvention bestimmt wie genau eine Funktion aufgerufen werden soll. Also z.B. in welcher Reihenfolge die Parameter auf den Stack kommen.

Die Std-Nachrichten-Funktion verarbeitet alle Nachrichten. Also auch diese für Min. und Maximierung.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

6

06.04.2004, 23:56

Hi,

wie immer hab ich zu jedem Mist einen Link ;D

http://www.win-api.de/ << Hier lernst Du genug über WinAPI (für den Anfang)

ansonsten empfehle ich Dir das Buch:
Windows-Programmierung 5. Auflage - Das Entwicklerhandbuch zur Win32-API von Charles Petzold

ISBN: 3-86063-487-9
Verlag: Microsoft Press

Dieses Buch ist sozusagen die Bibel der Win32-API ;) Man muss die einfach haben ;)

Werbeanzeige