InvalidateRect aus WINAPI läßt sich nicht ansprechen



  • Hallo,
    ich versuche die Funktion InvalidateRect aus WINAPI zu benutzen.

    TRect myRect;
    HWND hwnd;
      myRect = BelegeRect(); //belegt myRect mit Top, Bottom, Left, Right
      InvalidateRect(hwnd, &myRect, false);
    

    Selbst, wenn ich Windows.h, Winuser.h include will er diese Funktion nicht annehmen.
    Stattdessen meldet er:

    [BCC32 Fehler] Unit1.cpp(2746): E2247 Zugriff auf '_fastcall TCustomGrid::InvalidateRect(const TGridRect &)' nicht möglich

    Kann mir einer einen Tipp geben, wie ich hier weiterkomme?



  • Versuch es mal mit ::InvalidateRect().



  • Hallo @_matze
    Volltreffer, der Compiler frißt das jetzt. Danke. 🕶

    Habe bei "Richard Kaiser C++ mit dem Borland C++ Builder" nachgeschaut.

    Mit einem Ausdruck, der mit "::" beginnt, kann man einem global deklarierten Namen ansprechen, der durch eine lokale Deklaration verdeckt ist."

    Bedeutet das, dass alle WINAPI Funktionen global deklariert sind und nur mit "::" ansprechbar sind?



  • Nein, normalerweise kannst du die WinAPI-Funktionen ganz normal aufrufen, es sein denn, es gibt im lokalen Namespace eine Funktion gleichen Namens. Dann wird diese vorgezogen, und du musst halt "::" voranstellen, um die Funktion des globalen Namespaces zu verwenden. In deinem Fall hat die Klasse TCustomGrid offenbar eine Methode InvalidateRect. Probier es ruhig mit anderen WinAPI-Funktionen aus, bei denen es keine Überschneidungen gibt => Funktioniert auch ohne "::".



  • Hallo @_matze,
    Deine Erklärung klingt logisch. Ich hab's auch mal mit einer anderen WINAPI-Funktion getestet. Es bestätigt, was Du sagst. In der Regel lassen sich die WINAPI-Funktionen auch ohne "::" ansprechen.
    Danke.


Anmelden zum Antworten