#include "Maus.h" #include "Bild.h" #include "Punkt.h" using namespace Framework; // Inhalt der Maus Klasse aus Maus.h // Konstruktor Maus::Maus() : ReferenceCounter(), hMaus(LoadCursor(0, IDC_ARROW)) {} // nicht constant void Maus::ladeMaus(int mausId) { if (mausId == MausId::nichts) hMaus = 0; if (mausId == MausId::normal) hMaus = LoadCursor(0, IDC_ARROW); if (mausId == MausId::hand) hMaus = LoadCursor(0, IDC_HAND); if (mausId == MausId::warten) hMaus = LoadCursor(0, IDC_APPSTARTING); if (mausId == MausId::verschieben) hMaus = LoadCursor(0, IDC_SIZEALL); if (mausId == MausId::text) hMaus = LoadCursor(0, IDC_IBEAM); if (mausId == MausId::wahgerecht) hMaus = LoadCursor(0, IDC_SIZEWE); if (mausId == MausId::senkrecht) hMaus = LoadCursor(0, IDC_SIZENS); if (mausId == MausId::diagonal1) hMaus = LoadCursor(0, IDC_SIZENWSE); if (mausId == MausId::diagonal2) hMaus = LoadCursor(0, IDC_SIZENESW); if (mausId == MausId::verboten) hMaus = LoadCursor(0, IDC_NO); SetCursor(hMaus); } void Maus::ladeMaus(Bild* maus) { HBITMAP hAndMaskBitmap; HBITMAP hXorMaskBitmap; HDC hDC = GetDC(0); HDC hAndMaskDC = CreateCompatibleDC(hDC); HDC hXorMaskDC = CreateCompatibleDC(hDC); hAndMaskBitmap = CreateCompatibleBitmap(hDC, maus->getBreite(), maus->getHeight()); hXorMaskBitmap = CreateCompatibleBitmap(hDC, maus->getBreite(), maus->getHeight()); // Select the bitmaps to DC HBITMAP hOldAndMaskBitmap = (HBITMAP)SelectObject(hAndMaskDC, hAndMaskBitmap); HBITMAP hOldXorMaskBitmap = (HBITMAP)SelectObject(hXorMaskDC, hXorMaskBitmap); // Scan each pixel of the souce bitmap and create the masks int y; for (int x = 0; x < maus->getBreite(); ++x) { for (y = 0; y < maus->getHeight(); ++y) { int pixel = maus->getPixel(x, y); if (((pixel >> 24) & 0xFF) == 0) { SetPixel(hAndMaskDC, x, y, RGB(255, 255, 255)); SetPixel(hXorMaskDC, x, y, RGB(0, 0, 0)); } else { SetPixel(hAndMaskDC, x, y, RGB(0, 0, 0)); SetPixel(hXorMaskDC, x, y, RGB((pixel >> 16) & 0xFF, (pixel >> 8) & 0xFF, pixel & 0xFF)); } } } SelectObject(hAndMaskDC, hOldAndMaskBitmap); SelectObject(hXorMaskDC, hOldXorMaskBitmap); DeleteDC(hXorMaskDC); DeleteDC(hAndMaskDC); ReleaseDC(0, hDC); ICONINFO iconinfo = {0}; iconinfo.fIcon = 0; iconinfo.xHotspot = 0; iconinfo.yHotspot = 0; iconinfo.hbmMask = hAndMaskBitmap; iconinfo.hbmColor = hXorMaskBitmap; hMaus = CreateIconIndirect(&iconinfo); SetCursor(hMaus); } void Maus::update() { SetCursor(hMaus); } // constant HCURSOR Maus::getMausHandle() { return hMaus; }