Message Queque bearbeiten verpflichtend?
Verfasst: 13.07.2024, 16:51
Schönen Nachmittag liebe Herren und Damen :-)
Ich stehe hier vor einer Frage, auf die ich irgendwie keine (zufriedenstellende) Antwort finde.
Ich registriere (in Windows) meine Fensterklasse und erstelle daraufhin ein schönes Fensterchen.
Nun bin ich ja (nach allem was ich lese) durch die WinAPI verpflichtet, die Message Queque auch wirklich zu bearbeiten und bei "Nicht-Interesse" einer Nachricht, diese zumindest an die DefWindowProc weiterzureichen.
(Bereits nach RegisterClass oder erst nach CreateWindow - ich weiss es leider nicht!)
Eigentlich wollte ich ja jetzt die ganzen Prozess-Schritte für die Erstellung und Initialisierung eines Fensters in separate Init-Funktionen auslagern. Ganz so, wie es die "Grossen" ja bekanntlich auch machen.
Vor meinem inneren Auge müsste das Ganze dann irgendwie so (oder so ähnlich) daherkommen:
Nun kann ich natürlich auch noch das Bearbeiten der Messages kapseln
Das Problem ist nun aber, dass man jetzt auch weiterhin die entsprechende Funktion regelmässig aufrufen muss, um die Message Queque zu leeren. Das verlangt ja die WinAPI weiterhin! Eine allfällige Kapselung der Nachrichtenschlaufe ist ihr ja völlig Schnurz.
Mein Punkt:
Bei einer Library wie (z. B.) der SDL war das aber irgendwie freiwillig.
Das führt mich dann weiter zur Frage, wie es denn die "Grossen" hinbekommen, den Usern hier freie Hand zu lassen.
Ein Erklärungsversuch: Die SDL erstellt dafür ein separater Thread, der sich im Hintergrund immer um genau diese Sache kümmert.
Das würde dann aber wiederum bedeutet, dass all die Programme zwangsläufig multithreading wären - was ich mir nicht vorstellen kann.
Ich stehe hier vor einer Frage, auf die ich irgendwie keine (zufriedenstellende) Antwort finde.
Ich registriere (in Windows) meine Fensterklasse und erstelle daraufhin ein schönes Fensterchen.
Nun bin ich ja (nach allem was ich lese) durch die WinAPI verpflichtet, die Message Queque auch wirklich zu bearbeiten und bei "Nicht-Interesse" einer Nachricht, diese zumindest an die DefWindowProc weiterzureichen.
(Bereits nach RegisterClass oder erst nach CreateWindow - ich weiss es leider nicht!)
Eigentlich wollte ich ja jetzt die ganzen Prozess-Schritte für die Erstellung und Initialisierung eines Fensters in separate Init-Funktionen auslagern. Ganz so, wie es die "Grossen" ja bekanntlich auch machen.
Vor meinem inneren Auge müsste das Ganze dann irgendwie so (oder so ähnlich) daherkommen:
Code: Alles auswählen
int main(void)
{ /* Ich nehm tatsächlich weiterhin "main", */
handle_s * handle = init_Proc(); /* da mir mit "WinMain" clang partout kein zusätzliches */
screen_s * screen = init_Window(handle); /* Konsolenfenster mehr öffnen will (im Gegensatz zu gcc). */
/* Feinster Code */
free_Window(screen);
free_Proc(handle);
return 0;
}
Code: Alles auswählen
while(PeekMessageA(&msg, NULL, 0, 0, PM_REMOVE))
{
DispatchMessageA(&msg);
}
Mein Punkt:
Bei einer Library wie (z. B.) der SDL war das aber irgendwie freiwillig.
Das führt mich dann weiter zur Frage, wie es denn die "Grossen" hinbekommen, den Usern hier freie Hand zu lassen.
Ein Erklärungsversuch: Die SDL erstellt dafür ein separater Thread, der sich im Hintergrund immer um genau diese Sache kümmert.
Das würde dann aber wiederum bedeutet, dass all die Programme zwangsläufig multithreading wären - was ich mir nicht vorstellen kann.