Zitat Zitat
btw.: Ich finde es eleganter wenn du für das Child Window eine eigene Callback Funktion deklarierst, das erspart dir dann die Abfragen der Mauskoordinaten.
Ich bin in der WinAPI leider noch nicht so erfahren und hab bisher nur simple Fenster aufgebaut. Wie würde denn ein programm mit 2 Callbacks aussehen? Bisher werden alle Messages aller Fenster im gleichen Callback aufgefangen und verarbeitet. Wenn ich eine weitere WndProc erstellen will für das Childwindow, müsste ich dann für das Childwindow eine neue Fensterklasse registieren mit diesem Zeug hier wieder: ?
Code:
    MSG msg;
    WNDCLASS wndclass;

    wndclass.style = NULL;
    wndclass.lpfnWndProc = WndProc;
    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = 0;
    wndclass.hInstance = hInstance;
    wndclass.hIcon = LoadIcon(NULL, IDI_WINLOGO);
    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    wndclass.hbrBackground = (HBRUSH) COLOR_MENU + 3;
    wndclass.lpszMenuName = NULL;
    wndclass.lpszClassName = AppName;
    
    if (RegisterClass(&wndclass) == false)
    {
        MessageBox(NULL, "Es ist ein Fehler aufgetreten. ", "Error! ", MB_ICONERROR);
        return 0;
    }
So hab ich ja die WndProc-Funktion dieser Fensterklasse zugewiesen. (Wenn ich das alles so recht verstanden habe. )

Eigentlich soll die Malen-operation ja auch nur auf dem Childwindow geschehen, sodass nur Mausklicks auf dem Childwindow registriert werden, bisher empfange ich allerdings alle Mausklicks und prüfe auf die Koordinaten und lasse dann gegebenenfalls das Bitmap zeichnen.

Noch eine kleine andere Frage - wie kann man innerhalb der WndProc erfahren welches Fenster (in meinem Falle Childwindow (hwnd_maparea) oder Parentwindow (hwnd)) diese aktuelle Message gesendet hat?


Nochmal betreffend dem alten Problem, es war tatsächlich so dass ich bei jeder Message das Bitmap neu eingeladen habe und dies bei einer Menge von ein paar hundert oder tausend Messages irgendwann diesen Fehler hervorgerufen hatte. Danke für diese Erkenntniss, ich hab die Einladefunktion jetzt in die WM_CREATE Message gepackt sodass es in jedem Fall nur einmalig eingeladen wird.