T
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