WinApi Komponenten und weiteres
-
Hallo ich hab mehrere Fragern auf einaml zu stellen:
1.Was genau ist eine static variable?? Weshalb benutzt man sie und wozu ist sie gut??? ausser einen Wert bei verschiedenen Nachrichten Funktionen der WndProc zu erhalten.
2.Was genau sind und tun LOWORD und HIWORD??? Ich weiss bloss dass man sie benutz um lParam zu "entschlüsseln".
3.Windows arbeitet ja mit ungültigen rechtecken. BeginPaint zeichnet diese ja neu,aber wie kommt man an ein ungültiges rechteck??? als parameter für die funct. wird ja ein PAINTSTRUCT Variable angegeben, in der eine RECT Variable zu finden ist. Heisst das, windows findet diese ungültigen Rechtecke allein??? D.h.,wenn man ein fenster hat und etwas eingeben kann, dann muss das Fenster ja neu gezeichent werden, anstelle dann jedoch das gesamte fenster neu zu zeichnen, berechnet win dann ganz einfach ein Rechteck, in der grösse des veränderten bereichs das dann neu gezeichnet wird oder wie=??
MFG und THX!!!

-
static Variablen haben einen anderen Gültigkeitsbereich als normale (auto) Variablen. Eine static Variable in einer Funktion hört nicht zu existieren auf, wenn die Funktion beendet wird, sondern bleibt im Speicher bestehen.
LOWORD und HIWORD tuen genau das wonach es sich auch anhört, sie geben jeweils das LOW bzw. HI(GH) Word einer Variablen aus. Wenn du eine 32 Bit breite Variable hast, kannst du in dieser Variablen ja auch 2 16 Bit Werte oder 4 1 Byte werte speichern. So kannst du mehrere Informationen in eine Variable zwängen und dazu sine diese Makros dar.
-
Dann müsste es ja no mehr dieser makros geben oder wie?? also wie LOWORD und HIWORD..
oder??
-
WinDef.h
#define MAKEWORD(a, b) ((WORD)(((BYTE)((DWORD_PTR)(a) & 0xff)) | ((WORD)((BYTE)((DWORD_PTR)(b) & 0xff))) << 8)) #define MAKELONG(a, b) ((LONG)(((WORD)((DWORD_PTR)(a) & 0xffff)) | ((DWORD)((WORD)((DWORD_PTR)(b) & 0xffff))) << 16)) #define LOWORD(l) ((WORD)((DWORD_PTR)(l) & 0xffff)) #define HIWORD(l) ((WORD)((DWORD_PTR)(l) >> 16)) #define LOBYTE(w) ((BYTE)((DWORD_PTR)(w) & 0xff)) #define HIBYTE(w) ((BYTE)((DWORD_PTR)(w) >> 8))
-
Ok thx leute jetz hab ich fast komplett geschnallt, bleibt nur noch die letzte frage...

Mfg und THX
-
JossBoss schrieb:
3.Windows arbeitet ja mit ungültigen rechtecken. BeginPaint zeichnet diese ja neu,aber wie kommt man an ein ungültiges rechteck??? als parameter für die funct. wird ja ein PAINTSTRUCT Variable angegeben, in der eine RECT Variable zu finden ist. Heisst das, windows findet diese ungültigen Rechtecke allein??? D.h.,wenn man ein fenster hat und etwas eingeben kann, dann muss das Fenster ja neu gezeichent werden, anstelle dann jedoch das gesamte fenster neu zu zeichnen, berechnet win dann ganz einfach ein Rechteck, in der grösse des veränderten bereichs das dann neu gezeichnet wird oder wie=??
ähm, ja

Windows erkennt die ungültigen Bereiche selbstständig, wenn zum Beispiel ein Fenster das andere überdeckt hat und fordert dann mittels WM_PAINT das Neuzeichnen dieses Bereichs an, der dann im PAINTSTRUCT übergeben wird. Und zusätzlich zur automatischen Berechnung kann man mit InvalidateRect und ValidateRect Einfluss darauf nehmen, ob ein Bereich als gültig oder ungültig markiert ist.
-
Ok thx leute
