Ownerdraw-Button -> Bild nach klicken weg



  • Hi!

    Hier mein Code (pdis ist ein LPDRAWITEMSTRUCT)

    FillRect(pdis->hDC,&pdis->rcItem,(HBRUSH) COLOR_APPWORKSPACE);
    
    if(pdis->itemAction & ODA_SELECT)
    {
        if(pdis->itemState & ODS_SELECTED)
        {
            RECT rcSmall;
            rcSmall.left = pdis->rcItem.left + 2;
            rcSmall.right = pdis->rcItem.right - 2;
            rcSmall.top = pdis->rcItem.top + 2;
            rcSmall.bottom = pdis->rcItem.bottom - 2;
    
            FrameRect(pdis->hDC,&rcSmall,(HBRUSH) GetStockObject(BLACK_BRUSH));
        }
        else
        {
            FrameRect(pdis->hDC,&pdis->rcItem,(HBRUSH) GetStockObject(BLACK_BRUSH));
        }
    }
    else
    {
        FrameRect(pdis->hDC,&pdis->rcItem,(HBRUSH) GetStockObject(BLACK_BRUSH));
    }
    
    switch(pdis->CtlID)
    {
    
        case CONNECT_BTN:
        {
            BITMAP bmpConnect;
            GetObject(hConnectBmp,sizeof(BITMAP),&bmpConnect);
    
            HDC hMemDC = CreateCompatibleDC(pdis->hDC);
            SelectObject(hMemDC,hConnectBmp);
    
            BitBlt(pdis->hDC,1,1,38,38,hMemDC,0,0,SRCCOPY);
        } break;
    
    }
    

    Das Problem: Wenn ich das Programm starte, funktioniert alles bestens, also das Bitmap wird wunderbar gezeichnet. Wenn ich aber jetzt irgendwas mache, sei es den Button anklicke oder die Fenstergröße verändere, verschwindet das Bitmap. Woran liegt das?

    thx & cu



  • Ist "hConnectBmp" eine statische Variable? Ich kann nämlich nirgendwo sehen, dass die Variable initialisiert wird.
    Im übrigen habe ich keinen Plan, wozu du die Funktion GetObject() aufrufst, wenn du nachher die Variable "bmpConnect" nicht mehr verwendest.



  • Augen auf. Zwei Zeilen tiefer bei SelectObject braucht er sie.



  • Ja, hConnectBmp ist eine statische Variable und sie ist auch initialisiert, darauf hat mich der Compiler schon hingewiesen :D. Eigentlich brauch ich bmpConnect ja wirklich net, oder? Bei SelectObject verwende ich ja hConnectBmp, und nicht bmpConnect. Ich hab das einfach aus nem Tutorial abgeschrieben, ich lass die Zeilen mal weg, mal schauen was passiert :). Aber das hat ja eigentlich nix mit dem eigentlichen Problem zu tun, oder? Am Bitmap-Anzeigen ist ja nix falsch, es wird ja beim Programmstart gemacht, nur wenn ich was mache, verschwindet es.

    thx & cu



  • Augen auf! Dort benötigt er hConnectBmp und nicht bmpConnect.



  • @MagiC Creator
    Du mußt das Bimap auch wieder aus dem DC herausselektieren.



  • OOPs ;). Was so ein kleines DeleteDC anstellen kann...

    thx & cu



  • 😮


Anmelden zum Antworten