Katzenbauer
Erfahrenes Mitglied
Ich habe mir nun eine kleine Vorlage gebastelt die als Windows-Grundgerüst für spätere Programme dienen soll. Wenn ich aber nun mit der Maus über das Fenster fahre bekomme ich immer eine Sanduhr angezeigt und auch im Windows Taskmanager steht 100% Prozessorauslastung. Ich denke ich habe da irgendetwas mit der Nachrichtenschleide falsch gemacht. Könnt ihr euch diesen wahrscheinlich Standardcode mal anschauen (verwende VS 2005):
C++:
/******************************************************
// <Name der Anwendung>
// winmain.h
// Hier befindet sich der Einstiegspunkt der Anwendung
******************************************************/
#include <windows.h>
// Variablen festlegen
#define APP_NAME "VORLAGE" // Name der Anwendung/Spiel
#define WINDOW_WIDTH 400 // Breite des Fenster
#define WINDOW_HEIGHT 300 // Höhe des Fensters
// Prototyp der Callback Funktion
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
// Einstiegspunkt der Anwendung
//
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpcmdline, int ncmdshow)
{
WNDCLASSEX windowclass; // Struktur für Fenstereigenschaften
HWND hWnd; // Fenster-Handle
MSG message; // Nachricht
// Die Strukur, die das Fenster beschreibt füllen
windowclass.cbSize = sizeof(WNDCLASSEX);
windowclass.style = CS_HREDRAW | CS_VREDRAW;
windowclass.lpfnWndProc = WindowProc;
windowclass.cbClsExtra = 0;
windowclass.cbWndExtra = 0;
windowclass.hInstance = hInst;
windowclass.hIcon = NULL;
windowclass.hIconSm = NULL;
windowclass.hCursor = NULL;
windowclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
windowclass.lpszMenuName = NULL;
windowclass.lpszClassName = APP_NAME;
// Nun die Struktur bei Windows Registrieren
if (!RegisterClassEx(&windowclass)) return -1;
// Positionsdaten für das Fenster berechnen um es mittig zu platzieren
const int PosX = GetSystemMetrics(SM_CXSCREEN) / 2 - WINDOW_WIDTH / 2;
const int PosY = GetSystemMetrics(SM_CYSCREEN) / 2 - WINDOW_HEIGHT / 2;
// Nach der Registrierung kann das Fenster erzeugt werden -> handle speichern
hWnd = CreateWindowEx(NULL,
APP_NAME,
APP_NAME,
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
PosX, PosY,
WINDOW_WIDTH, WINDOW_HEIGHT,
NULL,
NULL,
hInst,
NULL);
// Prüfen ob alles glatt ging
if (hWnd == NULL) return -1;
// Die Nachrichtenschlange
ZeroMemory(&message, sizeof(MSG)); // Nachricht Initialisieren
while (message.message != WM_QUIT)
{
// Nachrichten Verarbeiten
while (PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&message);
DispatchMessage(&message);
}
// Hier ist Platz für Move() und Render() Funktionen
}
// Programm erfolgreich beenden
return (int)message.wParam;
} // WinMain()
// Callback-Funktion zur Nachrichtenverarbeitung
//
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
// Message Auswerten
switch (message)
{
// Fenster schließen (Auch Alt-F4)
case WM_DESTROY:
{
// Nachricht zum Beenden schicken
PostQuitMessage(0);
return 0;
}
}
// Alles von unserer Anwendung nicht behandlete direkt an Windows schicken
return (DefWindowProc(hWnd, message, wParam, lParam));
} // WindowProc