bitmap als button
-
guten abend alle,
ich habe ein kleines problem, und ich komme nicht weiter.... (die suchfunktion funktioniert bei mir nicht

ich will gerne statt normalen button z.b. ein auto nehmen.
das auto ist als bitmap abgespeicher.mein problem.... ich habe no ahnung wie es geht :|
das bsp. aus fqs hilft mir nicht weiter weil dar wird normaler button grafisch dargestellt und nicht eins aus bitmap geladen.
big thx für eure antworten im vorraus.
-
BS_BITMAP, BM_SETIMAGE
-
genau darum gings mir nicht....
ich will kein bild auf button zeichnen, sonder ganz neue button-form erstellen.
-
-
eine idee schrieb:
mein freund, ich glaube das regions nicht das richtige ist was ich suche...
Petzold hat so was änliches auf s. 360 gecodet, aber halt ohne bitmaps sondern selbst gezeichnet die buttons.
und ich will die buttons-form selbst bestimmen und einen bitmap drauf legen.
-
BS_OWNERDRAW
-
ownerdraw schrieb:
BS_OWNERDRAW
so weit bin ich auch bereits

aber wie gehts weiter?
plz um links auf gute seiten
thx
-
Also wenn du kein rechteckiges Fenster haben möchtest brauchst du Regions!
-
@keine idee: wo genau liegt denn dein problem? hab grad kein link zu nem kompletten tutorial, aber an sich sollte es auch nicht so schwer sein.
du verpasst deinem button den stil BS_OWNERDRAW, und sobald du in der callback die nachricht WM_DRAWITEM bekommst, malst du deinen button.die msdn ist die beste hilfe die du kriegen kannst.
gehts dir überhaupt darum, dass die buttons eine andere form als ein rechteck annehmen sollen?
-
so kann das aussehen:
#define ID_UNSER_BUTTON 1 BOOL ButtonZeichnen (LPDRAWITEMSTRUCT, HBITMAP, HBITMAP, HBITMAP, int, int, int, int) ; //in der WndProc LPDRAWITEMSTRUCT lpItem ; HINSTANCE hInstance ; HBITMAP hBitmapButtonAus, hBitmapButtonAn, hBitmapButtonFokus ; case WM_CREATE : hInstance = ((LPCREATESTRUCT) lParam) -> hInstance ; CreateWindowEx (NULL, "button", "", WS_CHILD | WS_VISIBLE | BS_OWNERDRAW, 10, 10, 80, 25, hwnd, (HMENU) ID_UNSER_BUTTON, hInstance, NULL) ; // Die Bitmaps aus den Resourcen laden hBitmapButtonAus = LoadBitmap (hInstance, MAKEINTRESOURCE(IDB_BITMAP1)) ; hBitmapButtonAn = LoadBitmap (hInstance, MAKEINTRESOURCE(IDB_BITMAP2)) ; hBitmapButtonFokus = LoadBitmap (hInstance, MAKEINTRESOURCE(IDB_BITMAP3)) ; return 0 ; case WM_DRAWITEM : lpItem = (LPDRAWITEMSTRUCT) lParam ; switch (lpItem->CtlID){ case ID_UNSER_BUTTON : ButtonZeichnen (lpItem, hBitmapButtonAus, hBitmapButtonAn, hBitmapButtonFokus, 0, 0, 0, 0) ; break ; return 0 ; case WM_DESTROY : DeleteObject (hBitmapButtonAus) ; DeleteObject (hBitmapButtonAn) ; DeleteObject (hBitmapButtonFokus) ; PostQuitMessage (0) ; return 0 ; // Ende WinProc /* Unsere Funktion die Buttons zeichnen lpItemS - muss übergeben werden hBitmapAus - Bitmap wenn Button aus ist, muss übergeben werden hBitmapAn - Bitmap wenn Button gedrückt ist, kann NULL sein, wird dann aber hBitmapAus verwendet hBitmapFokus - Bitmap wenn Button den Fokus hat, kann NULL sein, wird dann aber hBitmapAus verwendet xPos - x-Koordinaten, Statndartwert 0 yPos - y-Koordinaten, Statndartwert 0 iBreite - Breite des Controls, kann 0 sein, wird dann aus dem lpItemS ausgelesen iHoche - Hoche des Controls, kann 0 sein, wird dann aus dem lpItemS ausgelesen */ BOOL ButtonZeichnen (LPDRAWITEMSTRUCT lpItemS, HBITMAP hBitmapAus, HBITMAP hBitmapAn, HBITMAP hBitmapFokus, int xPos, int yPos, int iBreite, int iHoche){ HBRUSH hbr, hbrPrevious ; switch (lpItemS->itemAction){ case ODA_DRAWENTIRE: if (!hBitmapAus){ return FALSE ; } hbr = CreatePatternBrush (hBitmapAus) ; break ; case ODA_FOCUS : if (hBitmapFokus){ hbr = CreatePatternBrush (hBitmapFokus) ; } else{ hbr = CreatePatternBrush (hBitmapAus) ; } break ; case ODA_SELECT: if (lpItemS->itemState & ODS_SELECTED){ if (hBitmapAn){ hbr = CreatePatternBrush (hBitmapAn) ; } else{ hbr = CreatePatternBrush (hBitmapAus) ; } } else{ hbr = CreatePatternBrush (hBitmapAus) ; } break ; } if ((hBitmapAus) || (hBitmapAn) || (hBitmapFokus)){ if (iBreite == 0){ iBreite = lpItemS->rcItem.right ; } if (iHoche == 0){ iHoche = lpItemS->rcItem.bottom ; } hbrPrevious = (HBRUSH) SelectObject (lpItemS->hDC, hbr) ; PatBlt (lpItemS->hDC, xPos, yPos, iBreite, iHoche, PATCOPY) ; SelectObject (lpItemS->hDC, hbrPrevious) ; DeleteObject (hbr) ; return TRUE ; } return FALSE ; }ich glaube das ist alles...
kann in die FAQs