123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- #include "Maus.h"
- #include "Bild.h"
- #include "Punkt.h"
- #include "Farbe.h"
- using namespace Framework;
- // Inhalt der Maus Klasse aus Maus.h
- // Konstruktor
- Maus::Maus()
- {
- ref = 1;
- hMaus = LoadCursor( 0, IDC_ARROW );
- }
- // Destruktor
- Maus::~Maus()
- {
- }
- // 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->getHöhe() );
- hXorMaskBitmap = CreateCompatibleBitmap( hDC, maus->getBreite(), maus->getHöhe() );
-
- //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
- for( int x = 0; x < maus->getBreite() ; ++x )
- {
- for( int y = 0; y < maus->getHöhe(); ++y )
- {
- Farbe *pixel = maus->getPixel( new Punkt( x, y ) );
- if( !pixel->getA() )
- {
- 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->getR(), pixel->getG(), pixel->getB() ) );
- }
- pixel->release();
- }
- }
- 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;
- }
- // Reference Counting
- Maus *Maus::getThis()
- {
- ref++;
- return this;
- }
- Maus *Maus::release()
- {
- ref--;
- if( !ref )
- delete this;
- return 0;
- }
|