Winapi prog stürzt beim klicken auf nen Button ab.



  • Noch ne frage: wie komme ich an den rgb farbwert des aktuell verwendeeten hintergrundbrushes? ich hab nämlich das problem, dass der schrifthintergrund weiß ist( wo kann man den ändern? auch in der CRTCOLOREDIT?), der fensterhintergrund aber nicht.( benutzt die standart Hintergrundfarbe.) Und da die bei jedem User anders sein kann, hab ich keine ahnung, wie ich an den poassenden rgb wert komme. in der msdn hab ich auch schon geschaut, aber nix gefunden...



  • Wenn ich das richtig verstanden habe, möchtest du herausfinden, welche Farbe das System für ein Control standardmäßig verwendet.
    Siehe GetSysColor
    und GetSysColorBrush
    Das Setzen der Texthintergrundfarbe hatte ich bereits schon erwähnt



  • bevor ich meinen code vermurkse wollte ich mal fragen, wies den aussehen muss, im code. ich denke mal so:

    DWORD rgb;
    int iRed;
    int iGreen;
    int iBlue;
    
    rgb = DWORD WINAPI GetSysColor(5);
    iRed = GetRValue(rgb);
    iGreen = GetGValue(rgb);
    iBlue = GetBValue(rgb);
    

    Kann sein, dass der code totaler murks ist, aber ich arbeite noch nicht lange mit der winapi. das ganze muss dann in die WM_CREATE, oder?



  • Beim Arbeiten mit den 'Systemstandardfarben' geht das einfacher.
    Du brauchst hier kein HBRUSH in WM_CREATE zu erstellen. Damit auch das DestroyObject(hbrush) in WM_DESTROY.

    System color brushes are owned by the system and must not be destroyed.

    Ich würde bei GetSysColor auch kein Zahlenwert direkt einsetzen, sondern die entsprechende Definierung. so kannst du später besser nachvollziehen, um welche Farbe es sich handelt.

    case WM_CTLCOLORSTATIC: 
        if((HWND)lParam == hEdit1) 
        { 
            SetBkColor((HDC)wParam, GetSysColor(COLOR_WINDOW)); 
            return (LRESULT)GetSysColorBrush(COLOR_WINDOW); 
        } 
        return 0;
    


  • kann ich das so auch für das hauptfenster verwenden, oder muss ich da was ändern? es geht mir nämlich um den texthintergrund im hauptfenster.



  • Schau dir dazu mal in der MSDN das Kapitel Drawing Text an. Bei vielen Funktionen befindet sich auch ein Link mit einem Beispiel.
    Außerdem wäre noch die Funktion SetBkMode interessant.



  • THX, ich schaus mir an.

    ps, gibts sowas wie die msdn nicht auf deutsch? Ich kann zwar englisch, aber deutsche texte sind einfach besser verständlich.



  • Es gibt Teile der MSDN in deutscher Sprache.
    Allerdings ist fast alles, was wirklich hilfreich ist, in englisch gehalten.

    Das ist das Problem in dieser Branche. Wenn man kein Englisch kann bzw. nicht bereit ist, sich durch englische Texte durchzubeißen, kommt man nicht wirklich weit. 🙄



  • ich bekomms einfach nicht hin. 😡

    Ich habs mit SetBkMode versucht, mit FillRect( und darin GetSysColorHbrush) es geht einfach nicht.... ( code hat sich nicht verändert)



  • Bevor wir aneinander vorbeireden - mit Hauptfenster meinst du das Fenster, welches du mit CreateWindowEx(WS_EX_CLIENTEDGE, szClassName, "Vokabeltrainer 2.0", ... erstellst?
    Hier muss du auf die Message WM_PAINT reagieren.

    case WM_PAINT:
      HDC hdc;
      PAINTSTRUCT ps;
      hdc = BeginPaint(hwndDeinFenster, &ps);
      SetBkMode(hdc, TRANSPARENT);
      // Textausgabe via TextOut, DrawText, etc.
      EndPaint(hwndDeinFenster, &ps);
      return 0;
    

    Bei vielen Zeichenoperationen solltest du dir auch mal die Funktion CreateCompatibleDC ansehen.



  • THX, hat gefunst. ich konnte ja nicht ahnen, dass das nach Beginpaint eingefügt werden musste. ( war aus nem code in der msdn bei TextOut auch nicht ersichtlich...)

    Jetzt gehts ans innenleben.^^


Anmelden zum Antworten