c ++ - (Win API) Jeg kan ikke ændre titellinje (ikke-klient område) farve med WM\_NCPAINT

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøgte at indstille baggrundsfarve i WM\_NCPAINT for at ændre farven på titellinjen, men det vil ikke ændre på nogen måde. Spørgsmålet er, er SetBkColor og SetTextColor gyldig for WM\_NCPAINT?


case WM\_NCPAINT:
        {
            HDC hdc = ::GetWindowDC(hwnd);

            ::SetTextColor(hdc,RGB(0,0,0));
            ::SetBkColor(hdc,RGB(255,255,255));
            ReleaseDC(hwnd,hdc);
            return 0;
        }

Bedste reference


Disse funktioner er gyldige, men du har ikke taget noget. Prøv FillRect eller noget lignende. [4]

Andre referencer 1


Det første du bør være opmærksom på er, at disse funktioner kan fejle. Du bør altid kontrollere returværdierne, hvis du kun logger på, at de fejler.


For det andet troede jeg, at disse farver kun ville påvirke fremtidige TextOut opfordringer til den givne sammenhæng. Det er muligt, at titellinjen ikke bruger disse opkald.


På et minimum skal du sandsynligvis forsøge at gøre noget, der vil få det til at ske, som at ændre titellinjen.





Ikke at dette er meningen at stoppe dig, og jeg har måske ikke alle fakta, men jeg finder personligt programmer, der ignorerer mine ønsker at være ret irriterende. Hvis jeg som bruger ønskede mine programmer at have forskellige farvede titellinjer, ville jeg sætte dem op på den måde selv, mange tak :-)





Og endnu en anden til side, hvis du fanger WM\_NCPAINT-beskeden, skal du enten selv selv (ikke tilrådeligt) eller ringe til baseversionen først og derefter påvirke dine ændringer på toppen af ​​det ( og for at være ærlig, er det heller ikke tilrådeligt på grund af de store variationer af layouter).